묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결절대강좌! 유니티6 - ECS/DOTS 프로그래밍 마스터클래스
플레이어를 왜 ECS로 만드는 건가요?
안녕하세요, 유니티로 데이터 대량 처리 때문에 강의를 수강하게 되었습니다. 플레이어는 대량 처리가 필요 없다고 생각하는데, ECS로 만드는 이유는 무엇인가요?
-
미해결유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
싱글턴패턴
Init 함수에서 m_Instance가 null이 아니면 왜 gameobject를 Destroy하나요? OnDestroy 함수 호출되면 m_Instance 을 null로 만드는데 그럼 문제가 되지않은 객체도 m_Instance가 null이니 사용못하는거 아닌가요?using UnityEngine; public class SingletonBehaviour<T> : MonoBehaviour where T : SingletonBehaviour<T> { //씬 전환 시 삭제할지 여부 protected bool m_IsDestroyOnLoad = false; //이 클래스의 스태틱 인스턴스 변수 protected static T m_Instance; public static T Instance { get { return m_Instance; } } private void Awake() { Init(); } protected virtual void Init() { if(m_Instance == null) { m_Instance = (T)this; if(!m_IsDestroyOnLoad) { DontDestroyOnLoad(this); } } else { Destroy(gameObject); } } //삭제 시 실행되는 함수 protected virtual void OnDestroy() { Dispose(); } //삭제 시 추가로 처리해 주어야할 작업을 여기서 처리 protected virtual void Dispose() { m_Instance = null; } }
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
코드 관련 질문
스크립트 내에 작성되는 C# / 유니티 문법은 어느 정도로 알아야 하나요? 머릿속으로만 이해하고 넘어가도 괜찮을까요? 예를 들면 본 강의에서 Vector3.MoveTowards() 함수가 어떻게 동작하는지를 괄호 안에 파라미터 각각에 대해 확인하면서 공부해도 괜찮을지 궁금합니다!
-
미해결[빡센 챌린지] 4주 만에 나만의 RPG 게임으로 인디 개발자 입문
섹션7 수업자료 업로드 부탁드립니다.
다시 강의 보면서 도전해보고 있는데요.자료 업로드가 안되어 있는 것 같습니다.확인부탁드립니다.
-
미해결[Unity6] 나만의 서바이벌 게임 만들기
Dictionary Key를 int에서 string으로 변경한 이유에 대한 문의
안녕하세요.강의 내용 중 Dictionary의 Key 타입이 기존 int에서 string으로 전반적으로 변경된 부분에 대해 궁금한 점이 있어 문의드립니다.일반적으로 int 타입에 비해 string 타입은 메모리 사용량이 더 크고, 해시 계산 비용 또한 상대적으로 높은 것으로 알고 있습니다. 따라서 Key를 string으로 변경할 경우 성능 및 메모리 측면에서 비효율이 발생할 가능성이 있다고 생각됩니다.그럼에도 불구하고 해당 변경이 이루어진 의도나 설계상의 이점(예: 가독성, 확장성, 데이터 관리 측면 등)이 무엇인지 궁금합니다. 실제 프로젝트 환경에서 이러한 선택이 가지는 장점에 대해 설명해주시면 많은 도움이 될 것 같습니다.감사합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
UI 기능 관련 질문이 있습니다!
먼저 이렇게 좋은 구조를 알려주셔서 너무 감사합니다!그동안 UI를 매번 직접 생성하고 인스펙터에서 일일이 관리해 왔는데, 코드로 이 작업을 자동화한다는 개념 자체가 신세계였습니다!강의를 들으며, 궁금한 점이 몇 가지 생겨 글을 남깁니다!1. ShowPopupUI / ClosePopupUI의 빈번한 호출 시 비용팝업의 경우 ShowPopupUI로 생성하고 ClosePopupUI로 파괴하는 구조인 것으로 이해했습니다.예를 들어 사용자가 일시 정지-설정창 이런 식으로 게임중에 기능을 수행할 때,팝업 내용이 무거울수록 매번 생성/파괴 비용이 커질 것 같은데, 이 정도 비용은 실제 플레이 중에는 크게 신경 쓰지 않아도 되는 수준인가요?2. 람다식의 이벤트 등록과 해제UI_Button의 Init 함수에서 BindEvent 호출 시 람다식으로 액션을 등록하는 것으로 보입니다.그런데 C#에서 람다로 이벤트를 등록하면, 매번 새로운 delegate 인스턴스를 생성하여 -=로 해제가 안 되는 것으로 알고 있습니다.매개변수로 람다를 넘기는 경우에도 같은 문제가 발생할 것 같아서 여쭤봅니다!
-
해결됨따라하면서 배우는 고박사의 유니티 기초
03-01 (16. CharacterController)
자료가 이상해요Gameworld가 핑크색이 됐어요제가 뭘 잘못 만졌나봐요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TLS 질문드립니다.
static ThreadLocal<string> tl = new(()=> { return "dd"; });이렇게 변수 선언을 영상과 같이 return을 받게 되는 형태로 만들어 졌을 시에 Thread에서Console.WriteLine(tl.Value); 이렇게 최초로 tl.Value를 출력해보면 중단점을 걸었을시에 영상에서 설명 해주신 것과 같이 null값이 들어가게 됩니다. 그런데 궁금한건 그렇다면 Console.WriteLine(tl.Value); 이것의 콘솔에서의 실행 결과는 Null이 떠야하는 것 아닌가요?
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
Task 구현 28:36 Equals 에서 잘 모르는 부분이 있습니다.
using UnityEngine; using System; [CreateAssetMenu(fileName = "Category_", menuName = "Girl/Category")] public class Category : ScriptableObject, IEquatable<Category> { [SerializeField] private string codeName; [SerializeField] private string nameKey; public string CodeName => codeName; public string NameKey => nameKey; #region Operator public bool Equals(Category other) { if (other == null) return false; if(ReferenceEquals(other, this)) return true; if(GetType() != other.GetType()) return false; return codeName == other.CodeName; } public override int GetHashCode() => (CodeName, NameKey).GetHashCode(); public override bool Equals(object obj) => base.Equals(obj); public static bool operator ==(Category left, string right) { if (left is null) return ReferenceEquals(right, null); return left.CodeName == right || left.nameKey == right; } public static bool operator !=(Category left, string right)=> !(left == right); #endregion } Category 또한 object라서 base 함수를 쓰면 우리가 만든 Equal이 사실상 안쓰이게 되는거 아닌지 궁금합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
SpinLock은 어찌보면 CPU 코어를 계속 점유하고 계속해서 끝났는지 확인하는거잖아요?그렇기에 커널로 내려가는 컨텍스트 스위칭이 일어나지 않거나 최소화 될거다라고 생각하는데요.근데 하나 궁금한건 결국 운영체제 내에서 스케줄링같이 코어에서 점유하고 있는 스레드를 강제적으로(?) 다른 스레드로 바꾸지 않나요? 바꾼다하면 결국 SpinLock도 컨텍스트 스위칭이 필수불가결한건가 싶어 질문드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
픽셀 좌표 스크린 좌표
Input.mousePosition 함수는 픽셀 좌표를 가져온다고 유니티 공식 문서에서도 적혀있는데, 검색해보니 픽셀 좌표는 왼쪽 위가 0,0인 좌표고, 스크린 좌표는 왼쪽 아래가 0,0인 좌표라고 나오는데 왜 Input.mousePosition함수로 가져온 값을 Debug.Log로 찍었을 때는 왼쪽 아래로 갈수록 0,0에 가깝게 나오나요? Input.mousePosition의 반환값이 픽셀 좌표인지, 스크린 좌표인지와 두 좌표가 어떤 차이점이 있는지 궁금합니다
-
해결됨[Unity6] 생각보다 쉬운 Unity VR 게임 개발
Locomotion랑 Turn 이 꼭 부모 자식 관계일 필요가 있나요?
Locomotion, Provider파트 부분에 대해서 질문이 있습니다.그냥 이동과 관련된 것을 모아두고 싶은 관점에서 Locomotion 밑에다가 둔 것인가요?
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
LobbyUIController의 백키가 사라졌는데 왜그런건가요?
갑자기 빽키가 안되서 코드를 봤더니업적부터인지 언제부터인지 자료를 받은 코드에서 보니코드가 사라졌는데 왜 그런가요? 없어도 되야하는건가요? private void Update() { HandleInput(); } private void HandleInput() { if (Input.GetKeyUp(KeyCode.Escape)) { AudioManager.Instance.PlaySFX(SFX.ui_button_click); var frontUI = UIManager.Instance.GetCurrentFrontUI(); if (frontUI) { frontUI.CloseUI(); } else { var uiData = new ConfirmUIData(); uiData.ConfirmType = ConfirmType.OK_CANCEL; uiData.TitleTxt = "Quit"; uiData.DescTxt = "Do you want to quit game?"; uiData.OKBtnTxt = "Quit"; uiData.CancelBtnTxt = "Cancel"; uiData.OnClickOKBtn = () => { Application.Quit(); }; UIManager.Instance.OpenUI<ConfirmUI>(uiData); } } }
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
무조건 타이틀 씬부터 시작해야하나요?
게임을 테스트 및 개발할때마다 순차적으로 타이틀씬에서 시작하면로딩도 기다려야되고 항상 씬도 계속 바꿔야되는 무제가 있는데로비씬이나, 인게임 씬부터 시작하면 UIManager를 찾을 수 없다고 나오기도하고다른에러들도 나오는데 이 부분에 대해서는 어떻게 처리하나요?아니면 강사님이 올려주신 프레임워크는 플레이 하라면 타이틀 씬부터 하게만 설계가 되어있나요?
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
BaseUI, UIManager
BaseUI, UIManager에 처리에 대한 구분이제가 명확하게 이해가 잘안되고 헷갈려 질문드립니다. 1. BaseUI에서 처리하는 함수 및 기능에 대한 기준이 무엇인가? 2.UIManager에서 처리하는 함수 및 기능에 대한 기준이 무엇인가? OpenUI를 할때는 SetParent를 BaeUI안의 Init함수에서 하고 CloseUI를 할때는SetParent UIManager에서 하는데 어떤 기준이나 지향점으로 하신건가 궁금합니다.CloseUI에서도 부모의 설정을 매니저에서 해줬으니 OpenUI도 매니저에서 설정해주면통일성이 있지 않을까? 그런데 강사님은 어떤기준으로 하셨을까 궁금합니다.var siblingIndex = UICanvasTrs.childCount; ui.Init(UICanvasTrs); ui.transform.SetParent(UICanvasTrs); // 이런식? ui.transform.SetSiblingIndex(siblingIndex); ui.gameObject.SetActive(true); ui.SetInfo(uiData); ui.ShowUI(); 마지막으로 코드가 이해가 잘 안되는게BaseUI에서의 CloseUI함수에서는 UIManager.Instance.CloseUI(this);호출하는데 BaseUI에서의 ShowUI는 매지저 호출에 처리가 없어서 이것도한 2개가 달라 많이 헷갈리네요. ㅠ코드가 작성되는 방식은 여러가지겠지만강사님의 코드의 작성의 의도와 목적을 잘 이해하고 싶어서 질문드립니다. ~
-
미해결【2025年版】Unity×C#入門講座|2Dタワーディフェンスゲーム開発マスター|クリック&バトルシステムの作り方
프로젝트 완성본 문의
안녕하세요프로젝트 완성본 파일은 받는 곳이 어디있나요?소스코드만 올라와 있길래 문의드립니다.감사합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Unity Span
예전에는 유니티에서 Span 못쓰는데요즘은 쓸 수 있더라고요그러면 실무에서도 유니티 Span 쓰나요?
-
미해결[유니티 실전 프로젝트] Burger Please 모작
씬 배치 구조에서 Addressables를 어떻게 적용해야 하는지 궁금합니다.
안녕하세요, Rookiss님.기존 강의에서는 씬을 비우고 Addressables 기반으로 모든 리소스를 동적 생성하는 구조였는데,그런데 이번 강의에서는 씬에 오브젝트를 배치해서 사용하는 방식으로 진행되고 있어서,만약 이러한 씬 배치형 프로젝트에 Addressables를 적용하고 싶다면 어떻게 적용하는 것이 적절한지 궁금합니다.예를 들어,- 씬에 배치된 오브젝트도 Addressables로 관리하는 것이 맞는지- 아니면 프리팹만 Addressables로 관리하고 씬은 기존 방식(드래그&드랍)대로 사용하는 것이 좋은지- 실무에서는 씬 기반 구조와 Addressables를 어떤 기준으로 혼합해서 사용하는지이 부분에 대한 방향성을 알고 싶습니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
39. Main화면 추가 UI 에서 자료는 어디서 받나요??
39. Main화면 추가 UI 에서 자료는 어디서 받나요??
-
미해결절대강좌! 유니티6 - ECS/DOTS 프로그래밍 마스터클래스
Scene 전환에서
씬이 변경되어도 ECS 월드에서 생성된 Entity는 사라지지 않고 메모리에 남아있다고 하셨는데요. 이 부분은 버그라고 봐도 될까요? 지금은 수정된 내용인 것인지 또는 유니티에서 6.8 버전부터 한다는 Entity For all 이 되면 자동으로 해결되는 문제인지 궁금합니다.