묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[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에 원하는 패킷 이름과 자료형만 선언해주면 내가 원하는 패킷을 만들 수 있다' 인데 자동화의 저력 정말 감탄했습니다혹시 루키스님이 참고한 서적 같은 것도 알 수 있을까요? 아니면 회사를 다니시면서 분석하시면서 배운 코드신가요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Navemesh Display
유니티에서 bake를 해도 해당영역이 어디인지 보이지가 않고(NavmeshDisplay가 뜨지 않습니다)검색을 해도 도저히 못찾겠습니다...
-
미해결유니티 2D RPG 게임 만들기
3강 4 움직임, 점프 질문
더블 점프 기능을 구현할 방법은 없을까요?Floor 태그가 있는 곳에서만 점프가 되니까더블 점프 기능을 어떻게 구현할 지 모르겠습니다ㅜ
-
해결됨유니티 2D RPG 게임 만들기
강의 순서가 바뀌어 있습니다.
안녕하세요. 1강_3시작_UI구성3 과 1강_4_시작UI구성2 의 위치가 바뀌어 있습니다. 순서대로 듣다가 당황했네요. 그리고 섹션의 강의 제목도 일관성있게 적어주셨으면 합니다.(띄어쓰기, 언더바) 1강_1시작UI1강_2시작UI_구성1강_3시작UI구성31강_4_시작UI_구성21강_5 회원가입기능1강_6 회원가입기능21강_7_로그인 기능_찾기기능 감사합니다.
-
해결됨따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 02
StageController에서 BackgroundBlock[] backgroundBlocks의 크기를 미리 선언하는 부분 질문입니다
제목그대로 StageController에서 BackgroundBlock[] backgroundBlocks의 크기를 선언하는 코드가 없어도 정상 작동하는데 미리 크기를 선언해주신 이유가 있을까요?? 제가 생각했을 때, backgroundBlocks는 BackgroundBlock의 배열임과 동시에 foregroundBlockSpawner(엄밀히는 BackgroundBlockSpawner클래스)의 SpawnBlocks메소드가 반환하는 값을 할당받게 되는데, 해당 메소드의 내부에서 배열의 크기를 지정하는 코드가 있어서 '중복되는 코드가 아닌가?' 하는 의문에 주석처리를 한 뒤 실행해보니 정상적으로 작동을 해서 질문 남깁니다!!! 예상치 못한 예외를 잡기위함일까요? 아니면 최적화 혹은 제가 모르는 부분이 있어서일까요??
-
해결됨따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 02
OnMouseXxxx 메소드에서 StopCoroutine을 호출하는 이유
OnMouseXxxx 메소드에서 StopCoroutine을 호출하는 이유가 예를들어 Down에서 호출된 "크게변형시키는" 코루틴을 Up에서 일단 중지시키고 "작게변형시키는"코루틴을 호출하기 위함이 맞을까요?.?확인차 질문남깁니다
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
안녕하세요! 시작...부터 조금 막혔어요..ㅠㅠ 도와주세요
All compiler errors have to be fixed before you can enter playmode!UnityEditor.SceneView:ShowCompileErrorNotification ()처음 학습 파일을 다운 받고 플레이했는데 이렇게 뜨는건 왜일까요..?하찮은 질문해서 죄송합니다 흐흑
-
해결됨두고두고 써먹는 유니티 VR
수업 강의자료
안녕하세요 강사님 혹시 수업 진행하시면서 사용하신 강의자료 다운 받을 수 있을까요? 필기하면서 하고 있긴한데 진행하면서 사용하신 강의자료도 참고하고 싶어서여..!
-
미해결[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은 매니저스가 들고 있는 인풋매니저인것 같은데 제가 맞게 접근하는건지 헷갈립니다. 둘 다 테스트 해봤는데 정상적으로 업데이트는 되는 것 같은데 둘 중 어떤 것으로 접근하는게 더 맞는지 궁금합니다.