월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
몬스터와 플레이어 프리팹 이동 후 에러
먼저 몬스터 같은 경우 프리팹으로 이동 후 삭제하라고 하셔서 했습니다. 이후 몬스터 동작 특히 움직임과 칼 쓰는 동작이 안나옵니다. 무슨 잘못일까요? 나머지 스크립트는 샘이 시키는데로 했습니다.앞으로 돌아가 몬스터 다시 복기해 보는데 아래와 같이 WAIT에서 다음으로 넘어가지 않습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
using UnityEngine.EventSystems; 음....
안녕하세요. 좋은 강의 너무 감사합니다.강의 보면서 궁금하게 있어서 찾아보고 이리 저리 해봐도이해가 잘 안되는 문법이 있어서 질문 드립니다.이전 UI 연습에서 사용했던UI_Button.cs에서는 public void OnButtonClicked(PointerEventData data)에서 PointerEventData 를 사용하기 위해using UnityEngine.EventSystems;선언해주었는데 이번에 만든 UI_Inven_Item.cs에서는ItemIcon을 바인딩하고 이벤트를 람다로 연결할때는Get<GameObject>((int)GameObjexts.ItemIcon).AddUIEvent((PointerEventData) => { Debug.Log($"아이템 클릭! {_name}");});using UnityEngine.EventSystems;를 선언안해주도 되더라고요.. 이리 저리 시도해보고 알아보는데 왜 그런지 잘 모르겠습니다.. 차이가 있다면 UI_Inven_Item은 AddUIEvent가확장 메소드에서 호출이 되고 UI_Button에서는 직접 호출이 되는데.. 잘 모르겠습니다.어느곳에서는 PointerEventData를 사용하기 위해 using EventSystems를 선언해줘야하고 어느부분에서는 안해주도되고 많이 많이 궁금한니다. ㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
오류
8분여 정도 몬스터 따라오기 실행시키는 가운데 아래와 같은 에러 메시지가 뜹니다.NullReferenceException: Object reference not set to an instance of an objectMonsterController.UpdateMoving () (at Assets/Scripts/Controllers/MonsterController.cs:66)BaseController.Update () (at Assets/Scripts/Controllers/BaseController.cs:54)cs 66번째 줄은 nma.speed 줄이고 // 이동 Vector3 dir = _destPos - transform.position; if (dir.magnitude < 0.1f) { State = Define.State.Idle; } else { NavMeshAgent nma = gameObject.GetOrAddComponent<NavMeshAgent>(); nma.SetDestination(_destPos); nma.speed = _stat.MoveSpeed; transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 20 * Time.deltaTime); }BaseController cs 54는 UpdateMoving(): 줄입니다. void Update() { switch (State) { case Define.State.Die: UpdateDie(); break; case Define.State.Moving: UpdateMoving(); break; case Define.State.Idle: UpdateIdle(); break; case Define.State.Skill: UpdateSkill(); break; } } 무엇이 문제인지요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
raycast쪽..질문좀 드립니다..
using System.Security.AccessControl; using System.Reflection.PotableExecutable; using System.IO; using System.Diagnostics; using System.Net.NetworkInformation; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class PlayerController : MonoBehaviour { [SerializeField] float _speed = 10.0f; Vector3 _destPos; void Start() { Managers.Input.MouseAction -= OnMouseClicked; Managers.Input.MouseAction += OnMouseClicked; } public enum PlayerState { Die, Moving, Idle, } PlayerState _state = PlayerState.Idle; void UpdateDie() { // 아무것도 못함 } void UpdateMoving() {Vector3 dir = _destPos - transform.position;if (dir.magnitude < 0.1f){ _state = PlayerState.Idle; }else{//TODONavMeshAgent nma = gameObject.GetOrAddComponent<UnityEngine.AI.NavMeshAgent>();float moveDist = Mathf.Clamp(_speed * Time.deltaTime, 0, dir.magnitude);nma.Move(dir, normalized * moveDist); Debug.DrawRay(transform.position, dir. normalized, Color.Green);//Debug.DrawRay(transform.position,Vector3.Up * dir.normalized, Color.Green);if(Physics.Raycast(transform.position,dir,1.0f,LayerMask.GetMask("Block")))//if (physics.Raycast(transform.position,Vector3.Up * 1.0f, LayerMask.GetMask("Block"))){_state = PlayerState.Idle;return; }transform.position += dir.normalized * moveDist;transform.rotation = Quaternion.Slerp(transform.rotation,Quaternion.LookRotation(dir), 20 * Time.deltaTime);} // 애니메이션Animator anim = GetComponent<Animator>();// 현재 게임 상태에 대한 정보를 넘겨준다 anim.SetFloat("speed", _speed); }void UpdateIdle(){// 애니메이션Animator anim = GetComponent<Animator>();anim.SetFloat("speed", 0); }void Update(){ switch (_state){ casePlayerState.Die:UpdateDie();break;case PlayerState.Moving: UpdateMoving();break;case PlayerState.Idle: UpdateIdle();break; }}void OnMouseClicked(Define.MouseEvent evt){ if (_state == PlayerState.Die)return;Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f);RaycastHit hit;if (Physics.Raycast(ray, out hit, 100.0f, LayerMask.GetMask("Block"))) {_destPos = hit.point;_state = PlayerState.Moving; }}} 이부분 작성 할때 vector3 작성부분에서 system 에러가 떠서 찾아보다가.. 이부분이 계속 에러가 떠서 찾다가 도저히 해결방법을 몰라서..using system 에러같은데.. vector3가 문제 인가 싶어서 그냥 dir 로 수정해도 에러가 뜨는건 마찬가지고.. 딱 그전(14:40쯤) 그때 코드 수정 할때 부터 에러가 뜨더라구요.. 구글링해보고 찾아봐도 답이 안나와서 여쭤봅니다..ㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Spawn 과 씬 로드
지금 플레이를 클릭해서 하다가player가 죽으면 씬을 다시로드하는 것을 구현하였습니다.처음 플레이할때는 UI들이 잘 로드가 되고 정상적으로 동작합니다. 하지만 죽고 다시 로드를 할경우UI들은 로드가 잘되지만 이벤트 발생시(Action부분이 문제인거같습니다.)이러한 에러가 뜨면서 크래쉬가 납니다. 원인을 도저히 못찾겠습니다. ㅠㅠㅠ또 궁금한것이 Action은 if ()문 안에서처럼 != null 체크를 해주지 않으면 에러가 계속 나던데 이유가 무엇인지 궁금합니다...
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
이펙트 리소스 처리 관련해서 질문이 있습니다
안녕하세요 루키스님 강의 잘 듣고 있습니다 루키스님 강의에서 Sound를 Resource에서 싱글턴형식으로 불러와 쓰는 코드가 인상깊었습니다그래서 이펙트도 사운드와 비슷하게 리소스관리를 하고싶은데 이펙트같은 경우에는 깔끔하게 리소스 접근을 구현하려면 어떻게 접근해야하는지 잘 모르겠습니다사운드같은경우 간단하게 bgm, effect로 나눠서 play, playonshot을 각자 실행시키게해서 원하는타이밍에 내가 사운드를 재생시키게하는데이펙트의 경우 일단 ParticleSystem, Viusal Effect로나뉘고 이걸 사운드의 play, playonshot처럼 각자 실행하게 만든다고 해도 단일 이펙트가 아니라 스크립트로 제어되는 이펙트도 존재합니다 (여러각도로 검기를 난사하는 이펙트의 경우 한 이펙트를 랜덤한 각도에서 time delay를 줘서 실행시키는 방식으로 제어되고 있더군요) 이펙트는 사운드와 달리 play하는 방법이 가지각색인데 이펙트같은경우는 리소스를 어떻게 관리하시는지 궁금합니다 어떻게 인터페이스를 잘 설계하면 될거같기도한데 감이 살짝 안잡혀서 질문드립니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
헷갈리는 부분이 있습니다.
GetButton((int)Buttons.UpButton).gameObject.AddUIEvent(OnButtonClicked);에서 AddEvent의 원형이 public static void AddUIEvent(GameObject go, Action<PointerEventData> action, Define.UIEvent type = Define.UIEvent.Click)이거 잖아요. 즉,Action<PointerEventData> action 자리에 public void OnButtonClicked(PointerEventData data)이 함수를 넣어 줬다는 건데 Action<PointerEventData> action이라는게 매개 변수가 PointerEventData인 함수를 뜻하는 것인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
transform.TransformDirection으로 이동하면 왜 안될까요?
Rotation 강의에서 마지막 회전과 이동을 하는 코드에 대해서마지막에 캐릭터 이동을transform.position += Vector3.forward Time.deltaTime _speed; 사용해서 캐릭터의 월드 좌표를 이동하는데이전에transform.position += transform.TransformDirection(Vector3.forward Time.deltaTime _speed);코드를 사용해서 캐릭터를 움직인 코드를 사용해보았더니 엉퉁한 방향으로 이동을 하더라고요..TransformDirection를 제대로 이해가 안되서 그런지 많이 헷갈리고 정확히 차이가 무언인지 잘 모르겠습니다.ㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
선생님이 올려주신 유니티게임 코드 구조 크게 보면 컨트롤러와 매니저 두가지로 이루어졌다고 볼 수 있나요?
그게 맞다면컨트롤러,매니저는 각각 무슨 역활을 하는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
(유니티)게임구조는 매니저구조에서 시작인가요?
트랜스폼까지 듣다가 제가 집중력이 약해서 지루함을 느껴서 만들면서 병행해서 들을려고 하는데유니티게임은 보통 xx매니저구조에서 시작하는 것이다 이렇게 생각해서 시작해도 될까요...?그리고 vector3강의 들으면서 느낀건데니티에서 쓰이는 수학은 어느정도 정리하면될까요?그리고 이과인데 수학4등급입니다...ㅠㅠdir.normalize 설명하실 떄 단위벡터 말하시는 구나정도 아는 정도,..
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
루키스님 질문이 있습니다.
루키스님 강의 처럼 오브젝트에 일일히 스크립트(컴포넌트)를 붙이는 방식이 아니라 상속을 받는 식으로 유니티 툴에 있는 모든 기능들을 코드로써 사용할 수 있게 하는 이러한 방식? 패턴?을 무슨 방식? 패턴이라고 하나요??(디자인 패턴의 한 종류인 싱글톤 처럼요..)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
서버에 관해서
유니티 이제 막 시작하려고 합니다. 저는 mmorpg 를 만드는게 꿈입니다. 광활한 오픈월드를 유니티로 만들고 싶습니다. 대략적으론 원신과 같은 3d mmorpg를 1인 개발로 만들고 싶습니다. 일단 다 만들 수 있다고 생각은 해요.근데 문제는 서버입니다. 이런 대규모 서버는.. 대체 어떤 서버를 사용하나요?AWS만 파면 되는걸까요? 유니티 멀티플레이 라는 게 있던데 그건 어떤지..아! 일단은 전세계가 아닌 '한국' 내에서만 서비스할 것입니다. 게임 자체의 퀄리티는 마인크래프트와 같은 크래프팅 게임이면서 폴리곤은 2 ~ 3배 더 많습니다.(일단 원신보다는 폴리곤이 더 적을 듯) 애초에 만드는게 가능한가요? 어떤 서버를 사용해야할까요? 선생님의 유니티 강의 전부 들으면 개발 가능할까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Get<Text>() null 반환
유니티 2022에서 계속 null을 반환하네요.30분동안 삽질한 결과 2019의 Text는 Legacy로 바꼇고최신버전에서는 TextMeshPro를 쓰므로Bind<TextMeshProUGUI>Get<TextMeshProUGUI>이렇게 해주어야 합니다.저 같은 사람있을까봐 글 남깁니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
커서 질문 드립니다.
그림이 좀 이상한데...여기서 저 칼의 (0.3, 0.1)위치가 클릭이 되는(충돌판정) 부분이라서 좌표를 맞춰주는 건가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
1:57까지 들었을때 아래와 같은 오류 문구가 뜨는데 어떻게 해야 할까요?
1:57까지 들었을때 아래와 같은 오류 문구가 뜨는데 어떻게 해야 할까요?*또는 -> 연산자는 포인터에 적용되어야 합니다.대입,호출,증가,감소 및 새 개체 식만 문으로 사용할 수 있습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
vector3에 new를 붙여줘야 하는 건가요?
transform.rotation = Quaternion.Euler(new Vector3(0.0f, _yAngle, 0.0f));에서는 Vector3인자에 new를 붙이는데transform.rotation = Quaternion.LookRotation(Vector3.forward);여기서는 new를 안붙이는 이유가 Vector3 클리스 내의 함수를 호출 할 때는 안붙이고, 함수를 호출하는게 아니라 좌표 자체를 넣어야 할 때는 new를 붙이는 거라고 구분해도 될까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
매니저 생성 관련 질문입니다
안녕하세요, 요즘 자주 강의들 듣고 있는 학생입니다. 제가 지금 collision을 하고 있는데 자꾸 신경이 쓰여서 질문을 남깁니다. 메니저를 생성하는데 init() 메서드를 실행해야 이제 매니저 오브잭트가 생성이 되잖아요? 근데 그 Player 스크립트를 컴포넌트에 넣지 않아도 이게 생성이 된단 말이죠? 왜 그런 건가요? init()이 어디서 실행이 되는지를 모르겠어요.. 스크립트만 있어도 거기 자체에서 알아서 실행이 되는건가요? 아니면 다른 스크립트에서 실행이 되서 생성이 되는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Managers 질문 정적 멤버 함수 접근
현재 유일한 Managers 클래스의 정적 멤버 변수로 static Managers s_instance; static Managers Instance { get { Init(); return s_instance; } } 이렇게 만들어 주셨는데 기본 접근 제한자 셋팅은 private이라 외부에서 접근 불가능 하고 static이라 데이터 영역에 올라가고 해당 클래스 내부에서만 접근이 가능하다. (제가 이해한 것이 맞나요?) 그런데 궁금한것이 다른클래스에서(외부에서) Managers.Instance로 접근이 불가능 한것은 이해가 됩니다. 그러면 강제로 Managers mg = new Managers();를 동적할당하여 객체를 만든 경우 mg.Instance로 접근을 할려고 하니 보호수준 때문에 접근이 불가능 하다는데 mg는 Managers의 객체로 Managers의 데이터를 가지고 있을 텐데 왜 접근이 불가능 한 것인가요? 정적 멤버 함수는 객체가 있든 없든 둘다 다 접근이 가능해야 하는 것 아닌가요?? (C++에서는 객체의 유무의 상관없이 정적 멤버 함수 호출이 가능하던데 그냥 C#에서는 객체를 만들어서 객체가 있어도 정적메버 함수(프로퍼티)에 접근이 불가능 한 것인가요?)
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
StartCoroutine("CoStopExplode", 2.0f); 이 부분이 실행이 안됩니다.
using System.Collections;using System.Collections.Generic;using UnityEngine; public class GameScene : BaseScene{ Coroutine co; protected override void Init() { base.Init(); SceneType = Define.Scene.Game; Managers.UI.ShowSceneUI<UI_Inven>(); co = StartCoroutine("ExplodeAfterSeconds", 4.0f); StartCoroutine("CoStopExplode", 2.0f); } IEnumerable CoStopExplode(float seconds) { Debug.Log("Stop Enter"); yield return new WaitForSeconds(seconds); Debug.Log("Stop Execute!!!"); if (co != null) { StopCoroutine(co); co = null; } } IEnumerator ExplodeAfterSeconds(float seconds) { Debug.Log("Explode Enter"); yield return new WaitForSeconds(seconds); Debug.Log("Explode Excute!!!"); co = null; } public override void Clear() { } } StartCoroutine("CoStopExplode", 2.0f); BreakPoint 를 여기에 잡아서 유니티에 연결해 실행해 보았지만 두번째 StratCoroutine은 실행이 되지 않고 Stop Enter 로그도 찍히지 않고 넘어가 버립니다. 그냥 Explode Excute가 찍혀버리는데 혹시 StaretCoroutine을 중복 사용할 수 없게 업데이트가 된 걸가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
오류 질문 드립니다.
브레이크 포인트가 안 걸려서 확인 해본 결과 파일을 로드 하는것 까지는 문제가 없어 보입니다. 다음을 실행하니 data에 null이 들어가서 오류 로그 를 확인해보니 The referenced script on this Behaviour is missing!이란 오류가 떠서 구글링을 해봤는데 스크립트가 누락됐다는 의미라고 합니다. 연결을 다 잘되어 있는거 같은데 스크립트 삭제로 인한 컴포넌트가 누락인 것 같다 그래서 https://heartgamer.wordpress.com/2015/02/23/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%82%AD%EC%A0%9C%EB%A1%9C-%EC%9D%B8%ED%95%B4-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EA%B0%80-missing-%EB%90%98%EB%8A%94-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0/ 여기에 있는대로 해봤는데도 문제를 못 찾겠습니다.