묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 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 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
비주얼스튜디오 한글 입력 오류
안녕하세요, 문의 드립니다. 비주얼스튜디오에서 한글 입력 후 방향키를 누르면 아래 첨부한 사진과 같이 입력한 한글이 GS RS ...등등의 특수 문자?로 바뀌는데요.해당 프로그램에서만 이런 현상이 생기네요. 혹 해결 방법을 아신다면 부탁드리겠습니다 ...ㅠㅠㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
질문 있습니다
TextMeshProUGUI 변수를 추가해서 에디터에서 텍스트를 드래그 드롭으로 할당해주었는데 버튼을 누를때 계속해서 NullExecption 에러가 나서 확인해보니 text 변수에 아무것도 가져와지지가 않습니다. 왜 이러는걸까요 ㅠㅠ
-
미해결C# 입문부터 Xamarin Forms(자마린 폼즈) + Maui(마우이) 안드로이드, 윈도우 앱(UWP) 동시에 만들기
자마린 강의 시작 프로젝트 파일 형식 질문
비쥬얼 스튜디오 2022에서는 프로젝트를 생성할때 어떤걸로 생성을 해야되는건가요 ㅠ영상에서 보이는 안드,ios 프로젝트가 없고 다른 이름들의 프로젝트들 형식만 있씁니다ㅠ
-
미해결[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
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
참고 서적
면접 가기전에 서버 강의를 다시 보고 있는데자동화 방식에 대한 설계 같은 부분이 정말 대단하다고 느껴지네요...추후에 프로토콜 버퍼로 바꾸긴 하지만 이렇게 자동화해서 PDL에 패킷만 추가해서 EXE 실행 후 서버, 클라 세션에 각각 코드가 들어가는 자동화가 엄청 편한거였네요핵심은 'PDL에 원하는 패킷 이름과 자료형만 선언해주면 내가 원하는 패킷을 만들 수 있다' 인데 자동화의 저력 정말 감탄했습니다혹시 루키스님이 참고한 서적 같은 것도 알 수 있을까요? 아니면 회사를 다니시면서 분석하시면서 배운 코드신가요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Navemesh Display
유니티에서 bake를 해도 해당영역이 어디인지 보이지가 않고(NavmeshDisplay가 뜨지 않습니다)검색을 해도 도저히 못찾겠습니다...
-
미해결아무것도 모르고 시작하는 C#
'봐꿀'문자가 아니라 '바꿀' 문자...
강좌에 오타가 있네요...
-
미해결WPF (.NET Core, C#, 자막제공)
7강부터 어려워집니다.
6강까지는 예제를 따라하니 어느정도 이해했다 여겨집니다.7강부터는 확 어려워집니다.C#의 기본기가 충실하지 않은 것 같아서 그렇습니다.어떤부분을 집중 공부하면 될까요?이후 강의를 들어도 이해가 안 갈 것 같아서요. 거의 코드를 따라해서 구현은 성공했지만,뭔 내용인지는 전혀 모르겠네요.도움 부탁드립니다.
-
해결됨따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 02
StageController에서 BackgroundBlock[] backgroundBlocks의 크기를 미리 선언하는 부분 질문입니다
제목그대로 StageController에서 BackgroundBlock[] backgroundBlocks의 크기를 선언하는 코드가 없어도 정상 작동하는데 미리 크기를 선언해주신 이유가 있을까요?? 제가 생각했을 때, backgroundBlocks는 BackgroundBlock의 배열임과 동시에 foregroundBlockSpawner(엄밀히는 BackgroundBlockSpawner클래스)의 SpawnBlocks메소드가 반환하는 값을 할당받게 되는데, 해당 메소드의 내부에서 배열의 크기를 지정하는 코드가 있어서 '중복되는 코드가 아닌가?' 하는 의문에 주석처리를 한 뒤 실행해보니 정상적으로 작동을 해서 질문 남깁니다!!! 예상치 못한 예외를 잡기위함일까요? 아니면 최적화 혹은 제가 모르는 부분이 있어서일까요??
-
해결됨따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 02
OnMouseXxxx 메소드에서 StopCoroutine을 호출하는 이유
OnMouseXxxx 메소드에서 StopCoroutine을 호출하는 이유가 예를들어 Down에서 호출된 "크게변형시키는" 코루틴을 Up에서 일단 중지시키고 "작게변형시키는"코루틴을 호출하기 위함이 맞을까요?.?확인차 질문남깁니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
한글 사용에 대하여
코드를 수정하다 보니 우연히 변수 이름을 한글로도 선언이 가능하다는 걸 알게 되었습니다.이런 식으로 변수 이름을 한글로 선언해도 상관이 없을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
VS2019에서 마우스 호버 시 상세 툴팁이 보이지 않습니다
설정이 필요한 것인데 제가 놓친 것인지 VS에서 툴팁 설명을 보고 싶은데 디스크립션이 나오지 않습니다.예를 들어 Time.deltaTime; 에서 deltaTime에 마우스 호버 시 가장 첫번째 줄인 float Time.deltaTime { get; } 까지만 출력됩니다.어떻게 설정할 수 있을까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Managers에서 OnUpdate()함수 호출이요
안녕하세요, 궁금한게 있어서요. inputManager를 생성하고 OnUPdate() 메소드를 호출하는데 있어서 43줄, 44줄의 _input.OnUpdate()로 접근하는 것과 Input.OnUpdate()로 접근해서 호출하는게 어떤 차이가 있을까요? _input은 인풋매니저를 인스턴스화 한것 같고, Input은 매니저스가 들고 있는 인풋매니저인것 같은데 제가 맞게 접근하는건지 헷갈립니다. 둘 다 테스트 해봤는데 정상적으로 업데이트는 되는 것 같은데 둘 중 어떤 것으로 접근하는게 더 맞는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
점프 관련하여 질문있습니다.
간단하게 리지드바디의 impulse를 통하여 점프를 구현하고자 합니다. 간단히이렇게 점프를 업데이트에서 처리하도록 했는데, impulse로 힘을 준 다음 줄의 프린트 문이 (0, 0, 0)이 나옵니다.인게임에서는 점프를 하여 하늘로 가고 있음에도 불구하고요.분명히 임펄스로 힘을 준 상태여서, 점프파워만큼 (0, 점프파워, 0)이 나와야 하는데, 0이 나오고, 만약 지형의 경사로 인해 내려가는 힘이 작용하고 있었다면, 음수도 나옵니다. 업데이트와 픽스드업데이트의 문제인 것도 같은데, 어떻게 어떤 것이 문제인지 파악할 수 있는지 감이 안옵니다. 어느부분을 알아봐야 실마리를 찾을 수 있을지 모르겠습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
(리스트, 행렬로) 그래프 생성 시 질문 있습니다.
안녕하세요.List<int>[] adjacent = new List<int>[6]{new List<int> { 1, 3 },new List<int> { 0 ,2, 3 },new List<int> { },new List<int> { 4 },new List<int> { },new List<int> { 4 },};이런 형태에 익숙치 않아서 질문드립니다.위와 같이 리스트로 그래프를 생성했다고 했을 때아직 이 단계에선 사람만이 그래프라고 약속한 것이고프로그램 상에서 이것을 그래프라 인식하게 하려면 DFS, BFS같은 알고리즘으로 활용을 해야 그래프로 인식되는건가요?이런 식으로 이해를 하게 되었는데 이게 맞는건가요? 만약 제가 생각한게 맞다면 이걸 (그럴 일은 없겠지만)다른 함수에서 그래프가 아닌 다른 일반적인 리스트로 이용하게 될 수도 있나요?adjacent[1][2] (= 3) 처럼 사용하게 될 수도 있나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
press, pointdown, pointup부분이요
24줄의 코드가 이해가 되지 않아서 문의 드려요.왼쪽 마우스 버튼을 클릭한 이벤트가 발생 시에, 처음으로 누른상태라면 PointDown 이벤트와 누른시간을 적립해주는 걸로 보이는데요. 여기서 PointDown은 길게 누르고 있는 상태로 알고 있는데요. 이미 한번 눌려진 상태 pressed =true에서 왼쪽마우스 이벤트가 발생했을 시에 실행시켜줘야 하는거 아닌가 의문이 들어서요. 24줄에서의 조건을 _pressed ==true일 때로 고쳐야 되는거 아닌가 의문이 들어서요. ㅠ 또, 36라인에서 Time.time은 실행시간이라고 알고 있는데 이거는 마우스 왼쪽버튼을 클릭하지 않은 실행시간, 즉 마우스를 뗀 시점에서부터 실행시간을 의미하는건가요? 저는 36줄에서 if(_pressedTime < 0.2f) 이렇게 수정하면 클릭으로 판별하는 건 줄 알았는데 어떻게 코드를 분석해야 할지 모르겠어요. 완강하고 프레임워크를 익히려 혼자 분석하고 코드를 쳐보면서 외우고 있는데요. 궁금증이 생기네요.