묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
보스와 인공지능에서 질문있습니다.
안녕하세요.보스와 인공지능에서 보스의 캐릭터가 영상처럼 공격을 하고 다시 찾고 하지 않습니다.혹시 몰라서 보스와 인공지능의 프로젝트파일로 열어서 확인해보아도 동일한 현상이 발생하였습니다.그래도 혹시 몰라서 코드와 파일을 복사 붙어넣기해도 동일한 증상이 발생하였습혹시 짐작되는 부분이 있을까요? 추가 정보MonsterController 의 UpdateController가 작동이 안되는 것을 확인하였습니다.BossController 의 UpdateMoving도 작동안되는 것을 확인했습니다.Play 와 CrossFade 도 같은 증상입니다.
-
미해결
유니티 한 씬에 여러 스테이지 표현
안녕하세요 유니티 독학을 한 후 제대로된 개발을 처음 해보는 사람입니다ㅠㅠ 다름이 아니라, 총 20스테이지에 각 스테이지마다 15개의 부가 스테이지를 만들고 싶은데요,, 스테이지마다 씬을 다르게 하려다보니 씬 갯수가 300개가 나올 것 같아서 질문 드립니다.각 스테이지마다 배경 이미지가 변경이 되어 한 스테이지에 나오는 15개의 부가 스테이지는 뒷 배경 변경이 없이 오브젝트만 변경이 될 것 같은데요 이럴 경우에 한 씬에 15개의 부가스테이지를 다 몰아서 표현할 수 있을까요? 배경만 같고, 부가 스테이지마다 클리어 조건은 다릅니다ㅠㅠ만약 가능하다면 혹시 어떻게 표현을 할 수 있을지 방법까지 여쭤봐도 될까요?ㅠㅠ 유니티 책 두권으로 독학을 했는데, 두 권 다 기초 책이라 새로운 씬을 만드는 방법만 알려주네요
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
Addressable 에러납니다...
Addressable설치 하고 에디터 Play하면 위와 같은 에러가 발생합니다... 버전 업/다운을 해봐도 마찬가지네요... 찾아보니 대략 이런 내용인거 같은데 해결을 못하겠네요 https://forum.unity.com/threads/addressablesgroupwindow-missing-styles-in-2022-3-1.1445899/
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Quaternion.Slerp 적용하면 유니티 짱이 20~30도 쓰러져요.
화면 클릭해서 이동시 transform.LookAt(_destPos); 위 코드 대신부드럽게 회전하기 -- 아래 코드로 하면 마지막 멈출때 유니티 짱이 쓰러짐. ㅜㅜtransform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 5 * Time.deltaTime); //t는 회전 속도 trasform.LookAt(_destPos)일때는 쓰러지지 않습니다.
-
미해결따라하면서 배우는 고박사의 유니티 기초
강의자료 다운로드가 가능할까요?
강의 너무 잘 듣고 있습니다. 리마인드 학습에 활용하려고 하는데 강의 자료는 받을 수 없는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
널레퍼런스 오류
온드래그 핸들러 부분에서 널 레퍼런스 오류가 뜹니다 44번 줄에서 에러가 난다고 뜨는데 이 부분을 모르겠습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버엔진 수요에 관해서 질문드립니다.
대학 게임학과에 재학 중인 학생입니다.교수님과 게임서버프로그래밍에 대해 상담을 나누는 도중교수님께서 MMORPG를 포함한 대부분의 프로젝트에서 서버를 직접 만드는 경우는 거의 없고언리얼 데디케이트, 포톤, 프라우드넷 같은 이미 만들어진 모델이나 서버엔진을사용한다고 말씀하셨는데 정말인가요?보통 반대로 대부분의 프로젝트가 게임에 맞춰 서버엔진을 제작하는 줄 알았는데제가 알던 상식과는 너무 달라서 질문드립니다.
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
카트레이싱 환경관련 문의
안녕하세요, 수업은 다 듣고 실습부분만 조금씩 다시 따라가고 있는데요,카트레이싱에서 환경 구축을 다 하고, KartAgent 코드도 깃허브에 있는거 그대로 C# 코드 옮기고, AcadeKart 코드도 수정을 다 했는데, 이상하게 카트가 1번 웨이포인트 지나고 리셋이 됩니다. 파이토치와 유니티 책에는 OnEpisode 함수에 for문이 있는데, 넣고 빼고는 상관이 없더라구요, 웨이포인트를 이어가지 못하거나 중간에 충돌이라고 판단하거나 기타 리셋 조건이 문제인것 같은데, 어딜 봐야 할지 조언을 주실 수 있으신가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
NullReferenceException 오류 입니다 ㅠㅠ..
void Start() { Bind<Button>(typeof(Buttons)); Bind<TextMeshProUGUI>(typeof(Texts)); Get<TextMeshProUGUI>((int)Texts.ScoreText).text = "Bind Test"; } void Bind<T>(Type type) where T : UnityEngine.Object //reflection 사용 { string[]names = Enum.GetNames(type); UnityEngine.Object[] objects = new UnityEngine.Object[names.Length]; _objects.Add(typeof(T), objects); for (int i = 0; i<names.Length;i++) { objects[i] = Util.FindChild<T>(gameObject, names[i], true); } } T Get<T>(int idx) where T : UnityEngine.Object { UnityEngine.Object[] objects = null; if (_objects.TryGetValue(typeof(T), out objects)==false) return null; return objects[idx] as T; }기존에 Text를 TextMeshProUGUI로 바꾸고 using TMPro;도 추가했는데도 계속해서 해당 오류가 발생하네요...도저히 원인을 못찾겠습니다 ㅠㅠ
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
JobQueue 사용에 대한 질문
우선 저는 단순히 Lock 만 사용하면 무수한 경합으로 인해 성능적으로 손해를 볼 수 있어 Job Queue 를 사용하는 것으로 이해를 했습니다.그래서 이것저것 연습하면서 Job Queue 를 계속 사용하고 있는데 도중에 몇몇 의문이 생기어 질문을 드리게 되었습니다. Job Queue 를 사용하다보면 Job Queue 내에 또 다른 Job Queue 를 사용해야하는 상황이 발생하는데 이 부분은 문제가 되지 않을까요?아래는 예시 코드입니다.public void Function() { MatchingManager.Instance.Push(() => { ... User.Party.Push(() => { ... }); }); } Lock 처럼 사용하면 된다 라는 생각은 옳은 것인가요? 아니면 Lock 과는 달리 Job Queue 사용 시 주의 할 부분이 있을까요? 항상 양질의 강의를 제공해주셔서 감사드립니다.
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
IAPManager 에러
파일을 다운받고 게임을 실행하니 Assets\Scripts\Manager\IAPManager.cs(9,27): error CS0535: 'IAPManager' does not implement interface member 'IStoreListener.OnInitializeFailed(InitializationFailureReason, string?)' 위와 같은 에러가 뜨네요. 유니티 버전은 2021.3.21f1입니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
LayerMask를 사용하면 왜 최적화가 되는지 잘 이해가 되지 않습니다.
LayerMask를 통해 RayCasting을 하면 하지 않았을 때보다 최적화가 된다고 하셨는데 왜 그런지 잘 이해가 되지 않습니다. 혹시 더 자세하게 알려주실 수 있나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Session #2 내용중 왜 스레드가 동시다발적으로 접근 불가능한지 질문
Session#2 강의 시작부분에 설명해주신 내용에서, SEssion의 receive는 OnRecvCompleted()메서드에 여러 스레드가 동시다발적으로 들어가는 경우는 없다. 라고 하셨는데, 왜 그런지 이해를 못했습니다. ServerCore의 OnAcceptHandler는 콜백함수라서 콜백함수는 다른 스레드가 생겨나서 실행이 된다고 들었던 것 같은데, 그렇다면 두 스레드가 OnAcceptHandler에서 Session.Start()를 해버리면 OnRecvCompleted()메서드를 두 스레드가 동시에 실행할 경우가 생기지 않나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
listener, session 간의 차이
안녕하세요, listener, session 코드간 차이점에 대해서 질문이 있습니다. 1, listener에서는 OnRecvCompleted()와같은 메서드에서 socketerror가 발생했을 때, disconnect를 하지 않았는데, session에서는 왜 disconnect를 하는 건가요? 2.listener 에서는 registerRecv() 와같은 함수를 OnRecvCompleted의 if, else와 상관없이 실행한거같은데, 왜 session에서는 if(args.Bytes.Transferred > 0 && ~~~) 을 만족해야 OnRecvCompleted를 실행하는건가요? using System; using System.Collections.Generic; using System.Net.Sockets; using System.Text; namespace ServerCore { class Session { Socket _socket; public void init(Socket socket) { _socket = socket; SocketAsyncEventArgs recvArgs = new SocketAsyncEventArgs(); recvArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnRecvCompleted); //userTocken으로 추가적인 정보를 아무거나넘겨줄 수 있다(object를 받기 때문) recvArgs.SetBuffer(new byte[1024],0,1024); RegisterRecv(recvArgs); } void RegisterRecv(SocketAsyncEventArgs args) { args.AcceptSocket = null; bool pending = _socket.ReceiveAsync(args); //바로 성공했으면 if(pending == false) { OnRecvCompleted(null, args); } } void OnRecvCompleted(object obj, SocketAsyncEventArgs args) { //BytesTransferred == 몇바이트 받았는지 if (args.BytesTransferred>0 && args.SocketError == SocketError.Success) { try { string recvData = Encoding.UTF8.GetString(args.Buffer, args.Offset, args.BytesTransferred); Console.WriteLine($"[from client] : {recvData}"); RegisterRecv(args); } catch(Exception e) { Console.WriteLine($"onrecvcompleted failed {e}"); } } else { //TODO Disconnect } } } }
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Listener, Session 에서의 콜백메서드 질문
안녕하세요, listener, session 클래스를 구현할 때, 콜백메서드에 대해 질문이 있습니다. 아래와 같은 코드에서, using System; using System.Collections.Generic; using System.Net.Sockets; using System.Text; namespace ServerCore { class Session { Socket _socket; public void init(Socket socket) { _socket = socket; SocketAsyncEventArgs recvArgs = new SocketAsyncEventArgs(); recvArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnRecvCompleted); //userTocken으로 추가적인 정보를 아무거나넘겨줄 수 있다(object를 받기 때문) recvArgs.SetBuffer(new byte[1024],0,1024); RegisterRecv(recvArgs); } void RegisterRecv(SocketAsyncEventArgs args) { args.AcceptSocket = null; bool pending = _socket.ReceiveAsync(args); //바로 성공했으면 if(pending == false) { OnRecvCompleted(null, args); } } void OnRecvCompleted(object obj, SocketAsyncEventArgs args) { if (args.SocketError == SocketError.Success) { string recvData = Encoding.UTF8.GetString(args.Buffer, 0, args.Buffer.Length); Console.WriteLine($"[from client] : {recvData}"); } else { Console.WriteLine(args.SocketError.ToString()); } RegisterRecv(args); } } } 해당 RegisterRecv()메서드에서 pending이 false인 경우 바로 OnRecvCompleted()를 호출해주는거고, true인 경우 콜백메서드로 OnRecvCompleted가 호출되는 형식이라고 이해를 했는데, void RegisterRecv(SocketAsyncEventArgs args) { args.AcceptSocket = null; bool pending = _socket.ReceiveAsync(args); //바로 성공했으면 if(pending == false) { OnRecvCompleted(null, args); } }그렇다면, pending이 false인 경우에는 if(pending == false) { OnRecvCompleted(null, args); }여기서 OnRecvCompleted() 호출되고 또 콜백메서드에서 또 한번 호출되는 것 아닌가요? 콜백메서드가 false인 경우에 2번호출되지 않는다는 것을 어떻게 이해하면 될까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
제네릭 타입 질문
학습중에 클래스를 제네릭으로 받으면 어떻게 될까 궁금해 한번 받아봤습니다!우선 필요한 정보를 받아올때 json 파일마다 역직렬화 & 직렬화 용도의 클래스가 다르기 때문에해당 부분을 public IEnumerator CoDownLoadJsonData<T>(string URL) where T : class { UnityWebRequest request = UnityWebRequest.Get(URL); yield return request.SendWebRequest(); // 에러 발생 시 if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.Log(request.error); } // 에러 없을 시 else { // S3의 JSON 파일 읽어와서 넣어주기 T[] jsonDatas = JsonConvert.DeserializeObject<T[]>(request.downloadHandler.text); // 그 뒤 값 처리 해주는 부분 foreach (T jsonData in jsonDatas) { // TEMP Debug.Log(무슨 값을 넣어야 할까요); } } }이렇게 짜봤습니다. 위의 함수를 실행 할 때 넣은 T 값은 public class JsonData{ public string name; public int coin; public int ruby;}JsonData라는 클래스 입니다.그리고 다운로드 받은 json 데이터의 name 값을 보기위해 '무슨 값을 넣어야 할까요'부분에 jsonData.name을 쳐보았지만 타입이 제네릭이라 받기전까지 name이 있나 없나를 알 수 없기 때문에 당연히 해당 코드는 에러가 났습니다. 이러면 파싱 받을 json 데이터 마다의 클래스를 따로 분기해서 처리해줘야 한다는 말인데 제네릭 타입을 이용하여 루키스님 처럼 우아?하게 코드를 짜보고 싶은 생각이 드네요. 방법을 못 찼겠어서 질문드립니다!!현재 저의 머리로는 제네릭으로 만든후 안에 조건문을 추가해서 as 로 파싱되면 그쪽으로 처리하는 분기문을 만드는게 한계인거 같네요 ㅠㅠ값은 정상적으로 받아와집니다만 브레이크 포인트를 통해서 값을 확인하는 것이 아니면 확인이 안되네요 ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
환경설정 질문입니다
안녕하세요 선생님, 제가 새 프로젝트를 만들면서 이름과 위치를 정하고 다음으로 넘어갔더니 대상 프레임워크에 .NET Core 3.1 (지원하지 않음) 이라고 나옵니다.visualstudio installer에서 제가 보기에 c#에 관련된 것은 다 설치한 상태인데 더 설치해야 하는 것이 있는걸까요?
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
karting asset
karting asset을 다운 받아서 OvalTrack을 화면에 추가하려고 하는데 트랙 모양이 왜 이렇게 뜨는 건가요?asset을 지우고 다시 설치해도 똑같아요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
싱글톤패턴에서 질문
18:25쯤에 public static Managers instance {get{init(); return s_instance;}}로 함수에서 프로퍼티로 바꿔서 ()없이 가져오기 편하게 바꾸셧는데 이떄 {}안에 init();을 넣은 이유는 안넣으면 return s_instance;할때 오류가나서 그런가요? 이유를 알고싶어요
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 강의 시청중 궁금한점 생겨서 질문드립니다.
소켓 프로그래밍 예제들을 찾아보다가 아래의 사진처럼 await/async 비동기 방식으로 소켓프로그래밍 하는 예제를 보았는데요, 강의에서 사용된 소켓 프로그래밍 코드와 await/async 비동기 방식을 사용한 소켓프로그래밍 코드의 차이점(생산성, 속도 등등)이 궁금합니다.