묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ClientSession의 Room이 null인 경우
안녕하세요.Part 4를 완강하고 Part 7으로 넘어가기 위해새로운 솔루션을 생성해서 기존 Part 4 솔루션 내의프로젝트들을 우선 Ctrl + C, V 한 뒤 기존 프로젝트 추가로Part 7에서 사용할 서버 솔루션을 Part 4와 동일하게 맞추는 작업을 하고 있었습니다!그런데, DummyClient의 연결 수를 20개 정도로 하면 문제가 없지만, 30개부터는 특정 ClientSession의 Room이 null인 상태에서 서버 측의 C_MoveHandler가 실행되어 서버가 뻗어버리는 경우가 간헐적으로 발생하고 있습니다.(강의 보면서 따라 한 솔루션은 100이면 100 잘 되며, 새롭게 복사한 솔루션은 대부분 잘 되지만 가끔식 위 오류가 발생합니다..) 처음엔 단순히 Ctrl+C , V 하는 과정에서프로젝트나 솔루션의 설정값들이 새로운 경로로 옮기면서 동기화가 안되어 생기는 문제인 줄 알았는데,코드를 계속 천천히 읽다보니 의문이 들게 되었습니다. public GameRoom? Room { get; set; }public override void OnConnected(EndPoint? endPoint) {Console.WriteLine($"OnConnected: {endPoint}");Program.Room.Push(() => Program.Room.Enter(this));}제가 이해한 바로는ClientSession의 Room은Listener에 의해서 ClientSession.OnConnected가 호출되며 Program.Room에게 Enter(this)를 요청하고,이후 Program.Room은 Flush()를 통해 특정할 수 없는 시점에 비로소 Enter를 호출하게 되며, ClientSession.Room이 자기 자신을 가리키도록 합니다. 그런데, 정말 운이 안 좋다면 Program.Room이 A번 ClientSession에 대한 Enter 작업이 미처 다 수행되기 전에DummyClient 측의 SendForEach로 인해 A번 ClientSession과 대응되는 ServerSession으로 이동 패킷을 보내고,최종적으로 A번 ClientSession의 Room이 null인 상태에서 C_MoveHandler를 실행 할 여지가 있는 것이 아닌가 생각하게 되었습니다. 혹시 제가 생각하고 있는 것이 맞는건지,아니면 단순하게 솔루션을 잘못 복사해와서 문제가 생긴건지궁금합니다..만약 그런 여지가 있다면 단순히 room이 아직 null인지 체크하고 이동 패킷을 무시하면 되는걸까요?
-
미해결따라하면서 배우는 고박사의 유니티 기초
제가 3d 멀미가 있어서 2D게임만 만들 생각인데요
색션2 3d강의를 들을 필요가 있나요? 답변부탁드립니다.
-
미해결[유니티 3D] 실전! 생존게임 만들기 - Advanced
인벤토리 끄고 퀵슬롯 아이템 드래그앤 드랍시 공격
GunController.cs의 Update()문에서 void Update() { if (isActiviate) { GunFireRateCalc(); if(!Inventory.inventoryActivated) { TryFire(); TryReload(); TryFineSight(); } } } 인벤토리를 끄면 공격을 하게끔 되어있습니다.하지만 마지막 최종 테스트 강의을 보면 강사님은 인벤토리를 끄고 우클릭으로 드래그앤 드랍을해도 공격을 안하는 모습이 보여집니다. 왜그런지 답변 부탁드립니다.
-
해결됨두고두고 써먹는 유니티 VR
select Entered에서는 Gun.Grab이 되는데 Select Exited에서 Gun.Release가 나오지 않음
스크립트는 다음과 같이 작성했습니다.마찬가지로 weaponstand에서도 select 부분만 안나오네요...XR interaction toolkit 버전은2.5.2입니다.
-
미해결따라하면서 배우는 고박사의 유니티 기초
게임오브젝트 삭제함수에서 질문이요
2:12 시간에서 3개의 프리팹에 c#스크립트를 올릴려 하는데[Can't add script component 'PositionAutoDestroyer' because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match.]라는 메세지가 뜨네요 c#이름이 틀렸나? 해서 확인도 해보고 저장도 여러번 해봤습니다.add component에서 PositionAutoDestroyer를 검색하려해도 나오지 않고요 답변부탁드립니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
Json 파싱 형식
제이슨을 파싱하는 과정중에서 int, class 형식으로 가져오고 있는데 string, class 형식으로도 가져오게 할 수 있나요?? [Serializable] public class ValueDataLoader : ILoader<int, ValueData> { public List<ValueData> datas = new List<ValueData>(); public Dictionary<int, ValueData> MakeDict() { Dictionary<int, ValueData> dict = new Dictionary<int, ValueData>(); foreach (ValueData Data in datas) dict.Add(Data.ID, Data); return dict; } }
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
SetInfo를 이용한 아이템 이름 변경
public override void Init() { Bind<GameObject>(typeof(GameObjects)); Get<GameObject>((int)GameObjects.ItemNameText).GetComponent<Text>().text = _name; Get<GameObject>((int)GameObjects.ItemIcon).BindEvent((PointerEventData) => { Debug.Log($"아이템 클릭! {_name}"); }); } public void SetInfo(string name) { _name = name; }UI_Inven_Item에 있는 내용인데UI_Inven에서 invenItem.SetInfo("집행검 어쩌구");를 하면 UI_Inven_Item의 _name만 바꿔줬을 뿐인데어떻게 Component의 값 까지 바뀌는거죠?제가 생각할 떄는 SetInfo안에Get<GameObject>((int)GameObjects.ItemNameText).GetComponent<Text>().text = _name;이 코드가 필요한거 같은데어떻게 ItemNameText가 업데이트가 되는지 모르겠습니다.
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
spine을 animator로 교체
안녕하세요 3주 차 코드로 공부하고 있는 중 spine 을 animator controller로 교체하려고 하는데요. Creature.cs 의public virtual void SetInfo(int templateID) { . . SkeletonAnim.skeletonDataAsset = Managers.Resource.Load<SkeletonDataAsset>(CreatureData.SkeletonDataID); SkeletonAnim.Initialize(true); // Register AnimEvent if (SkeletonAnim.AnimationState != null) { SkeletonAnim.AnimationState.Event -= OnAnimEventHandler; SkeletonAnim.AnimationState.Event += OnAnimEventHandler; }부분에서 SkeletonAnim.skeletonDataAsset = Managers.Resource.Load<SkeletonDataAsset>(CreatureData.SkeletonDataID); 는캐릭터 간 다른 애니메이션을 사용하기 위해 json에서 읽어온 animator 파일을 지정하는 걸로 이해하고Animator Controller로 교체했는데요.BaseObject.cs public Animator SkeletonAnim { get; private set; }Creature.cspublic virtual void SetInfo(int templateID) { . . SkeletonAnim.runtimeAnimatorController = Managers.Resource.Load<RuntimeAnimatorController>(CreatureData.SkeletonDataID); // Animator Controller로 교체 // Register AnimEvent if (SkeletonAnim.AnimationState != null) { SkeletonAnim.AnimationState.Event -= OnAnimEventHandler; SkeletonAnim.AnimationState.Event += OnAnimEventHandler; } SkeletonAnim.AnimationState.Event -= OnAnimEventHandler;SkeletonAnim.AnimationState.Event += OnAnimEventHandler;이 부분은 왜 사용하는지 어떻게 수정해야 되는지 모르겠습니다.
-
미해결따라하면서 배우는 고박사의 유니티 기초
Instantiate() 활용 예제에서 11:30의 예제 질문이요
public class ObjectSpawner : MonoBehaviour{ [SerializeField] private int objectSpawnCount = 30; // Start is called before the first frame update [SerializeField] private GameObject[] prefabArray; [SerializeField] private Transform[] spawnPointArray; private int currentObjectCount = 0; private float objectSpawnTime = 0.0f; void Start() { } // Update is called once per frame void Update() { if(currentObjectCount + 1 > objectSpawnCount) { return; } objectSpawnTime += Time.deltaTime; if(objectSpawnTime >= 0.5f) { int prefabIndex = Random.Range(0, prefabArray.Length); int spawnIndex = Random.Range(0, spawnPointArray.Length); Vector3 position = spawnPointArray[spawnIndex].position; GameObject clone = Instantiate(prefabArray[prefabIndex], position, Quaternion.identity); Vector3 moveDirection = (spawnIndex == 0 ? Vector3.right : Vector3.left); clone.GetComponent<Movement2D>().Setup(moveDirection); currentObjectCount++; objectSpawnTime = 0.0f; } }}를 연습해보았는데 37번째줄 clone.GetComponent<Movement2D>().Setup(moveDirection);의 Setup에 빨간줄이 그어지더니 오류목록에서['Movement2D'에는 'Setup'에 대한 정의가 포함되어 있지 않고, 'Movement2D' 형식의 첫 번째 인수를 허용하는 액세스 가능한 확장 메서드 'Setup'이(가) 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요.]라는 메세지가 나오네요 답변부탁드립니다.
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
어떡하죠?
Assets\Spine\Editor\spine-unity\Editor\Asset Types\SpineAtlasAssetInspector.cs(319,22): warning CS0618: 'TextureImporter.spritesheet' is obsolete: 'Support for accessing sprite meta data through spritesheet has been removed. Please use the UnityEditor.U2D.Sprites.ISpriteEditorDataProvider interface instead.' Assets\Spine\Editor\spine-unity\Editor\Asset Types\SpineAtlasAssetInspector.cs(375,4): warning CS0618: 'TextureImporter.spritesheet' is obsolete: 'Support for accessing sprite meta data through spritesheet has been removed. Please use the UnityEditor.U2D.Sprites.ISpriteEditorDataProvider interface instead.' Assets\Scripts\Manager\IAPManager.cs(9,27): error CS0535: 'IAPManager' does not implement interface member 'IStoreListener.OnInitializeFailed(InitializationFailureReason, string)' 이런 경고문이랑 에러가 뜨면서 이게 고쳐져야 플레이를 할 수 있다고 하네요 어떡하죠?;;;;;
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
unity 다운 시간
다운을 받고 유니티로 실행하려하니 안에서 파일도 나와있지 않고 그저 빈 화면만 나오니 혹시 시간이 어느 정도 걸려야 자료가 다운받아져서 실행이 가능할까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
hit.point
Wall을 새워두고(hit.point - _player.tranform.position).maginitude * 0.8f를 하게 되는데hit.porint는 카메라기준으로 Ray가 나갔을 때벽에 닿는 바로 그 순간인가요?그렇다면 벽이 만약 두꺼우면 0.8f을 잘못 설정하면 카메라가 벽안으로도 들어갈수 있나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
리슨서버(호스트) 질문입니다
안녕하세요, 루키스님.개인 프로젝트를 진행하는 중 리슨서버를 구현해보려고 하는데 몇 가지 궁금한 점이 있습니다.리슨서버를 구현하려면 서버 코드를 모두 클라이언트에 이식하고, 컴포넌트로 관리할 수 있도록 수정해야 하나요?만약 1의 가정이 맞다면, 1을 통해 구현된 서버에서 유니티엔진의 기능들을 사용할 수 있지 않을까 생각이 되는데, 만약 된다면 충돌과 관련된 부분을 처리하는데 활용해도 괜찮을까요?유니티 자체에서도 네트워크를 관리해주는 매니저를 제공하는 것으로 알고있는데, 강의처럼 따로 서버를 구현하는 이유는 역시 성능 때문일까요? 현재 생각 중인 방식이 어몽어스와 유사한데요.중앙 서버에서 방을 생성하는 유저(호스트)들의 ip와 방 정보를 가지고 단순히 방 목록을 관리하며 클라이언트들이 접속할 수 있는 역할만 해주고, 클라이언트가 방에 접속하는 순간부터 모든 처리는 호스트가 하게되는... 구조가 맞을까요? 최근 들어 질문을 자주하게 되는 것 같은데..항상 친절히 답변해주셔서 감사합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
[8:15] GetBytes, GetByteCount 문자열 파싱 질문입니다.
안녕하세요 강사님! GetBytes로 문자열을 파싱하는 과정에서 질문이 있습니다.위의 이미지를 보면 GetBytes 후 Length를 가져와도 8바이트가 나오는데 바이트를 먼저 가져온 후 Length를 가져오면 안 되는 것인가요? 길이를 파싱하는 부분을 제거하여 돌려 보았는데 결과는 잘 나오는 것 같았습니다.여러 번 강의를 돌려봤지만 '몇 바이트가 와야 조립이 되는지 확인하기 위해 두 단계로 나눈 것'이라고 들었습니다. 이 순서가 반대가 되면 조립 가능성 확인을 못하게 되는 것이 이해가 안 가서 질문 드립니다.감사합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
Tilemap_base에서 맵 크기를 불러올 때
제가 설정한 맵 모양이랑 메모장에 나오는거랑 다르게 좀 더 크게 잡히고 있는데 그 이유를 잘 모르겠습니다Tilemap_Base에 가장 끝부분에 상자를 넣어이런식으로 만든후 tools를 켠 다음 실행을 시키면이렇게 상자가 끝애 나오지만 캐릭터가 있는 앞 칸에서 움직이지 못하게 되는데 왜 그런걸까요
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
멘토링 신청 질문
이번에 운영하신다는 오마카세 언리얼5 강의는,기존에 온라인 강의로 오픈하신 언리얼5 강의 3개랑 무슨 차이 인가요?어떤 강의가 더 깊게 알려주는 지 궁금합니다.
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
바인드가 안돼요
안녕하세요 오랜만입니다.. 오늘도 어김없이 어디가 잘못된지 모르겠어서 여쭈어봅니다.제가 만들려는 게임이 단순해서 부분적으로 개미회사게임 코드를 참고해서 UIBase 비스무리한 역할을 하는 스크립트를 만들었습니다.빈 오브젝트에 아래와 같은 스크립트가 붙어있구요 빈 오브젝트의 자식들로 팝업 객체들이 있습니다. 그런데 모든 객체가 계속 바인딩에 실패합니다. 아무리봐도 이름도 똑같이 설정했습니다. 대체 뭐가 문제일까요. 스크립트는 메일로 전송하겠습니다 미리 감사합니다..ㅠㅠ 추가적으로 필요한 부분이 있으면 말해주세요 처음부터 너무 구조적으로 만들기가 너무 어려워서 드래그 좀 하며 하드코딩으로 어찌저찌 작동시켜놓고 깨끗하게 정리하고싶어서 바꿨다가 이도저도 못하고 봉변당하고있는데 파일을 복제해놓고 했어야했을까요..? 부탁드립니다 엉엉
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
AttackBuff.ClearEffect() 메서드 문의
버프류 스킬 AttackBuff.ClearEffect() 메서드 관련 궁금한 점이 있습니다. public override bool ClearEffect(EEffectClearType clearType) { if(base.ClearEffect(clearType) == true) RemoveModifier(Owner.Atk, this); return true; } 여기서 base.ClearFffect() 는ObjectManager.Despawn()을 호출하고, 이건 또ResourceManager.Destroy()를 호출함으로써AttackBuff가 붙어있는 EffectBase 프리팹을 날려버리면서 true를 반환하는걸로 이해하는데요,이 경우 AttackBuff 인스턴스가 날라가게 되는데 그 다음줄 RemoveModifier가 실행되고, 또 자기 자신을 인자로 넘겨줄 수가 있나요?RemoveModifier(Owner.Atk, this);
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
Unable to load dependent bundle from....
원래는 아무 문제 없이 다운로드 받고 로드도 됐었습니다..근데.. 첫 다운로드(aws s3 버킷) LoadAssetAsync로 로드하면 갑자기 이렇게 뜹니다..원래는 안이랫는데..아무 코드도 고치지 않았어요... 예제에 나온대로 그대로 했고 이거구요 json 파일 확인해보면이렇게 있고..(형광펜으로 칠한 부분) 앱을 껐다 키고 다시 실행하면 로딩 성공합니다.. 이유를 모르겠어요... 에디터 2021 lts -> 2022 lts로 업데이트 하고 어드레서블도 1.21 버전으로 업그레이드 했어요. 1.21 버전부터 DownloadDependenciesAsync가 바뀌었고 더 이상 에셋 번들을 메모리에 불러오지 않는 것으로 바뀌어서 LoadAssetAsync 하면 unable to load 오류가 뜨게 되었어요 해당 문제 글은 많지만 해결책이 없네요..어떻게 해야 할까요 해당 글 출처(https://forum.unity.com/threads/unable-to-load-dependent-bundle-from-location.1493702/)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
3D의 경우 맵 정보
안녕하세요! 좋은 강의 감사합니다!3D 게임의 경우도 마찬가지로 Map에 대한 정보를 서버에서 가지고 있어야 할 것 같다는 생각이 듭니다.그런데 2D의 같은 경우는 좌표를 통해서 저장할 수 있었지만 3D는 어떻게 Map의 정보를 저장하고 관리할 수 있을까요??구체적인 방법이 떠오르지 않아서 질문 글 납깁니다.