묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결따라하면서 배우는 고박사의 유니티 기초
게임오브젝트 삭제함수에서 질문이요
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를 검색하려해도 나오지 않고요 답변부탁드립니다.
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
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가 업데이트가 되는지 모르겠습니다.
-
해결됨[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
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를 켠 다음 실행을 시키면이렇게 상자가 끝애 나오지만 캐릭터가 있는 앞 칸에서 움직이지 못하게 되는데 왜 그런걸까요
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
멘토링 신청 질문
이번에 운영하신다는 오마카세 언리얼5 강의는,기존에 온라인 강의로 오픈하신 언리얼5 강의 3개랑 무슨 차이 인가요?어떤 강의가 더 깊게 알려주는 지 궁금합니다.
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
바인드가 안돼요
안녕하세요 오랜만입니다.. 오늘도 어김없이 어디가 잘못된지 모르겠어서 여쭈어봅니다.제가 만들려는 게임이 단순해서 부분적으로 개미회사게임 코드를 참고해서 UIBase 비스무리한 역할을 하는 스크립트를 만들었습니다.빈 오브젝트에 아래와 같은 스크립트가 붙어있구요 빈 오브젝트의 자식들로 팝업 객체들이 있습니다. 그런데 모든 객체가 계속 바인딩에 실패합니다. 아무리봐도 이름도 똑같이 설정했습니다. 대체 뭐가 문제일까요. 스크립트는 메일로 전송하겠습니다 미리 감사합니다..ㅠㅠ 추가적으로 필요한 부분이 있으면 말해주세요 처음부터 너무 구조적으로 만들기가 너무 어려워서 드래그 좀 하며 하드코딩으로 어찌저찌 작동시켜놓고 깨끗하게 정리하고싶어서 바꿨다가 이도저도 못하고 봉변당하고있는데 파일을 복제해놓고 했어야했을까요..? 부탁드립니다 엉엉
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
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의 정보를 저장하고 관리할 수 있을까요??구체적인 방법이 떠오르지 않아서 질문 글 납깁니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요! UDP 관련 질문입니다!
안녕하세요, 강사님!프로젝트를 진행하던 중 UDP 통신이 필요할지 고려해야 되는 부분이 있다고 생각되어 질문해봅니다 ㅎ..강의에서 사용된 코드에서 Listener와 Connector부분에서 매개변수로 넘겨지는 ProtocolType부분을 Tcp에서 Udp로 변경하면 UDP 통신이 수행되는 건가요??
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
apk 빌드하면 먹통되요
핸드폰에서 한번 해볼까 하고 안드로이드 apk 빌드해서 LDplayer 나 핸드폰 s22 울트라 정도에서 해보려했는데 안되네요 혹시 다른 버전은 다 되고 있나요?일단 터치 안되서 모바일 터치로 변경 했구요그러니 잘되네요 Game Sceen으로 넘어가는 부분도물론 찾아 봐야 겠지만 어떤 문제인지 폰에서는넘어가지지 않구요. 다른분들은 다 잘 되시나요?시뮬레이터에서는 아무 이상없이 잘됩니다.핸드폰 및 LDPlayer 가면 그러네요...Window 빌드 해서 해보니 안되네요...시뮬레이터 빼고 다안될듯 혹시 알아내신분있으면 공유 부탁드려요~~애러가 상당히 많이 나는데...뭐가 문제지 흠.. 강의 소스 그대로 사용했어요
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
캐싱을 할때 캐싱 진행상황을 제대로 표시하고싶어요
안녕하세요. 제가 어드레서블을 사용해서 다운을 받고 생성하는거까지 해봤는데요.여기서 몇가지 궁금한게 생겨서요.제가 포톤 pun2를 사용하고있어서 에셋을 바로 PhotonNetwork.Instantiate를 사용할수가 없는 상황이더라구요..그래서 찾아보다가 포톤에서 프리펩풀이라는게있어서 수동으로 생성을 할수있다고 하더라구요DefaultPool defaultPool = PhotonNetwork.PrefabPool as DefaultPool;Task<GameObject> task = character.LoadAssetAsync<GameObject>().Task; // 불러옵니다.await task; //대기.defaultPool.ResourceCache.Add("player01", task.Result); // 넣기_player = PhotonNetwork.Instantiate("player01", Vector3.zero, Quaternion.identity);그래서 이런식으로 프리펩풀에 넣어놓고 불러오는 방식을 사용하게됐습니다.그리고 불러와지는걸 확인을 했죠! 그런데 여기서 문제가 발생하더라구요.. 안드로이드로 스위칭을 한상태라서그런지쉐이더라 에디터상에서는 깨지는문제가 발생하더라구요그래서 playmode script를 simulategroup을하게되면 에디터상에서 정상적으로 보이기는 하는데.. 그전에는 쉐이더가 안불러와져서 그런지 핑크색이긴하지만 바로바로 불러와졌는데씬을 불러오니까 캐릭터가 생성되기까지 시간이 2~3초정도 걸리더라구요그래서 무슨문제일까 찾아보다가 씬에 미리 캐싱을 해두고 써야한다는말이 있어서 public IEnumerator LoadMultipleAssetAsync(List<string> AssetNames, string scene){foreach (string asset in AssetNames){// Addressables.DownloadDependenciesAsync를 사용하여 씬 캐싱AsyncOperationHandle handle = Addressables.DownloadDependenciesAsync(asset);// 캐싱 완료될 때까지 대기while (!handle.IsDone){Debug.Log(handle.PercentComplete); yield return null;}// 씬 로드SceneManager.LoadScene(scene);}// 씬 로드 완료 후 처리}이렇게 진행상황을 표시하는걸 만들고StartCoroutine(LoadMultipleAssetAsync(assets, "Tutorial"));이렇게 씬을 불러오게 만들었는데여기서 문제가 발생합니다. player01을 불러올때 0.8부터 불러온다는 문제가 생기더라구요..그리고 불러오고 나서도 씬이 자연스럽게 나오는게 아니라 뭔가 부자연스럽게 한..0.2~3초정도 눈에 보일정도로 딜레이가생기면서 생성되더라구요.. 제가 여기서 궁금한건 0.8부터 불러지는거랑 딜레이가 생기는부분이 궁금한건데요.. 어떤 문제가 있는걸까요?
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
구현에 수학이 필요한 경우
실무에서도 개발자들이 전부 수학을 잘하진 않을텐데,구현에 수학이 필요한 경우 어떻게 구현하나요?지금까찌 수학 식이 들어간 코드가 꽤 나왔었는데구조나 설계?가 중요하지 그 부분은 별로 중요하지 않다고 하셨는데, 롤 케릭터 스킬들을 어떻게 구현할 지 생각해보라고 해셔서생각하다가 멀티플레이 기준으로 구현한다고 했을 때 다이애나,카밀,아트록스 등등 수학적으로 구현?해야될 것 같은 스킬들이 꽤 많은 것 같은데 게임 개발자들은 수학도 다 잘하는 건지 궁금하네요,,,