else if(type == typeof(ProjectileController)) { GameObject go = Managers.Resource.Instantiate("FireProjectile.prefab", pooling: true); go.transform.position = position; ProjectileController pc = go.GetOrAddComponent<ProjectileController>(); Projectiles.Add(pc); pc.Init(); return pc as T; } 총알이 계속 안불러와져서 코드실수인가 해서 계속 체크하다가 중단점 잡고 보니 else if (typeof(T).IsSubclassOf(typeof(ProjectileController))) 이 부분을 else if(type == typeof(ProjectileController)) 이렇게 바꾸고나니 총알이 제대로 불러와지더라구요 뭐가 문제인가요?? 강사님 코드에서는 isSubclassOf 를 쓰셔도 잘 발사가 되는거 같은데
캐릭터가 몬스터한테 둘러쌓여서 밀린후에 빠져나가고 가만히 있으면 아무런 동작을 하지 않음에도 캐릭터가 천천히 밀리고 있어요 그래서 원래 코드인 Vector3 dir =_ moveDir * _speed * Time.deltaTime; transform.position += _dir; 이 부분을 rigidbody를 가져와서 아래와 같이 바꿨는데 Vector2 dir = _moveDir * _speed * Time.deltaTime; _rigid.MovePosition(_rigid.position + dir); 문제 되는 부분이 있을까요?? 해결방법이 추후 강의목차에서 해결이 되나요?
UI_Base Start() 함수 호출순서에 관한 질문 안녕하세요, 유니티강의파트3과 본 강의를 모두 수강하고, 올려주신 프로젝트코드로 공부하고 있는 도중 혼자 해결하기 어려운 부분이 생겨 질문 남깁니다. UI_Base.cs 클래스의 Start()함수 호출순서에 관한 질문인데요, 먼저 UI_TitleScene 클래스의 실행흐름부터 제가 이해한대로 말씀드리면 Awake() -> Init() -> Start() 순으로 실행되는것으로 파악했습니다. 이때 아시다시피 UI_TitleScene은 UI_Scene을 상속받고, UI_Scene은 UI_Base를 상속받습니다. Init()함수는 Abtract class인 UI_Base의 virtual 함수이고요. 여기까지는 쉽게 잘 이해되었습니다. [UI_TitleScene.cs] -- 다음 스타트버튼을 누르면 로비씬으로 넘어가는데, UI_LobbyScene에서는 아래와 같이 오버라이드된 Init()함수를 호출하는 부분이 없습니다. 참조를 찾아보아도 UI_LobbyScene의 Init()을 부르는 부분은 없고, 디버깅 중 호출스택을 살펴보면 UI_Base의 Start()에서 호출되었다고 나옵니다. 이 부분이 이해가 안갑니다!! [UI_LobbyScene.cs] -- 여기서 제가 이해 안되는부분을 좀 더 자세히 말씀드리자면, UI_TitleScene, UI_LobbyScene 모두 UI_Scene을 상속받고 UI_Scene은 UI_Base를 상속받는 구조인데, 왜 UI_LobbyScene의 Init()함수 실행시 UI_Base의 Start()함수에서 넘어오는지가 궁금합니다. [UI_Base.cs] UI_TitleScene에 정의된 Init()은 동일클래스내의 Awake()부분에서 Init()을 호출하고 있으니 이해가 되는데, UI_LobbyScene은 Init()함수를 명시적으로 호출하는 부분이 없고, UI_Base의 Start()함수내에서 Init() 실행시 UI_LobbyScene의 override된 Init()을 실행하는점이 이해가 안됩니다. 아마 UI_Base의 Start()함수 실행시점을 파악하지 못해 생긴 궁금증인 것 같기도 합니다.. 왜 UI_TitleScene의 코드가 Awake(), Start()될 때 UI_Base의 Awake()나 Start()가 실행되지 않고, 게임시작버튼을 누르고 로비로 넘어갈 때 왜 실행되는지가 궁금합니다. 제가 이해하지 못한 부분을 설명하기가 굉장히 어렵네요ㅠ 감사합니다.
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
https://blog.naver.com/we5046/223172915438 강사님께서 진행하신대로 이동할때 Map에게 모든 정보를 넘기므로 충돌을 관리하는데, EnterGame 부분에 Map.ApplyMove를 추가하여 플레이어가 아무 이동을 하지 않고 0,0 좌표에 있을때 화살 타격이 불가능하여 추가 할 경우 타격을 입게 될 것임이 분명한데 해당 영상을 보시면 Unity에서 실행 하는 Player는 타격을 입고, 그뒤 추가로 생성하는 Player또한 타격을 입는데, 맨 처음 같이 생성된 Player들중 한명을 움직이지 않고 냅두면 화살을 피하는 문제가 발생합니다. 이러한 오류가 발생하는 이유가 무엇인지 궁금합니다. 해당 오류가 왜 발생하는지 생각해보니, 처음 실행된 Player1에게는 새로 등장한 Player2의 정보가 Player1의 맵으로 전달이 되지않은 것인가 라는 문제 점을 생각해보게 되었습니다. 그래서 기존 EnterGame에서 해당 플레이어의 등장을 타인한테 정보전송하는 부분에 해당 플레이어의 위치를 Map에 전파하도록 작성하니 정상적으로 작동하게 되었습니다.
InputManager 에서 마우스든,키보드든 아무키나 눌렸는지 확인할때 Input.anyKey == false 를 사용하셨는데요. (KeyAction == null) 이렇게 사용해도 같은 의미인것 같아서 혼란스러운데요. (KeyAction == null) 이 내용으로 대체해도 상관 없나요?
강의영상 4분쯤에 20번째 줄 보겠습니다. _tile = new TileType[size, size]; 이렇게 해서 tile 변수에 TileType[size,size] 인스턴스(?)를 만들고 넣어 줬는데요. 질문이 여러개 있습니다. 애초에 TileType은 클래스가 아니라 열거형 형식이라 new TileType[size,size] << 이걸 인스턴스라 불러도 되나요? 아니면 뭐라고 불러야 할까요?(이것만 대답해 주셔도 될 것 같습니다^0^)/) TileType정의할때 TileType이 인덱스를 따로 가지고 있도록 정의하지 않았는데 어떻게 인덱스를 쥐고서 인스턴스를 만들 수 있나요?(해결..) 2번 질문을 곰곰히 생각해보고 검색도 좀 해보니까 string배열 만들듯이 값 타입이든 참조 타입이든 일단 데이터 타입이면 배열 선언이 모두 가능 하더군요. 그래서 열거형도 값 타입의 일종이니까 배열 선언이 가능하다 라는 걸 깨달았습니다. 혹시 다른 분들도 궁금하실 수 있으니 내용은 지우지 않고 남겨 두겠습니다. ^0^)
안녕하세요. 올려주신 강의는 마지막까지 잘 들었습니다. 강의 토대로 모작을 해보고 있는 중인데 올려주신 최종 코드로 게임을 돌려보면 후반부에 프레임 드랍과 부하가 너무 심하더군요. 배치도 500 이상으로 올라가구요. 아마도 몹수 보다는 경험치 보석 때문인거 같은데 어떻게 해결할 수 있을까요? 보석은 중간 중간에는 자석으로 없앨 수 있지만 후반부에 몹들이 몰려와서 플레이어가 정지해 있으면서 보석이 쌓이는 구간에 들어서면 눈에 띄게 부하가 걸리는게 보입니다. 또한 모바일에서는 어느 정도 배치와 드로우콜을 목표로 개발해야 할지 알려주시면 좋겠습니다.