묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
GetComponentInChildren<T>() 메소드 오류
UI 자동화 #1 강의 중 FIndChild 유틸함수를 만드는 과정에서 SC1579 오류가 발생합니다. "T에는 'GetEnumerator'의 공개 인스턴스 또는 확장 정의가 없다"라고 하면서 실행이 되지 않는데 이 부분이 이해가 되지 않아 질문글을 작성하게 되었습니다..
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
타 장르의 게임을 개발하는데 있어서도 도움이 될수있는 강의인지요?
저는 앞으로 마블스냅 같은 게임을 1인개발로 만들어 출시해서 운영해보고 싶습니다.그 목표를 이루는데에 있어서, 지금 이 강의가 도움이 될수있을까요?게임 장르가 다르면 사용되는 기술이나 방법들이 많이 달라질수도 있는건가요?이 강의를 들으면 오직 방치형, 리니지라이크 같은 종류의 게임들만을 만드는데만 도움이 되고타 장르의 게임을 개발하는데는 별로 도움이 되지않는것인지 궁금합니다. 알려주세요.
-
해결됨두고두고 써먹는 유니티 VR
데모 실행- collider 연결 문의드립니다.
https://www.inflearn.com/questions/857162/gun-grab%EA%B4%80%EB%A0%A8-%EB%AC%B8%EC%9D%98%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4#256807 위 링크따라서 해보려고 했는데 xr interactable snap volume 이 어디에 있는지 어떤 탭으로 어디에 들어가서 수동으로 연결해야하는지 모르겠습니다. gun 이랑 bomb, grab 제일 중요한 방향키가 안먹는데 거기에도 collide를 연결하라시는 건지 어떻게 해야하는건지 모르겠습니다. 본격적으로 자세히 수강하기전에 게임을 한번 실행해보고 vr 기기와 연결해 봐서 플레이 해보고 싶어서 그렀습니다. 한번만 이해해주시고 첨부해주신 링크 조작키 작동하게 수정하는 방법 좀 초심자 눈높이에서 순서대로 알려주실 수 있을까요? 부탁드리겠습니다.
-
해결됨두고두고 써먹는 유니티 VR
데모 게임 실행 방법 (시뮬레이터 / vr 기기) 문의 드립니다!
complete tutorial 파일을 unity hub에서 열어서 Scene 열어서 tutorial 파일로 들어가서 게임 화면은 떴는데 simulator key 단축키나 마우스가 안먹어서 슈팅이 되지 않고 게임이 시작되지 않는데 어떻게 해야 게임이 실행되는지 알려주실 수 있을까요? 다른 파일 경로로 들어가야 하나요 아님 어떤 셋업을 해야 게임이 실행되는건가요? 지금 강의에서 완성해주신 게임을 한번 시뮬레이터와 vr 기기로 플레이해보는게 목적이어서요. 시뮬레이터랑 vr 기기(오큘러스 퀘스트 2)에서 바로 게임을 실행해볼 수 있는 방법, 메뉴얼이 있으면 좀 자세히 공유해주시면 감사드리겠습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
질문있습니다@!!
안녕하세요 강의를 듣다 enum으로 하나씩 넣는게 제 개인적인 생각으로는 귀찮다라는 생각을 받았어요 그래서 이걸 오브젝트의 이름만 받아서 사용할 수 있게 해보자 해서 짜봤는데 강의에서 소개해주신 enum으로 관리하는 것과 제 코드와 비교해서 enum으로 관리할 때의 장점이 있을까요? 그리고 아래 코드에서 개선할만한 부분도 있다면 알려주시면 감사하겠습니다private Dictionary<Type, UnityEngine.Object[]> _componentDictionary = new Dictionary<Type, UnityEngine.Object[]>(); private void Start() { Bind<Button>(); Bind<TextMeshProUGUI>(); Bind<Image>(); Bind<GameObject>(); Debug.Log(Get<GameObject>("ddd").transform.position.x); } void Bind<T>() where T : UnityEngine.Object { //필터 해줄 타입 추가 if (typeof(T) != typeof(Button) && typeof(T) != typeof(TextMeshProUGUI) && typeof(T) != typeof(Image) && typeof(T) != typeof(GameObject)) return; if (typeof(T) == typeof(GameObject)) { Transform[] transforms = Util.FindChild<Transform>(transform, true); GameObject[] gameObjects = new GameObject[transforms.Length]; for (int i = 0; i < transforms.Length; i++) { gameObjects[i] = transforms[i].gameObject; } _componentDictionary.Add(typeof(GameObject), gameObjects); return; } T[] objects = Util.FindChild<T>(transform, true); _componentDictionary.Add(typeof(T), objects); } T Get<T>(string name) where T : UnityEngine.Object { UnityEngine.Object[] objects = null; if (_componentDictionary.TryGetValue(typeof(T), out objects) == false) return null; foreach (UnityEngine.Object obj in objects) { if (obj.name == name) return obj as T; } return null; } public static T[] FindChild<T>(UnityEngine.Transform transform, bool recursive = false) where T : UnityEngine.Object { if (transform == null) return null; if (recursive == false) { T[] dd = new T[transform.childCount]; for (int i = 0; i < transform.childCount; i++) { dd[i] = transform.GetChild(i).GetComponent<T>(); } return dd; } else { return transform.GetComponentsInChildren<T>(); } }
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
FindChild 사용시 원치 않은 것에 대한 컴포넌트 반환
안녕하세요 Util에서 FindChild를 정의하는 부분의 recursive가 true일 때 최상위 계층 gameobject 안에이름과 컴포넌트 타입은 같지만 계층이 다른? gameobject가 있다면ex)최상위 부모ㄴTest(name) - Text(컴포넌트) (1)ㄴTest2ㄴㄴTest(name) - Text(컴포넌트) (2)내가 찾고자 하는 오브젝트의 컴포넌트는 예제에서의 2번인데GetComponentsInChilderen에서 1번이 반환 될 수 있지 않나요?만약 그렇다면 해당 구조를 사용할때의 제약조건이같은 이름이면서 같은 컴포넌트를 갖는 오브젝트는 사용할 수 없다 정도일까요?(물론 같은이름이면서 같은 컴포넌트를 갖어야만하는 경우는 없을테지만요)
-
해결됨두고두고 써먹는 유니티 VR
게임 프로젝트 파일 실행방법 문의드립니다!
chapter 4에 주신 게임 프로젝트 파일을 어떻게 unity web editor에 붙여넣거나 실행해야 완성된 게임프로젝트를 실행시킬 수 있는건가요? 제 프로젝트 파일의 assets packages projects setting user setting에 각각 붙여넣어야 하나요? 어떤 파일들을 어떻게 어디에 붙여넣어야 바로 시뮬레이터로 완성된 게임을 실행하고 볼 수 있는지 알려주시면 감사하겠습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
VS 툴팁 이전/다음 단축키 질문드립니다.
루키스님 안녕하세요?VS 단축키가 궁금해서 질문 올립니다.강의 10:56초툴팁 확인할 때 다음/이전 단축키가 무엇인가요?tab은 될때 있고 안될 때 있는 것 같아서요위아래 화살표는 자동완성 따라가서 잘 안되는 것 같아요.
-
해결됨두고두고 써먹는 유니티 VR
소스 코드/ VR 기기 질문
강사님 강의 중에 사용하신 소스코드는 4-1 디펜스 게임 실습 프로젝트 코드만 있는건가요? 그 코드를 unity editor로 열면 바로 vr 기기에서 실행해볼 수 있는 건가요? 그리고 이 프로젝트를 열고 실행해 보기 위해서는 oculus 2 만 가능한가요(현재 모델로는 meta quest 2인가요 )아니면 다른 vr 기기들도 실행 가능한가요? 감사합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
랜덤메타(Sleep(1), Sleep(0), Yield())는 컨텍스트 스위칭이 없나요?
루키스님 안녕하세요?SpinLock, sleep/Yield, event, Mutex까지 잘 들었습니다. 제가 이해하기로는 SpinLock은 계속 돌기 때문에 컨텍스트 스위칭이 없어 (여기서의 예에서만) 빠르게 _num = 0 을 출력하고, event와 Mutex는 커널 단까지 컨텍스트 스위칭이 일어나 반복문이 조금만 많아도 _num = 0을 출력하는데 시간이 걸리는걸 볼 수 있었습니다. 그런데 궁금한건, 랜덤메타인 Sleep와 Yield도 쉬는 동안 커널 단까지 컨텍스트 스위칭이 일어날 것 같은데(쉬는 동안 다른 스레드에 메모리 <-> 레지스터 가 왔다 갔다 하므로) 여기서의 예에서는 _num이 빠르게 출력 되었습니다. 그래서 빠르게 출력된 이유가 랜덤메타는 컨텍스트 스위칭이 없어서인지, 아니면 컨텍스트 스위칭이 일어나는게 맞지만 여기서의 예에서만(간단한 예제이므로) 빠르게 _num= 0이 출력된 건지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
저는 왜 강의랑 다르게 될까요?
각 연결선에 has exit time도 모두 체크되어있는데 RUN의 Transitions 순서에는 WAIT으로 애니메이션이 실행되어야하는데 왜 저는 JUMP가 실행될까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
질문 물어본거 말고 다른거에 대한 답변이 AI로 달리는데...
유니티에서 bake를 해도 해당영역이 어디인지 보이지가 않고(NavmeshDisplay가 뜨지 않습니다)검색을 해도 도저히 못찾겠습니다...라고 질문했는데안녕하세요, 인프런 AI 인턴입니다.NavMesh가 제대로 표시되지 않을 때 문제 해결을 위하여 다음과 같은 몇 가지를 확인해 볼 수 있습니다.NavMesh Agent:해당 게임 오브젝트에 NavMesh Agent 컴포넌트가 추가되었는지 확인해주세요.NavMesh Bake 설정:Navigation 패널을 열고, Bake 탭에서 올바른 옵션으로 베이킹을 진행했는지 점검해보세요.레이어 설정:베이킹 과정에서 Navigation Static이 체크된 레이어를 대상으로 하고 있는지 확인래주세요.NavMesh Display 옵션:Unity 에디터 상단의 Navigation 창을 열고, Scene 뷰에서 ‘Show NavMesh’가 활성화되어 있는지 확인해보세요.에디터 버그 여부:때때로 Unity 에디터가 제대로 상태를 업데이트하지 못하는 경우가 있습니다. 에디터를 재시작하여 문제가 해결되는지 확인해보세요.위 단계를 모두 확인하셨는데도 문제가 해결되지 않으면, 유니티 환경 설정의 문제일 수 있으므로 유니티 커뮤니티나 포럼에 질문을 올려 도움을 요청하시는 것이 좋습니다.강좌에 대한 자세한 지원이 필요하시면, ‘문의하기’ 옵션을 통해 직접 문의하실 수도 있습니다.인프런 강의 내용과 관련하여 강의 FAQ를 참조하시면 도움을 받으실 수 있습니다.라고 답변이 달렸습니다.그리고 그에 대한 질문을 다시 답변으로 달았는데 답변이 달리지 않고,다른 질문들에도 이미 해보고 안된다고 물어보는 질문을 남겼는데 또 이거 해봤냐고 물어보는 AI 답변이 달리는데(그리고 코드와 자료를 첨부한 질문도 AI는 보지도 않고 다른 답변을 답니다)어떤식으로 질문해야 제대로된 답변을 받을수 있나요?
-
해결됨따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 02
ForceRebuildLayoutImmediate 함수가 실행되지 않는 것 같습니다.
UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(nodeSpawner.GetComponent<RectTransform>()); 이 라인이 제대로 실행되어야 Node들의 localPosition을 갱신되고 업데이트 할 수 있는 데, 이 라인이 실행이 제대로 되지 않는건지 Node들의 localPosition이 항상 (0, 0)으로 나옵니다. 디버깅, 2.8f1 버전 혹은 그 상위버전으로도 시도해보았지만 실행되지 않습니다. ): 혹시 제가 놓친 부분이 있나 다른 스크립트도 살펴보았는데, 분명 고박사님 스크립트와 크게 다른부분은 없었습니다. 예상되는 문제점이라던가 제가 놓치고 있는 부분이 있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
State Machine #2 에 대해서 질문드립니다.
anim.SetFloat("speed", _speed); anim.SetFloat("speed", 0); 이 두 가지를 통해서 애니메이션의 파라미터값을 변경하는 것 까지는 완료했습니다.그런데 속도가 10이 되어도 웨이트의 애니메이션이 다 완료가 되어야 런으로 넘어갑니다. 파라미터가 바뀌면 바로 애니메이션도 바뀌게 하고 싶은데 어떤 옵션을 건드려야 할까요?<speed가 10이 되어도 WAIT가 재생되고, 계속이면 WAIT가 끝난 후에 RUN으로 넘어갑니다.>
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
질문있습니다
몬스터 anim이 WAIT 에서 RUN으로 animator에서는 변경이 되는데 몬스터 자체 내에서 계속 Idle 상태입니다.--> WAIT 일 때도 모션이 Idle , RUN 일 때도 Idle 입니다using System.Collections; using System.Collections.Generic; using UnityEngine; public abstract class BaseController : MonoBehaviour { [SerializeField] protected Vector3 _destPos; [SerializeField] protected Define.State _state = Define.State.Idle; [SerializeField] protected GameObject _lockTarget; public virtual Define.State State { get { return _state; } set { _state = value; Animator anim = GetComponent<Animator>(); switch (_state) { case Define.State.Idle: anim.CrossFade("WAIT", 0.1f); break; case Define.State.Moving: anim.CrossFade("RUN", 0.1f); break; case Define.State.Skill: anim.CrossFade("ATTACK", 0.1f, -1, 0); break; case Define.State.Die: break; } } } private void Start() { Init(); } void Update() { switch (State) { case Define.State.Idle: UpdateIdle(); break; case Define.State.Moving: UpdateMoving(); break; case Define.State.Die: UpdateDie(); break; case Define.State.Skill: UpdateSkill(); break; } } public abstract void Init(); protected virtual void UpdateDie() { } protected virtual void UpdateIdle() { } protected virtual void UpdateMoving() { } protected virtual void UpdateSkill() { } } using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class MonsterController : BaseController { Stat _stat; [SerializeField] float _sacnRange = 10; [SerializeField] float _attackRange = 2; public override void Init() { _stat = gameObject.GetComponent<Stat>(); if (gameObject.GetComponentInChildren<UI_HPBar>() == null) Managers.UI.MakeWorldSpaceUI<UI_HPBar>(transform); } protected override void UpdateIdle() { Debug.Log("Monster UpdateIdle"); GameObject player = GameObject.FindGameObjectWithTag("Player"); if (player == null) return; float distance = (player.transform.position - transform.position).magnitude; if (distance <= _sacnRange) { _lockTarget = player; State = Define.State.Moving; return; } } protected override void UpdateMoving() { Debug.Log("Monster UpdateMoving"); // 플레이어가 내 사정거리보다 가까우면 공격 if (_lockTarget != null) { _destPos = _lockTarget.transform.position; float distance = (_destPos - transform.position).magnitude; if (distance <= _attackRange) { State = Define.State.Skill; return; } } // 이동 Vector3 dir = _destPos - transform.position; if (dir.magnitude < 0.1f) { State = Define.State.Idle; } else { // TODO NavMeshAgent nma = gameObject.GetComponent<NavMeshAgent>(); nma.SetDestination(_destPos); nma.speed = _stat.MoveSpeed; transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 20 * Time.deltaTime); } } protected override void UpdateSkill() { Debug.Log("Monster UpdateSkill"); } void OnHitEvent() { Debug.Log("Monster onHitEvent"); } } 선생님이 올리신 Prefab의 knight 가 아닌 asset store에서 다운 받은 (Warrior Pack Bundle 2 FREE) 입니다.Unity Chan으로 실행시 잘 움직이고 선생님 자료로 Knight를 만들어서 작동시 잘 움직이지만다운받은 Asset으로는 작동이 안되는데 이유를 잘 모르겠습니다.https://drive.google.com/file/d/1bV4QnQceT30opv8t34qPgKt4bfctjut8/view?usp=drive_link
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
질문 있습니다
TextMeshProUGUI 변수를 추가해서 에디터에서 텍스트를 드래그 드롭으로 할당해주었는데 버튼을 누를때 계속해서 NullExecption 에러가 나서 확인해보니 text 변수에 아무것도 가져와지지가 않습니다. 왜 이러는걸까요 ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
구글 프로토콜 버퍼 사용 이유
기존의 PDL.xml대신 구글 프로토콜 버퍼를 사용하는 이유가Write, Read 함수의 최적화: 기존에 Write, Read를 사용하면서 역직렬화, 직렬화 하실 때 비트컨버터를 사용하는 방법 말고도 더 최적화 할 수 있다고 해주셨는데 관련 문서를 찾아보니 엄청 복잡한 설계를 통해 최적화가 잘 돼 있다고 봤습니다.현업에서의 업무 적응 능력: 대부분 프로토콜 버퍼 혹은 플랫 버퍼를 쓰기 때문에 나중에 혹시나 사용하는 프로젝트를 만나면 적응이 빠르다.데이터의 직관성: 제가 자주 사용해서 그런진 모르겠는데 xml과 달리 패킷 설계가 직관적이라 쉬운편클라와 서버에 쓰일 공통 데이터 선언: 클라와 서버에서 쓰일 패킷 관련 변수를 매번 복붙안해도됨(정확하지 않음, 패킷 자동화 부분에서 xml에서 프로토콜버퍼로 바뀌면서 자동으로 수행되는 부분인지 프로토콜 버퍼 자체 기능인지는 모르겠으나 using protocol buffer를 사용하면 패킷 변수를 사용할 수 있는 것을 보니 자체 기능 같기도하고..?)샌드 버퍼와 리시브 버퍼의 최적화: 1번의 현상과 마찬가지로 구글 프로토콜 버퍼를 사용시 강의에서 자체 제작하신 샌드 버퍼와 리시브 버퍼는 사용하지 않고 조금 더 최적화된 프로토콜 버퍼의 것을 사용한다.이런 이유로 보이는데 루키스님은 어떤 매력이 있으신거 같나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
특정 위치에서 player가 Monster의 바로 옆을 click하면 버그가 발생합니다.
player가 현 위치에서 해당 지점을 이동하고자 클릭하면(마우스는 Monster가 아닌 Ground를 가리켜서 cursor icon은 HandIcon상태) 캐릭터가 monster앞에서 movespeed가 느려지고 해당 지점(Ground)으로 가는게 아니라 몬스터의 position에 가면서도 monster를 공격하는게 아닌, 몬스터에게 이동만 하는 상태가 나타나는 버그가 발생합니다. (공격을 하지 않고 이동만 하는 모습) 이를 해결해보고자 여러차례 시도해보다가 결국 실패해서 질문으로 남깁니다. -공격#2
-
해결됨유니티 2D RPG 게임 만들기
강의 순서가 바뀌어 있습니다.
안녕하세요. 섹션5의 맨처음에 나와야할 5강_Town구성_1, 5강_Town구성_2(페이드아웃) 이 맨 뒤에 있네요. 확인바랍니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
참고 서적
면접 가기전에 서버 강의를 다시 보고 있는데자동화 방식에 대한 설계 같은 부분이 정말 대단하다고 느껴지네요...추후에 프로토콜 버퍼로 바꾸긴 하지만 이렇게 자동화해서 PDL에 패킷만 추가해서 EXE 실행 후 서버, 클라 세션에 각각 코드가 들어가는 자동화가 엄청 편한거였네요핵심은 'PDL에 원하는 패킷 이름과 자료형만 선언해주면 내가 원하는 패킷을 만들 수 있다' 인데 자동화의 저력 정말 감탄했습니다혹시 루키스님이 참고한 서적 같은 것도 알 수 있을까요? 아니면 회사를 다니시면서 분석하시면서 배운 코드신가요