월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
collider관련 질문 있습니다.
안녕하세요! 강의를 다 듣고 프로젝트 진행하고 있습니다. collider부분에서 문제가 있어서 다시 강의보고 있는데, 해결방법이 도무지 생각나지 않습니다. traffic system을 만들고 있는데, 한 대의 차가 다른 차와 부딪히면, 잠시동안 둘 중에 하나의 차만 멈추고 이후에는 두대의 속도를 같게 하여 다시 부딪치지 않게 하는 코드를 작성중입니다. private void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "Car") { NpcCarController mine = gameObject.GetComponent<NpcCarController>(); NpcCarController othercar = collision.gameObject.GetComponent<NpcCarController>(); timer += Time.deltaTime; if (timer < waitingtime) { mine.movementSpeed = 0; timer = 0; } else { mine.movementSpeed = othercar.movementSpeed; } } } 하지만, 저가 차를 20대 정도 스폰하고 모든 차에 저 코드가 포함된 스크립트를 공통으로 붙여서 a차와 b차가 충돌할 경우, a차에서 mine은 a차, othercar는 b차. b차에서 mine은 b차 othercar는 a차가 되어서 두차 모두 쉬고 다시 출발하는 코드가 되어버립니다. 혹시 코드를 고쳐서 둘중의 한대의 차만 movementspeed를 0으로 할 수 있는 방법이 있을까요? ps. 강의가 프로젝트에 큰 도움이 되었습니다. 감사합니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
RayCast 관련 질문
제가 이해한 것이 맞는지 물어보려 합니다. 1. 클릭, 화면상의 (x,y)좌표 획득 (mousePos) 2. 카메라의 방향 벡터 획득(dir = mousePos - camera.pos) 3. 카메라가 바라보는 방향으로 Ray 추적 (RayCast(camera.pos, dir)) 4. 충돌 확인하여 해당 obejct에 대해 행동 이고 의사코드로 바꾸면 아래와 같이 되구요 1. mousePos = ScreenToWorldPoint(Input), camera.nearplane (x,y,z좌표 획득) 2. dir = mousePos - cameraPos (x,y,z좌표 - 화면 상 x,y좌표) 3. RayCast(camera.pos, dir, range) 4. Event
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
GameObject를 Bind 할 때의 궁금한 점이 있습니다.
항상 좋은 강의 잘보고 있습니다. UI자동화 강의 중 궁금한 부분이 있습니다. 컴포넌트가 아닌 게임 오브젝트 자체를 바인드 해올 때에 Transform transform = FindChild<Transform>(go, name, recursive); 으로 받으신뒤, return transform.gameObject를 하셨는데, 왜 Transform으로 받아야 하는지 이해가 안됩니다.. GameObject transform = FindChild<GameObject>(go, name, recursive);요런식으로 GameObject 상태로 받아서 바로 리턴을해도 되지 않을까 해서 실험해봤는데 오류가 뜨더라구요.. 둘의 차이가 뭔가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
스택오버플로우가 발생합니다
강의 너무 잘듣고 있고 part7듣는 도중에 부족 한거 같아서part3을 보고있는데 막히네요..... DataManager에 init()을 사용하면 스택오버플로우가 생겨요 혹시 왜 이런지 알려주실 수 있나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
디버깅 부분 질문있습니다.
안녕하세요 강의 잘 듣고있습니다! C#강의 땐 그런적이 없었는데, 유니티로 와서 비주얼스튜디오를 Unity에 연결하여 디버깅 하는 과정에서 불편함이있습니다. F11버튼으로 디버깅을 하니, System코드까지 계속 들어가서 디버깅이 너무불편해서 F10버튼으로 진행했는대도 똑같이 안으로 파고들어가네요... 제가짠 코드에서 한줄씩 내려가게만 하고싶은데 방법이 있나요..?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
c# 스크립트에서 한글 주석을 달면 깨지는 문제
Unity에서 스크립트를 추가하고 코드를 작성할때, 한글 주석을 작성하고 저장 후 Unity로 돌아오면 한글 주석 부분이 깨져서 나옵니다. 인터넷에 검색해본 결과 스크립트 파일을 메모장으로 열어서 UTP-8로 다시 저장하면 된다고 하여서 시도 해봤더니 한글로 잘 뜨긴 합니다만, 매번 이 방식으로 한글 주석이 달린 모든 스크립트들을 새로 저장하기는 너무 번거롭습니다. 혹시 다른 해결 방법 없을까요? visual studio와 unity 모두 업데이트 해보았으며, unity에서 한글도 설치 했습니다. visual studio에서 도구 - 옵션 - 텍스트 편집기 - 일반 에서 '시그니처 없는 utp-8 인코딩 자동 검색'을 체크 해제 해보기도 하였고 다시 체크 해보기도 하였으나 한글 주석은 계속 깨졌습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Extension -> AddUIEvent에서 this 부분이 궁금합니다!
여기서 매개변수에서 go를 생략가능한게 Extension에서 AddUIEvent매소드를 만들때 this GameObject go, 로 지정해서 그런건가요? 그렇다면 어떠한 GameObject더라도 AddUIEvent를 불러올 수 있다고 생각하는게 맞는거겠죠?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Sorting Layer, Mask, Canvas
안녕하세요 강사님 정말 오랜만에 질문 글을 올립니다 파트 3까지 진행하고 저 혼자서 2D 슈팅 게임을 하나 만들고 있는데, 여기서 배운 몇가지를 활용하고 있습니다 캐릭터 선택창을 강사님이 보여주신 Scrollview를 활용해서 만들고 있어요 그런데 중간에 문제가 있었고, 해결은 한 상태인데 한가지 이해가 안가서요 글로 표현이 다 될 수 있을지는 모르겠으나 일단 한번 적어 보겠습니다 기본적인 골자는 수평 방향으로 스크롤뷰를 만들어서, 캐릭터 선택창을 만드는 것 입니다 강의에서 보여주신 것과는 달리 한번에 하나의 오브젝트만 보여지게 만들었습니다 해당 오브젝트 안에서는 캐릭터의 이미지, 이름, 데미지 등이 보여지는 UI가 있습니다 처음에는 Mask 컴포넌트가 Image 컴포넌트만 마스킹 한다는 걸 모르고, 해당 UI들을 Sprite Renderer로 만들었습니다 나중에 다시 이 UI들은 Image 컴포넌트를 사용해서 다시 만들었습니다 위의 image UI들 위로, 텍스트 UI를 집어 넣었습니다, 차일드 오브젝트로서요 그런데 Sorting Layer 때문인지, 이 텍스트들이 이미지에 가려서 안보이더라고요 찾아보니까 Canvas 컴포넌트로 sorting layer를 오버라이딩 할 수 있다고 해서 그렇게 했습니다 가장 마지막 Sorting Layer는 UI 이고, 이미지 UI들에는 order 1번, 텍스트 UI에는 2번을 부여했습니다 이제 문제는 없을거라 생각을 했는데 한가지 문제가 생겼습니다저기 위에 말씀드린 이미지 UI - 텍스트UI 들을 덮는 버튼 오브젝트가 있습니다(캐릭터 언락용 입니다)이 버튼에는 Button, 및 Image 컴포넌트 외에Layout Element 컴포넌트(Ignore Layer - true, Layout priority - 0)과 Canvas 컴포넌트(Pixel Perfect - inherit, Override Sorting - false)이렇게 추가를 했습니다 여기서 이상한게, 만약에 이 Canvas 컴포넌트에서 Override Sorting을 활성화시키면 Scrollview의 Viewport에 있는 Mask 컴포넌트의 영역 밖에다가 지금 이 메뉴 아이템 오브젝트를 생성했을 때, 이 버튼이 보입니다 이걸 활성화 시키지 않으면 안보이고요 (이게 제가 원하는 결과물이죠) 그런데 또 이 Canavs 컴포넌트를 아예 꺼버리거나 제거하면, Sorting Layer 문제인건지, Mask 영역 내부에서도 안보입니다 혹시 설명을 해주실 수 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Bind에서 _objects.Add를 먼저하고 objects에 FindChild한 값을 넣어주는 이유가 궁금합니다.
objects를 만들고 for문돌려서 objects에 값을 대입을 한 뒤에 _objects라는 Dictionary에 .Add를 해야하지 않나요? 어차피 objects는 Bind메소드 안에 살아있기 때문에 상관이 없는 건가요? 아니면 objects에 값을 넣어두고 _objects.Add를 하면 메모리적으로 효율이 떨어지기 때문에..?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
컨트롤러와 스탯
강의를 보면서 이렇게 저렇게 수정도하고 시도도 해보면서 만들고 있습니다. Attacked를 만들때 ① 강의와 같이 stat안에 메소드를 만들고 stat을 인자로 넘겨서 함수를 처리를 하는것과 ② stat을 컨트롤러에 public으로 캐싱해서 몬스터컨트롤러.Stat.Attacked(~~~)로 사용하는 것과 차이가 클까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
카메라 컨트롤러가 게임매니저에서 직접 플레이어를 받으면
카메라 컨트롤러가 게임매니저에게 직접 _player = Managers.Game.player로 플레이어를 받으면 안되나요? 호출순서의 문제인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Apply Root Motion
다른 에셋을 사용해서 몬스터를 만들었습니다. Apply Root Motion은 애니메이션의 위치이동이 오브젝트의 위치에 반영되는걸로 알고있는데요 ------------------------------------------ ①몬스터가 Apply Root Motion을 체크했을때만 transform.rotation = Quaternion.Slerp(~~~)를 통한 회전이 적용되고 있습니다. ②제가 사용한 모델의 애니메이션은 제자리의 굉장히 단순한 애니메이션이며 애니메이션에 rotation이 포함되어있지도 않습니다. ③애니메이터를 disable 했을때도 회전이 적용되는것으로 보아 애니메이터 문제인거같은데 =============================== Q1) 애니메이터가 회전을 막는 이유가 뭘까요? Q2) Apply Root Motion을 체크했을때만 회전이 적용되는 이유는 뭘까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
비주얼 스튜디오 Tools for 유니티용으로 생성 안됌
유니티도 다시 설치하고 , 업데이트 확인 , 외부환경에서 devenv.exe 연결도 해보고 , 선생님읰 코드를 다운받아도 안된디고 합니다. 혹시 제가 밑줄친 부분떄문인지....
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Event System이 생성되지 않습니다
테스트 하던 도중에 뭔가를 잘못 만진건지, 갑자기 스크린샷처럼 에러가 나오면서 제대로 동작하지를 않습니다. Event System 이 생성되지 않으면서 생기는 문제같은데 정확히 무엇이 문제인지를 모르겠네요.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Rotate와 rotation의 속도차이의 원인에 대한 질문입니다.
_fSpeed = 10.0f; _fYAngle += 10*_fSpeed*Time.deltaTime; //+- 상대 회전값 transform.Rotate(new Vector3(0.0f, _fYAngle, 0.0f)); //특정 축을 기준으로 회전을 시키고 싶으면 이걸 transform.rotation = Quaternion.Euler(0.0f, _fYAngle, 0.0f); //물체의 절대적인 값 실습 도중 Rotate와 rotation에서 같은 변수를 줬는데 유니티를 실행시켜보니 회전속도에서 차이를 보이더군요. 그 이유가 뭘까 생각을 해봤는데 차이점을 찾아봤습니다. 1. Rotate는 따로 지정을 안 해주면 로컬, rotation은 월드 2.Rotate는 벡터값으로, rotation은 쿼터니엄으로 값지정 생각해봤을 때 1번 이유보다는 2번 이유때문에 차이를 보이는 것 같은데 Rotate는 바로 오일러 벡터값을 주고 rotate는 오일러 벡터값을 지정해주면 그걸 쿼터니엄으로 변환해서 준다로 생각하는데 여기서 발생하는 차이일까요? 오일러 값으로 줄 경우는 180도 이상의 각도도 인지되기 때문에 빠른 속도로 돌지만 쿼터니엄은 180도 이상은 표현 못하니 해당 회전값을 180도로 나눈 나머지 값 만큼으로만 인지를 해서 속도의 차이를 보인다고 판단했습니다. 제 결론이 맞는 걸까요? -- 추가적으로 vs2019를 사용하며 f1키를 이용해 ms 공홈에서 함수를 확인하는 걸 애용 했는데 유니티의 경우는 공홈에 접속해서 함수를 검색하는 방식을 이용하고 있습니다. vs자체적으로 단축키를 통해 공홈에서 함수를 자동 탐색을 하는 방법이 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
영상을 보면서 공부를 하는 중인데
영상 외적으로도 참고할 만한 서적이 있으면 좋겠다는 생각을 하는데 영상을 제작하면서 참고한 서적이나 또는 추천하는 책이 있으신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
싱글톤 패턴 흐름 질문
안녕하세요 Rookiss님 강의 잘 듣고있습니다. 다름이 아니라 싱글톤 패턴 복습을 하던 중 제가 이해하고 있는게 정확한지 궁금해서 질문드립니다 유니티상에서 Play 버튼을 눌렀을 때 start가 실행되고 update가 프레임마다 실행된다고 알고있습니다. MonoBehavior를 상속받은 여러 클래스들은 start와 update를 각각 실행할 것인데 이때 Managers 클래스가 맨 처음 실행되나요 아니면 랜덤으로 실행되나요? 만약 Managers 클래스가 맨 처음 실행된다면 18:17 에서 프로퍼티로 Managers 인스턴스를 가져올 때, Init()을 하고 생성된 인스턴스를 리턴하도록 하지 않고 start에만 Init()을 넣어두면 되는데 굳이 Init()을 넣은 이유는 Managers 클래스가 맨 처음 실행된다는 보장이 없으니까 다른 곳에서 Managers 인스턴스를 사용하려고 할 때 Init()으로 생성하도록 하는 것인지 궁금합니다. 한마디로 어떤 함수가 실행될 지 몰라서 프로퍼티에서도 Init을 하도록 설정한 건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
스크립트인지 클래스인지...
MonsterController.cs 에서 질문있습니다.Stat myStat = gameObject.GetComponent<Stat>();라는 식은 정확히 1. MonsterController.cs 스크립트 컴포넌트를 가진 gameObject가 Stat.cs 스크립트 컴포넌트를 추가 한 다음, 'PlayerStat.cs' 를 인스턴스화한 myStat변수에 저장. 2. MonsterController.cs 스크립트 컴포넌트를 가진 gameObject가 Stat.cs 스크립트 컴포넌트를 추가 한 다음, 'PlayerStat class' 를 인스턴스화한 myStat변수에 저장.나름 해석을 해봤는데, 1번이랑 2번 중에 어떤게 정답인가요?스크립트인가요 아니면 클래스인가요? 아니면 ... 사실 2개 다 정답이라고 봐도 될까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
enum 순서 질문
안녕하세요.BaseController.cs를 새로 만들면서궁금해서 실험을 해봤는데요.기존에 있던 player의 행동 enum을Define.cs 로 옮기고 나서원래 저 스샷처럼 저 순서로 상태들이 있었는데,선생님은 DIE를 맨 첫줄에 넣으셨길래,선생님처럼 DIE를 enum 맨 첫줄로 옮겨보고Unity를 재생해보니, player가 움직여지지 않았습니다.저 스샷 순서대로 다시 해보니 Player가 잘 움직여집니다. Layer 같은 경우는 enum 순서가 중요한걸로 알고있는데(0, 1, 2 순으로 Layer는 그런게 중요하지만)행동 상태에 샘처럼 DIE를 맨 첫줄에 놓아보니까 움직여지지가 않아서, 왜 안되는지 궁금해서 질문을 날립니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
GridPanel Bind가 실패 했다고 뜹니다
콘솔에 Failed to bind(GridPanel)뜨네요 이름도 맞게 했고 이전에 Bind는 문제 없었는데 왜 그럴까요? Bind가 안 되니 다른게 다 안되네요