묻고 답해요
145만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
가상함수 오버라이드 시 함수호출순서
안녕하세요, BaseController의 Init() 함수 관련 질문드립니다. 예전 강의에 대한 질문이라 기억하실지 모르겠네요ㅠBaseController - CreatureController - MonsterController 상속관계가 있는 상황에서, BaseController 내 virtual Init() 가상함수를 만들고 Awake() 내부에 Init()을 호출하도록 코드를 작성하셨습니다.이때 CreatureController와 MonsterController 모두 Init()함수를 오버라이드한 상태입니다.이때 가상함수의 함수호출순서가 궁금해서 디버깅해봤는데, MonsterController 생성시 BaseController의 Awake()에 가장 먼저 진입하고, Init() 함수를 호출하는데, 이때 프로그램 다음 실행흐름이 BaseController내부에 virtual로 작성한 Init()함수가 아니라 MonsterController에 override한 Init()함수를 실행하는것이 이해가 안됩니다.BaseController내부 awake()에서 Init()을 호출하면 당연히 같은 클래스인 BaseController의 Init()을 호출하고 끝내야 할것으로 예상했는데, MonsterController의 Init()을 호출한다 게 잘 납득이 안됩니다.추가설명을 조금 해주실 수 있으실까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
VS Studio가 Unity에 연결되지 않습니다.
예전에는 잘 되던 Unity에 연결이 실패합니다.VS 버전 : VS Studio 2022유니티 버전 : 2021.3.5f1오류코드 : 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다 + ip주소 제가 구글링 이후 시도한 방법으로는Edit > Preferences > External Tools > External Script Editor에서 VS Studio 2022가 맞는지 확인Regenerate project files로 .csproj 재생성방화벽이 허용하는 앱에서 VS 2022 허용 체크하기방화벽 끄고 연결시도하기유니티와 VS를 껐다 다시 켜기이렇게 시도해 보았지만 모두 효과가 없었습니다ㅠㅠ
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
GameObject에 작성한 PosInfo, Stat 프로퍼티에 궁금한 게 생겼습니다.
선생님께서 작성하신 GameObject.cs 코드에 이런 부분이 있었습니다. public ObjectInfo Info { get; set; } = new ObjectInfo(); public PositionInfo PosInfo { get; private set; } = new PositionInfo(); public StatInfo Stat { get; private set; } = new StatInfo(); public GameObject() { // 링크를 이어준다 Info.PosInfo = PosInfo; Info.StatInfo = Stat; } 근데 위 생성자에서 저 '링크'를 이어줬는데 그 후로Info.PosInfo = new PositionInfo();라는 코드를 부주의로 실행시킨다면 링크가 깨지지 않나요?그 후로는 PosInfo.PosX = 0;같은 걸 실행해도 PosInfo와 Info.PoInfo는 별개이니 게임오브젝트에 적용이 안 될 것 같은데이렇게 이해하고 있는데 이게 맞는지 궁금합니다.그리고 아래처럼 고친다면 이 링크 깨짐 문제가 해결되는지 궁금합니다. public ObjectInfo Info { get; set; } = new ObjectInfo() { // 이걸 안 하고 쓰면 크래시가 난다 PosInfo = new PositionInfo(), StatInfo = new StatInfo() }; public PositionInfo PosInfo { get { return Info.PosInfo; } set { Info.PosInfo = value; } } public StatInfo Stat { get { return Info.StatInfo; } set { Info.StatInfo = value; } }
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
nullpointexception 에러가 뜹니다.
2시간동안 이리저리 따라해서 계속 널포인트가 뜹니다.PlayerController클레스의 여기에서 널포인트가 뜹니다. Managers.Input.KeyAction += OnKeyboard; 에러내용은 아래이고NullReferenceException: Object reference not set to an instance of an objectManagers.get_Input () (at Assets/Script/Managers/Managers.cs:11)PlayerController.Start () (at Assets/Script/PlayerController.cs:12)
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
거리 계산
개발중 궁금한 것이 하나 생겼습니다. 주위에 있는 특정 오브젝트 (ex 적)들을 찾을 때는 어떤식으로 개발하는게 좋을까요 ? OverlapSpher를 활용하는 방법Vector3.Distance 또는 magnitude를 활용하는 방법그리고 이 둘 중 나중에 서버를 추가한다고 할 때 어느 방법이 더 유용한가요 ?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
foreach문 에러에 대해 궁금합니다
foreach문은 T형식을 사용할 수 없다는데요..T에 GetEnumerator의 공개 인스턴스 또는 확장 정의가 없기 때문이라는데 어떡하면 좋죠?;;
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
다운캐스팅 에러?
안녕하세요 궁금한게 있습니다. 강의에서 Quest ScriptableObject를 Instantiate()로 복제를 하는데 상속받은 Scriptableobejct에 다운캐스팅을 하면 null이 되는데 왜그러는지 모르겠습니다. 예를들어 A 라는 scriptableobject가 있고 B : A 라는 상속받은 scriptableobject가 있을떄A a = new A(); 를 생성하고a.num = 10;을 한 상태에서 B b = Instantiate(a) as B; b.Id = 2;이렇게하면 b는 null이 됩니다. 제가 원하는건 b.num = 10; 이고 b.id = 2;인 데이터가 생성되는것인데 a는 null이 아닌데 다운캐스팅만 하면 null이 됩니다 ㅜㅜ
-
해결됨[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
장비의 옵션을 불러오는 부분에서 질문이 있습니다.
JSON 에서 데이터를 불러오고 장비 아이콘을 클릭 하였을때 장비의 아이콘과 옵션의 수치가 표시되는 부분이 궁금하여 뜯어보다가 질문이 생겼습니다.무기의 경우에는 HP보너스 스탯이 존재하지 않아도 JSON에서 0을 부여하고 추후에 UI_EquipmentinfoPopup에서 HP 스탯이 0인지 아닌지를 판별하여 장비의 아이콘과 옵션 수치를 표시하고 있는것을 확인 했어요.그런데 장비의 옵션 수치가 2개를 넘어서 더 여러가지가 되었을 경우에도 이런 방식으로 처리하는것이 효율적일까요? 아래 코드를 스위치문으로 변경하여 스탯에 맞는 아이콘과 옵션을 찾던가 JSON 구조 자체를 변경해야될것 같은데 어떤 방향으로 해야할지 잘 모르겠어서 선생님의 조언을 구합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Segment와 Span의 차이
강의를 보던 중 Segment나 Span 같은 것들이 나오던데 이 둘의 차이점은 뭔가요 ?
-
해결됨[유니티 3D] 실전! 생존게임 만들기 - Advanced
34:49 내용 생략 부분
34:49~ 36:40 부분은 흐름이 이상한 부분입니다. (뒤에있는 내용이 그대로 들어가있는 것으로 보아 편집미스로 보입니다.) 처음보시는분들은 34:49 까지 보신후 36:41로 건너 뛰십시오. 유튜브 발췌.
-
미해결[유니티 3D] 실전! 생존게임 만들기 - Advanced
고화질 서비스 안되나요..
720p는 눈이 너무 아파요
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
파트별 학습순서
안녕하세요, 학습순서에 대해서 질문드리려고 합니다.파트 3을 완강했고,게임서버4, 디비5, 웹서버6까지 강의를 구매해놓았습니다.저는 컴퓨터공학을 전공했지만 파트4의 내용들이 꽤 어려운 것 같아서, 파트4->파트6순으로 듣는게 맞는것인지 아니면 6->4 순으로 듣는것이 좀더 좋은지, 혹은 아예 독립적인 내용인지 여쭤보려 글 남깁니다.전부 다 수강한다는 전제하에 파트 별 학습순서를 추천해주실 수 있을까요:?감사합니다!
-
해결됨[실전 게임 코드 리뷰] 유니티 클리커 게임
함수호출 순서관련해서 질문있습니다.
[실전 게임 코드 리뷰] 개미회사 소스를 보면서 함수호출 관련해서 궁금점이 생겼습니다.public class UI_TitlePopup : UI_Popup { //생략 void OnClickStartButton() { Managers.UI.ShowPopupUI<UI_ConfirmPopup>().SetInfo(() => { Managers.Game.Init(); Managers.Game.SaveGame(); Managers.UI.ClosePopupUI(this); // UI_TitlePopup Managers.UI.ShowPopupUI<UI_NamePopup>(); }, Managers.GetText(Define.DataResetConfirm)); } //생략 } 위 코드에서 Managers.UI.ShowPopupUI<UI_ConfirmPopup>().SetInfo(() 이 부분에서 Managers.UI.ShowPopupUI 이 코드는 팝업을 인스턴스화 시켜서 그 인스턴스의 .SetInfo 함수를 호출하는데, SetInfo 함수를 호출했을 때, 생성된 UI_ConfirmPopup의 Start 함수는 호출이 된 상태일까요? 아니면 객체만 생성되고 Start 함수는 호출되지 않았지만 SetInfo 함수를 호출할 수 있는 상태인 건가요? 디버깅 모드를 보면 Start 함수는 호출이 안됐는데 SetInfo 로 초기화가 되고 있는 것 같습니다. 일반적으로 Object.Instantiate() 와 같은 함수로 객체를 생성하면 생성하자마자 Start 함수가 호출되고 함수 내에 초기화된 프로퍼티를 쓸 수 있는지가 알고 싶습니다. 그 이유는 혼자 게임을 만들다 보면, 위와 비슷하게 어떤 객체 내부에서 자식객체를 생성하고 초기화 해줄 때가 있는데, Start 함수가 호출되어서 프로퍼티가 전부 초기화된 줄 알고 접근하면 null 에러가 뜰 때가 있어서 질문드립니다.
-
미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임제작
섹션2: 충돌처리
다음과 같이 레이어 설정을 했는데도 왜 충돌시 사라지는 걸까요? 1.Project Settings 각각 오브젝트 레이어 설정
-
미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임제작
low resolution aspect ratios 체크박스 비활성화
low resolution aspect ratios 체크박스가 비활성화되어 해제할 수가 없습니다. 어떻게 해야 하나요?유니티 2022.3.1f1 버전 사용중입니다.
-
미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임제작
섹션2: 충돌처리
Square 오브젝트에 ColCheck1함수(print 충돌/접촉/분리)와 ColCheck2 함수(상대방 오브젝트를 사라지게함)를 Inspector창에 같이 넣었을 때, ColCheck1함수를 체크 해제 한다고 해도 ColCheck2 함수가 실행되지 않는 이유를 알 수 있을까요?꼭, ColCheck1함수를 Inspector창에서 remove 해야만 ColCheck2 함수가 실행되더라고요!혹시 이것도 충돌 스크립트의 비활성화 문제와 같이 RigidBody 때문인걸까요?
-
미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임제작
섹션2: 에너미공격
다음 코드에서 IEnumerator Shoot(float delta){ while(true){ GameObject bul = Instantiate(prefab,transform.position,transform.rotation); Destroy(bul,3); float delay = Random.Range(1f,delta); yield return new WaitForSeconds(delay); } } Instantiate(prefab,transform.position,transform.rotation);이 부분의 현재 위치와 현재 방향은 프리팹의 현재 위치인가요 아니면 이 스크립트를 적용한 오브젝트의 현재 위치인가요?저는 오브젝트(에너미)에서 프리팹(총알)이 발사되어야하기 때문에 후자로 생각했습니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
Npc 퀘스트 탐색
안녕하세요 각 NPC가 퀘스트 목록들이 있는 퀘스트 그룹을 가지고있는데 이 퀘스트가 가능한지 조건 검사를 어떻게 해야할지 고민입니다.제가 생각한건 각 NPC가 퀘스트 목록들이 있는 퀘스트 그룹 변수를 가지고있고 0.2초마다 각 퀘스트 목록에 condition을 체크해서 발생 가능한 퀘스트면 NPC가 퀘스트를 주는거를 생각했는데 문득 이런 방식이 NPC도 많고 검사할 퀘스트도 많다보니까 성능에 영향이 갈거같은 생각이 들어서 혹이 보통 어떤식으로 NPC를 활용해서 퀘스트를 주는지 궁금합니다. ㅜㅜ
-
미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임제작
섹션2: 에너미이동
랜덤하게 에너미이동을 진행할 때, speed를 높이면 씬뷰에서 카메라 범위를 벗어나게 되어서 기존 코드에 다음 코드를 추가하였습니다. 그런데도 씬뷰를 벗어나게 되더라고요. 업데이트 부분에서 현재 위치의 x,y가 주어진 범위를 벗어나면 코루트를 시작하는 함수를 호출하여 다시 목표 방향을 설정한건데 왜 벗어나는 걸까요?if(transform.position.x < (-hs.x)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.x > (hs.x)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.y < (-hs.y)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.y > (hs.y)){ StartCoroutine(ChangeDir(3f)); }using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyMove1 : MonoBehaviour { public float speed = 3; Vector2 hs; //half screen: 원점 초기화 Vector2 dir; //direction: 원점 초기화 // Start is called before the first frame update void Start() { hs.x = Camera.main.orthographicSize; //카메라 위쪽에서 아래쪽 바라보는 가로의 길이 hs.y = Camera.main.aspect * hs.x; //가로세로 비율 * 가로 길이 = 세로 길이 StartCoroutine(ChangeDir(3f)); } // Update is called once per frame void Update() { Vector2 delta = dir * speed * Time.deltaTime; transform.Translate(delta); //자동으로 z가 0으로 됨. if(transform.position.x < (-hs.x)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.x > (hs.x)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.y < (-hs.y)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.y > (hs.x)){ StartCoroutine(ChangeDir(3f)); } } IEnumerator ChangeDir(float delta){ Vector2 goal; while(true){ goal.x = Random.Range(-hs.x,hs.x); //전체 가로 길이 goal.y = Random.Range(-hs.y,hs.y); //전체 세로 길이 dir = goal - (Vector2) transform.position; //이동방향 = 목표지점 - 현재위치(Vector3) dir.Normalize(); float delay = Random.Range(1f,delta); yield return new WaitForSeconds(delta); } } }
-
미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임제작
섹션2: 에너미 이동2
void Update() { Vector2 delta = dir * speed * Time.deltaTime; }이 부분에서 왜 dir을 곱하는 지 이해가 되지 않습니다!그 전에는 초당 얼만큼 가기 위해 speed를 곱했는데 dir은 여기서 무엇을 뜻하는 걸까요?