묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[Unity] 멀티플레이 게임 필수 기능 구현 - 서버 & 데이터 관리까지!
채팅하기 챕터 오류관련 문의
안녕하세요, 강의 보면서 따라서 진행하고 있는데 발생하는 오류들이 있어서 문의드립니다.1. 유니티 에디터 InputField 관련 > 유니티 에디터에서 실행했을 때 채팅 InputFiled에서 텍스트 입력이 안되는 상황 입니다. Console창에는 Info,Warning(PlayerController.gravity 관련) 메시지만 있습니다. 빌드해서 실행하면 인풋필드가 동작합니다. 2. 말풍선 관련 > 빌드 후, 클라이언트 2개로 서로 채팅을 하고 채팅창에 대화내용이 쌓이는 부분까지 진행하였습니다. 그리고 말풍선 관련 코드 작성해서 테스트를 진행했더니 채팅창에 내용이 쌓이지 않고 빈 말풍선만 생성되었습니다.. // SpeechBubble.cs // setText(string message){} SpeechText.text = message; // 위 부분에서 NullReferenceException 이 발생하는걸로 보입니다. 빌드하고나서 테스트를 진행하다보니 오류를 잡기가 어려운데 팁 같은게 있을까요? 혹시 챕터별 또는 완성본 코드를 확인할 수 있는 곳이 있을까요?
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
UI 자동화 관련 문의입니다.
UI_TitleScene.csStartImage 에 클릭 기능 추가에 관한 문의입니다. GetObject((int)GameObjects.StartImage).BindEvent((evt) =>{ Debug.Log("ChageScene"); Managers.Scene.LoadScene(EScene.GameScene);},Define.EUIEvent.Click); 에서StartImage 의 경우 enum GameObjects 소속에 타입도 GameObject 라서 Extension에 의해서 BindEvent를 바로 사용할 수 있는 것으로 보이는데, 만약 Image라 하더라도 Click등의 액션을 이용하려면 무조건 GameObject로 설정해야 하는 것인가요? 아님 extension에서 뭔가를 설정하면 Image(Object)도 GameObject 같이 사용가능한가요? 이것 저것 해봐도 붉은색 투성이라 문의 드립니다.
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
보충강의를 들었는데도 불구하고 Confirm UI 창이 표시가 되지 않습니다.
250702 16:36 해결 완료문제의 원인은 BaseUI에서 UI를 초기화 시켜줄때 localScale 값이 모두 0이었기 때문이었습니다.로컬 스케일이 모두 0인데, 새로 생성하는 UI가 보일리가 없겠죠. 강의 영상 설렁설렁 보다가 VS 인텔리전스 자동완성 믿고 검토안한 제 실수였습니다. 이런 제가 부끄러워지네요.. 앞으로는 더 주의깊게 코드를 작성해야 겠습니다. 문제가 해결되었으니 파트2까지 쭉 달려보겠습니다. 매우 훌륭한 강의 제공해주신 BurningCarrot 지식공유자님 정말 감사드립니다. < 아래 질문 내용은 해결되었습니다.>안녕하세요. 강의 잘 보고 있습니다.이 강의에서 ConfirmUI 테스트할때 카메라에 표시되지 않는 문제가 있습니다.이 문제에 대해 찾아보니 보충강의도 있고 다른 수강생분들 질문도 있어서차근차근 따라해보았습니다.그러나, 저의 경우에는 문제가 해결되지 않았습니다.스크립트 동일하고, UIManager의 UICamera와 Title의 UICamera 모두 동일한 세팅을 해두었는데도 불구하고문제가 해결되지 않았습니다. >>BaseUI의 초기화 부분에서 제가 실수했습니다.Main Camera에서 수동으로 스택을 추가해보아도 ConfirmUI 는 보이지 않았습니다.클론으로 인스턴트로 만들었는데도요. 어떻게 하면 좋을까요?유튜브에서 카메라 스태킹에 대해 찾아보아도 그냥 베이스위에 오버레이 쌓으면 된다라는 일반적인 얘기일 뿐이지저의 경우에는 아무런 대책이 되지 못했습니다. ㅠㅠ에디터 버전은 Unity 6.0 (6000.0.51f1) 2D URP 코어 사용했습니다. 0641 수정 > 테스트 씬에서 동일한 원리 적용하면 이 씬에서는 잘 보입니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
네이밍 컨벤션 질문
어떤건 Range 어떤건 range 로 쓰시고 어떤건 전부대문자쓰시고 어떤건 또 카멜쓰시고 기준이 궁금해용~🤔 스크립트명도 어떤건 Base_Canvas, COIN_PARENT, Player 등등 다 다른데 기준도 궁금합니다~🤔
-
미해결[유니티 실전 프로젝트] Burger Please 모작
궁금하게 있습니다.
해당 강의의 리소스를 사용하여 게임을 직접 제작하고 출시 해도 될까요?※ ex) 애니메이션
-
미해결[유니티 실전 프로젝트] Burger Please 모작
손님AI에서 0:13 초 나오는 Q로 해도 되긴하는데
손님AI에서 0:13 초 나오는 Q로 해도 되긴하는데라고하시는데 여기서 말한 Q가 뭘까요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
ResourceManager에서 Multiple Sprite를 로드하는 방법
안녕하십니까? ResourceManager.cs 코드의 어드레서블 에셋 로드 부분에서 스프라이트 로드 관련 질문입니다. 현재 코드는 single sprite에 대한 방식만 제공하고 있는데요. 혹시 Multiple Sprite를 로드하는 방법에 대해 따로 추가로 연구하신 방법이 있는지 궁금합니다. 검색을 해보니 인프런 AI답변으로 Single 스프라이트로 로드 하는걸 추천한다고 했습니다.개인적인 프로젝트라면 개별 스프라이트로 분리해서 추가하는 것도 가능한데, 실제 현업에서는 Multiple Sprite로 작업이 많을 거 같기도 하고 궁금한 부분이라 질문드립니다. 감사합니다.
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
Dice Prefab
이미 질문에 있는 것처럼 Dice prefab이 없는데 저도 똑같이 메일로 받아야하나요?
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
State Pattern #6 (Dead) 챕터의 Spawner.m_Players.Add(this); 문의드립니다.
안녕하세요?State Pattern #6 (Dead) 챕터의 (24분:53초) Player.cs 파일입니다.Spawner.m_Players.Add(this); 문의드립니다. 간략하게 코드를 정리해봤는데요. protected override void Start() {Spawner.m_Players.Add(this);}private void OnReady() {Spawner.m_Players.Add(this);}private void OnDead() {Spawner.m_Players.Add(this);}private void OnDungeon(int value) {Spawner.m_Players.Add(this); }public void DeadEvent() {Spawner.m_Players.Remove(this);} 이상황에서 빌드후 메인씬에 진입하면 예상으로 Start, OnReady 가 호출되고나서 m_Players 에 주 캐릭터가 배열에 2번 들어 갈것같은데요. 죽었을때 제거되고 m_Players에 추가되는것은 이해되나적스폰이 되기전에 m_Players의 배열길이가 2개가되지않을까 싶어서요. HashSet 으로 처리하면 해결되지않을까싶기도하고..영상을 더봐야 이해되는부분인지.. 이해가 잘안되서 그러니 이해부탁드립니다~
-
미해결[유니티 실전 프로젝트] Burger Please 모작
NullReferenceException 에러
안녕하세요. 튜토리얼과 세이브 파일 강의 수강하고 코드를 그대로 작성했는데 해당 널 에러가 발생합니다. NullReferenceException: Object reference not set to an instance of an objectGameManager+<CoInitialize>d__12.MoveNext () (at Assets/@Scripts/Manager/GameManager.cs:46)UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <28bc61a429714536ab08181feb5cfb97>:0)UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&) public IEnumerator CoInitialize() { yield return new WaitForEndOfFrame(); Player = FindAnyObjectByType<PlayerController>(); Restaurant = FindAnyObjectByType<Restaurant>(); int index = Restaurant.StageNum; Restaurant.SetInfo(SaveData.Restaurants[index]); //26번째 줄 StartCoroutine(CoSaveData()); }널 체크를 해봤는데도 Player와 Restaurant 모두 널이 아닙니다.그래서 Restaurant의 SetInfo() 함수 부분을 봤더니 Restaurant의Restaurant Systems와 Props들이 전부 비어있습니다.근데 코드 상으로 널 체크해서 디버그를 출력하도록 해도 디버그가 찍히지 않습니다. 필요한 Props들 전부 UnlockableBase를 상속하였고 RestaurantSystemes도 SystemBase 상속하고 자식 오브젝트에 위치하고 있고 코드도 전부 동일합니다. SetInfo 함수의 호출 순서의 문제 일까요? 어디의 문제인지 어딜 수정해야하는지 모르겠습니다 ㅠㅠ
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
혹시 섹션별 스크립트 소스 있으신지요?
안녕하세요? 선생님구매해놓고 인제서야 틈틈히 보고있습니다.다름이 아니고 소스분석을 하면서 강좌를 보고싶은데 (완성형 소스는 질문 게시판 답변에 링크를 통해서 받았습니다.) 완성형 소스로는 섹션별 영상을 보면서 분석하기 어렵겠더라고요. 유데미를 보면 섹션별로 소스가 제공되는경우가 있는데있으시다면 공유 해주실수있으실까요?(일일이 타이핑하면서 따라가는것보다 영상에 맞는 소스를 같이 보면서 진행해야 직관적으로이해하기가 수월하고 편하더라고요.) 만약 없다면 제공할 계획은 있으신지 궁금합니다. 수고하세요!
-
해결됨새싹부터 시작하는 Unity 게임 개발
Dictionary 관련 메소드 사용 질문 드립니다.
에러가 발생하는 경우 public Dictionary<string, int> c = new Dictionary<string, int>(); c.Add("A", 5); 에러가 발생하지 않는 경우 public Dictionary<string, int> c = new Dictionary<string, int>(); private void Start() { c.Add("A", 5); }왜 Start() 메서드 안에 있으면 에러가 발생하지 않고 dictionary 선언 후 바로 Add를 하면 에러가 발생하는지 궁금합니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
스킬 관련 질문입니다
불덩이를 날리고 불덩이에 맞으면 데미지를 주고 화상이 1스택 쌓는 스킬이 있는데만약 다른 스킬을 획득하면 불덩이 스킬로 맞추어 데미지를 주었을 때폭발이 일어나 불덩이와 다른 데미지를 추가로 주고 화상을 2스택 쌓는 스킬을 붙이고 싶은데스킬에 스킬로 스킬에 달린 카테고리별로 이펙트를 추가하는 구현해 내었는데스킬에 스킬로 스킬을 추가하는 방법을 알고 싶습니다
-
해결됨새싹부터 시작하는 Unity 게임 개발
8:56초 b.Remove(3) 부분 설명에 대해 질문드립니다.
b.Remove(3); // b리스트의 세 번째 값을 제거안녕하세요! 위처럼 설명해주셨는데, 세 번째 값 제거는 세 번째 인덱스인덱스처럼 보여져값이 3인 것을 제거하는 것으로 설명해주시는 것이 좀 더 명확한 설명이지 않나 싶어서 글 남깁니다.직접 코드를 b.Remove(300);을 해보니 값이 300인 요소가 지워졌습니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
Firebase 웹에서 값 변경 후
웹에서 값을 변경 후 ReadData를 하면 변경된 값이 반영이 안되고 0으로 나오는데 왜그럴까요?코드 변경없이 가끔가다가는 반영된 값이 나옵니다..
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
카탈로그 다운로드 주소를 런타임에서 변경할 수 있을까요?
여러가지 이슈를 대비해 런타임중 서버로 부터 카탈로그 다운로드 주소를 받아와해당주소에서 카탈로그를 다운로드해서 업데이트하고 에셋을 로드하는 방식을 사용하려고해요 런타임중 리모트 카탈로그 주소를 변경하는 방법이 있다면알려주시면 감사하겠습니다
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
Material 파일이 깨지는거 같아요
쉐이더 ui default로 하면 정상적으로 보이는데 기본으로 하면 분홍색으로만 나옵니다
-
미해결[유니티 실전 프로젝트] Burger Please 모작
10강 애니메이션 강의에서 enum EState부분 질문있습니다.
Define에서 enum EState를 정의하셨는데State앞에 E를 붙인 특별한 이유가 있나요?그리고 PlayerController에서 EState 변수 선언을 했는데 Define.Estate라고 안하고 바로 EState 라고 하셨는데 이게 어떻게 가능한건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SendBuffer 클래스를 만드는 이유
매번 패킷을 보낼 때마다 byte 배열을 할당해서 그 참조를 Session의 Send 함수로 전달하면 굳이 SendBuffer로 값을 한번 더 복사하는 과정 없이도 동작할 것 같습니다.그런데도 SendBuffer라는 클래스를 만들어서 관리하는 이유는 잦은 배열 할당으로 인한 Memory Fragmentation를 최소화하기 위함인가요?
-
해결됨책 3권을 영상으로 만든 Unity 게임 개발
섹션5-11
유저데이터로드와 유저레지스터를 이렇게 수정했는데 상관없나요?수업에 나온 그대로 코드를 입력했는데 유닛 123도 같이 비활성화되서요ㅠㅠ일단은 123활성화 45비활성화는 되는데 코드가 너무 달라진 것 같아서 질문드립니다.using UnityEngine; using UnityEngine.UI; public class UserDataLoad : MonoBehaviour { [SerializeField] Text UserNickNameText; [SerializeField] Button[] CharBtns; int[] CharNum; void Start() { CharNum = new int[5]; // 유닛 데이터 불러오기 (Unit1~Unit3 기본값 1, Unit4~Unit5 기본값 0) for (int i = 0; i < 5; i++) { CharNum[i] = PlayerPrefs.GetInt("Unit" + (i + 1), (i < 3 ? 1 : 0)); // Unit1~Unit3 기본값 1, Unit4~Unit5 기본값 0 } // 버튼 활성화 상태 설정 UpdateButtonStates(); } void Update() { // 닉네임 업데이트 UserNickNameText.text = PlayerPrefs.GetString("UserNickName"); } void UpdateButtonStates() { for (int i = 0; i < 5; i++) { CharBtns[i].interactable = (CharNum[i] == 1); } } } using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class UserRegister : MonoBehaviour { [SerializeField] InputField NickNameInput; string NickName; public void OnClickRegister() { NickName = NickNameInput.text; // 사용자 정보 저장 PlayerPrefs.SetString("UserNickName", NickName); PlayerPrefs.SetInt("Coin", 1000); PlayerPrefs.SetInt("Level", 1); PlayerPrefs.SetInt("WinCount", 0); // 유닛 활성화 상태 저장 PlayerPrefs.SetInt("Unit1", 1); PlayerPrefs.SetInt("Unit2", 1); PlayerPrefs.SetInt("Unit3", 1); PlayerPrefs.SetInt("Unit4", 0); PlayerPrefs.SetInt("Unit5", 0); PlayerPrefs.Save(); // 다음 씬으로 이동 SceneManager.LoadScene("User Scene"); } }