02-04 점프발판 Animation 뷰에서 이미지 나오게 하는 방법이 궁금해요.
해결됨
[유니티6] 따라하면서 배우는 실전 게임 제작 2D Platformer
제 유니티에서는 이미지가 안보이고, 점으로만 표시가 되요. 그래서 챗지피티에게 물어봐도 마땅한 답을 잘 못찾겠어요. 스크롤로 확대를 최대한 해도 이미지가 안보여요. 무슨 방법 있을까요?
- C#
- unity
173만명의 커뮤니티!! 함께 토론해봐요.
해결됨
[유니티6] 따라하면서 배우는 실전 게임 제작 2D Platformer
제 유니티에서는 이미지가 안보이고, 점으로만 표시가 되요. 그래서 챗지피티에게 물어봐도 마땅한 답을 잘 못찾겠어요. 스크롤로 확대를 최대한 해도 이미지가 안보여요. 무슨 방법 있을까요?
해결됨
[유니티6] 따라하면서 배우는 실전 게임 제작 2D Platformer
내용이 너무 좋은 것 같아서 즐겁게 배우고 있다는 이야기부터 전합니다. rb . isKinematic = true ; rb . velocity = Vector2 . zero ; // 사실상 불필요?. 위에서처럼 rb.velocity 값을 Vector2.zero 로 할 필요가 없지 않나요? 챗지피티에게 물어보면 불필요하다고 하는데... 정확한지 몰라서 여쭙니다.
해결됨
[유니티6] 따라하면서 배우는 실전 게임 제작 2D Platformer
ex) Mathf.PingPong(1.1, 1); 일때 반환되는 값은 0.9 이렇게 되어 있는데 0.1로 수정하셔야 겠어요. 오타같습니다.
해결됨
[Unity] 함께 만들어가는 방치형 게임 개발
데이터 베이스 불러올때 public void ReadData() 함수에서 만약에, 저장된 파일이 없을때 불러오려고 하면 에러날수도 있을거같아서 혹시 if( 그 유저의 저장된파일이 있다면 ) { ReadData(); //데이터를 불러온다. } else { return;} 이렇게 코드를 짜보고싶은데 위에서 if 안에 들어갈만한 ( 그 유저의 저장된파일이 있다면 ) 에 혹시 뭐라고 쓰는게 좋을까요? ㅠㅠ
해결됨
[유니티6] 따라하면서 배우는 실전 게임 제작 2D Platformer
이번 강의에서 PlayerController의 다음 코드가 작동하려면 void UpdateBelowCollision (){ if ( movement . HitBelowObject . TryGetComponent < PlatformBase >( out var platform )){ if ( ! platform . IsHit ){ platform . UpdateCollision ( gameObject ); // gameObject는 플레이어 } } } 적어도 Platform_00_Moving 프리팹에, PlatformBase를 상속받은 클래스가 있는 스크립트를 어태치해야 될 것 같습니다. 그래서 GetComponent로도 찾아지고, UpdateCollision메소드도 실행되구요.
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
24.10.29 수정 맨 밑에 해결 방안 적어놨습니다. 저처럼 고생하는 사람 없기를 바랍니다. 24.10.24? socket 이 null인데요. 해당 호출스택입니다 socket = null 조사식 캡처본입니다. 이전 강의에서도 처음 실행했을 때 네트워크 허용 관련 창이 떴었는데 빠르게 누르면서 뭘 눌렀는지 모를정도로 가볍게 생각하고 넘어갔는데 계속 이런 상황이라 디버깅이 어렵네요. 다른 질문에도 Unhandled Exception 나온 분꺼도 읽었는데 일단 기본 테스트니까 넘어가라고 하셔서 했는데도 계속 뜨더라고요.. 4강 강의는 계속 이렇게 무시하고 진행해야 할까요? 구글링했을 때 제가 네트워크 허용안한거 같은데 다시 허용 뜨게 하는방법도 모르겠고, 조언 부탁드립니다 ㅠㅠ 24.10.27 추가 4번의 호출스택에서 _args.ConnectSocekt이 null 입니다. _args는 null이 아니고, SocketError는 success로 넘어옵니다. 그리고 네트워크 허용 창 같은 경우 방화벽을 다 해제하고도 진행해 봤었는데 그대로이며, 방화벽 다 해제하고, 다시 진행하니까 Sever를 허용 하시겠냐고 창이 떠서 이번에는 허용을 눌렀는데도 그대로입니다.. 디버깅 모드 하지 않고 실행하면 이러고 끝입니다. Socket Error 조사식. This protocol version is not supported. 저는 작업한것들을 강의마다 git으로 올려두고 있는데 혹시나하고 Session3 26강까지는 정상작동했다가 Session#4 27강에 해당 에러를 발견하게 됐습니다. 이전에 이런 에러가 없었는데.. 원인을 계속 찾아볼게요 24.10.29 해결 구글링과 gpt를 통해서 찾아봤습니다. 우선 연결할 port(7777)가 없는 것을 확인. 방화벽에서 차단하고 있는지 체크. 인바운드 규칙으로 포트 추가. 로컬 Ip를 직접 연결하고, TcpListner를 직접 Start 호출. 코드문제 1. Close 매개변수를 사용하지 않았습니다. 강의 따라가다가 놓친것 같네요.. 코드문제 2. _reserveSize == FreeSzie 같으면 null 일때 문제. 현재 Open 메서드에서 _reserveSize 가 FreeSize 와 같을 때 null을 반환하도록 되어 있습니다. 이 경우 OnConnected 메서드에서 Array.Copy 를 호출할 때 openSegment.Array 가 null이 되어 ArgumentNullException 이 발생할 수 있습니다. 이제 에러는 안나지만, 서버와 클라의 연결이 계속 안됐습니다. 이런식입니다. 그러다 멀티쓰레드를 사용하면 시간이 안맞아서 그럴 수 있다고 하더라고요 기존 IPAddress ipAddr을 원복시키고, Thread.Sleep으로 5초 늦게 연결 을 하니까 정상작동이 됐습니다 다른 도움이 필요하시면 ChatGPT에 기다려달라고하고 class 전체 복사해서 하나씩 읽게 한 다음에, 문제되는 점을 찾거나 에러 관련 질문을 넣으면 적지않게 도움을 받을 수 있을겁니다.
해결됨
[유니티6] 따라하면서 배우는 실전 게임 제작 2D Platformer
부서지는 타일에서 이상하게도 첫번째 타일을 정확히 맞추려해도 점프가 더 안 올라가면서 막히더라구요. 그래서 게임오브젝트를 찾아보니 부서지는 타일 좌측아래부분에 Level01 게임오브젝트의 BoxCollider가 있어요. 그래서 이것의 크기를 줄여야 했습니다.
해결됨
[유니티6] 따라하면서 배우는 실전 게임 제작 2D Platformer
설마 소스코드가 잘못 되었을 거라고는 상상을 못하고,,, 아무리 이것저것 설정을 바꾸고 새로 시도해봐도, 강의처럼 되지 않아서 하루종일 고생했습니다.... bounce되는 타일과 충돌했을 경우, 타일이 바운스되어야 되는데 그것이 안되요. 그래서 처음에는 내가 잘못 따라한 것인가 싶어서 강의를 몇번 돌려보고 확인하고, 코드도 확인하고, 배포한 소스코드랑도 비교해 보아도 도저히 답이 안나왔습니다. 그런데, 강사님은 해당코드로 작동이 잘 되니... 이상합니다. 우선, 플레이어가 타일과 부딪치면 타일충돌체에 맞아서 아래로 튕겨나옵니다. 그래서 ResetVelocityY를 해 줄 필요가 없습니다. 위로 솟아서 날라가지 못해요. 저절로 충돌되어 튕겨나오면서 아래로 내려옵니다.(혹시 mass를 늘려서 힘이 강하게 되면 모르겠습니다.) 진짜 문제가 된 부분은 UpdateAboveCollision() 메소드 부분입니다. if( movement.Velocity.y >=0 && movement.HitAboveObject !=null) 이렇게 조건을 걸어놓았는데, 플레이어가 타일과 충돌하면, 충돌하는 순간 속도가 0 가 되고 곧바로 아래로 떨어지면서 속도가 마이너스가 됩니다. 그런데, 위 조건에서는 속도가 0 보다 클 경우로 하니, 이 조건을 만족하지 못해서 그 아래의 코드가 실행되지 못합니다. 제가 충돌할 때의 플레이어리디드바디속도를 출력하니 모두 마이너스였습니다. (다른 스크립트에서 속도를 읽을 때는 충돌시점에서 0.0001라도 경과한 시점) 그래서 위 조건을 충족하지 못하니, 충돌해도 타일이 위로 바운스 되지 못했었습니다. 그래서 void UpdateAboveCollision (){ if ( movement . HitAboveObject != null ){ 이 조건으로 하면 됩니다. 여기서 ResetVelocityY() 도 호출할 필요 없습니다.
해결됨
[유니티6] 따라하면서 배우는 실전 게임 제작 2D Platformer
원래 있던 depth -1로 했더니, 배경화면만 나와서 depth 1로 했더니 잘 되는 것 같아요.
미해결
유니티 AR로 만드는 FPS 게임
올려주신 강의 자료에 총 구현_4 강의에 필요한 indicator image 가 없습니다.
해결됨
[Unity] 함께 만들어가는 방치형 게임 개발
제일 마지막 공유 에셋 파일 import 하면 지금까지 올려주신 모든 에셋 파일을 한번에 import 할 수 있는건가요? 총 9개의 다운로드 파일이 있던데 이거를 전부 다운받아서 import 해야하는지 궁금합니다
해결됨
[유니티6] 따라하면서 배우는 실전 게임 제작 2D Platformer
void JumpAdditive(){ if(jumpBufferCounter >0) jumpBufferCounter -=Time.deltaTime; if(jumpBufferCounter >0){ if(IsGrounded) { rb.velocity = new Vector2(rb.velocity.x, jumpForce); jumpBufferCounter =0; } } } 강의에서는 그것이 빠진 것 같아요. ============== 앗 제가 조금 성급했던 것 같습니다.... hangTime 이 적용되기 전에 저렇게 생각했는데... hangTime이 같이 어우러져서 조건이 만들어 지면... 강사님의 방식이 맞는 것 같아요.
해결됨
[Unity] 함께 만들어가는 방치형 게임 개발
다른 질문글도 있지만 개발 진행하며, 관련 코드가 없어 화면을 일일이 찾아야되는 부분이 있어 그런데, 혹시 지금까지 하셨던 내용선에서라도 한번 전체 소스코드를 올려주시는건 가능하신지 문의드립니다.
해결됨
[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
protocol.proto를 수정한 후 패킷 자동화를 돌렸는데 Protocol.cs가 수정되지 않았습니다. 혹시 GameServerPacketManager.cs 가 먼저 수정되고 Protocol.cs가 이후에 수정되면서 에러가 발생하여 문제가 생기는 걸까요?
미해결
C# 입문부터 Xamarin Forms(자마린 폼즈) + Maui(마우이) 안드로이드, 윈도우 앱(UWP) 동시에 만들기
Ch_1_비주얼스튜디오에 자마린 개발환경 추가하기 - 2 강의를 듣다가 프로젝트 개수가 달라 문의드립니다. (해당 강의에서는 iOS 미체크) 제가 실습하고 있는 환경에는 2개밖에 뜨지않습니다ㅠㅠ
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
VS2022 사용자분들 중, 강의 내용을 제대로 따라 갔음에도 클라에서 로그가 안 찍히는 경우가 있을 거에요. 삽질해본 결과 유니티에서 최대로 지원하는 .Netcore 버전보다 높은 버전으로 프로젝트를 생성하여 뽑혀나오는 dll 이 유니티 프로젝트와 호환되지 않기 때문인 것 같았어요. 따로 신경 쓰지 않으면 VS2022 로 프로젝트를 만들 때, .NetCore 버전이 6.0 이상으로 생성하실텐데, 강의와 동일한 버전으로 맞추면 다소 찝찝하긴 해도 문제가 해결되긴 합니다. ( 현 시점기준 3.1 은 유지보수가 중단됐어요... ) ServerCore.dll 도 3.1 로 뽑히고, nuget 으로 받아온 dll 도 프로젝트 버전에 맞게 바이너리에 잘 복사되더라구요. 추가) 혹시나 NetCore 6.0 에서 3.1로 변경 후 자동 생성된 static using 코드들로 인해 컴파일 에러가 자꾸 발생한다면, 해당 프로젝트의 proj 파일을 열어서 <ImplicitUsings>disable</ImplicitUsings> 로 바꿔주고, namespace 때문에 컴파일 에러 나는 부분들을 하나씩 수정해주면 해결됩니다.
해결됨
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
루키스님 안녕하세요? 기존 SendBuffer.cs는 메모리 누수 이슈 등으로 삭제하고 새로운 기법을 알려준다고 말씀해주셨는데 그게 최종적으로 ClientSession.cs의 Send()함수가 되는게 맞을까요? (아래 코드블록) 맞다면 Send()가 호출 될 때 마다 버퍼를 새로 생성하기 때문에 SendBuffer.cs의 강점이었던 하나의 거대한 메모리를 사용하면서 버퍼 생성 및 Copy가 줄어드는 이점이 없어진 걸로 이해가 됐는데, 기존의 SendBuffer.cs와 새로운 대체된 Send()의 장단점이 각각 궁금합니다. ClientSession.cs public void Send(IMessage packet) { string msgName = packet.Descriptor.Name.Replace("_", string.Empty); MsgId msgId = (MsgId)Enum.Parse(typeof(MsgId), msgName); ushort size = (ushort)packet.CalculateSize(); byte[] sendBuffer = new byte[size + 4]; Array.Copy(BitConverter.GetBytes((ushort)(size + 4)), 0, sendBuffer, 0, sizeof(ushort)); Array.Copy(BitConverter.GetBytes((ushort)msgId), 0, sendBuffer, 2, sizeof(ushort)); Array.Copy(packet.ToByteArray(), 0, sendBuffer, 4, size); Send(new ArraySegment<byte>(sendBuffer)); }
해결됨
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요? AraaySegment 관련해서 코드리뷰하다 궁금한게 생겨서 질문 드립니다. ArraySegment<byte>.Offset이 잘 이해가 안가서요. 제가 알아 본게 맞다면? Offset은 항상 0이 아니고 데이터가 시작하는 위치를 가르킴 그렇다면 _buffer는 항상 0부터 데이터를 사용하고 있으므로 항상 Offset은 0임 그렇다면 RecvBuffer.cs의 이 코드는 이렇게 바꿔도 되지 않을까? 원래 코드 public void Clean() { int dataSize = DataSize; if (dataSize == 0) { // 남은 데이터가 없으면 복사하지 않고 커서 위치만 리셋 _readPos = _writePos = 0; } else { // 남은 찌끄레기가 있으면 시작 위치로 복사 Array.Copy(_buffer.Array, _buffer.Offset + _readPos, _buffer.Array, _buffer.Offset, dataSize); _readPos = 0; _writePos = dataSize; } } 수정 후 Array.Copy(_buffer.Array, readPos, buffer.Array, 0, dataSize); _readPos = 0; _writePos = dataSize; 마찬가지로 Session.cs 에서 _buffer정보를 리턴해 주는 이 코드는 이렇게도 되지 않을까? 수정 전 void RegisterRecv() { if (_disconnected == 1) return; _recvBuffer.Clean(); ArraySegment<byte> segment = _recvBuffer.WriteSegment; _recvArgs.SetBuffer(segment.Array, segment.Offset, segment.Count); 수정 후 _recvBuffer.Clean(); ArraySegment<byte> segment = _recvBuffer.WriteSegment; _recvArgs.SetBuffer(segment.Array, segment.Offset, segment.Count); 제가 계속 곱씹어봤는데 Offset에 대한 이해가 안되서 ㅜㅜ 답변해주시면 감사하겠습니다.
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
여러 스레드에 의해 동시에 Disconnect()가 여러번 실행되는 걸 막으려고 Interlocked를 사용하여 처리한다고 하셨는데 현재 Session#1 강의 코드까지는 위와 같은 상황이 발생할 부분이 보이지 않는다고 생각하는데 맞을까요?
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
결국 상태 패턴을 적용해서 그걸 그대로 애니메이터의 스테이트로 연동하면서 정리하셨는데 만약 상태패턴을 그대로 쓰면서 브랜트 트리를 꼭 써야하는 프로젝트면 어떤식으로 정리하시는지 궁금합니다.