inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

flyoutpage가 view추가에 안뜹니다.

미해결

C# 입문부터 Xamarin Forms(자마린 폼즈) + Maui(마우이) 안드로이드, 윈도우 앱(UWP) 동시에 만들기

2019 사용하고있구 자마린폼즈도 다운되어있는 상태인데 왜 안뜨는지 모르겠네요..

  • C#
  • gui
  • Xamarin
chkim 댓글 1 좋아요 0 조회수 430

오류 CS0246 'Knight' 형식 또는 네임스페이스 이름을 찾을 수 없습니다.

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CSharp { enum Playertype { None=0, Knight=1, Archer=2, Mage=3 } class Player:Creature { protected Playertype type = Playertype.None; protected int hp = 0; protected int attack = 0; protected Player(Playertype type):base(CreatureType.Player) { this.type = type; } public void SetInfo(int hp, int attack) { this.hp = hp; this.attack = attack; } public Playertype GetPlayertype() { return type; } public int GetHp() { return hp; } public int GetAttack() { return attack; } public bool IsDead() { return hp <= 0; } public void OnDamaged(int damage) { hp -= damage; if (hp <= 0) { hp = 0; } } class Knight : Player { public Knight() : base(Playertype.Knight) { SetInfo(100, 10); } } class Archer : Player { public Archer() : base(Playertype.Archer) { SetInfo(70, 15); } } class Mage : Player { public Mage() : base(Playertype.Mage) { SetInfo(60, 20); } } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CSharp { enum Mode { None, Lobby, Gild, Biliage } ; internal class Game { Player player = null; Monster monster = null; Mode mode = Mode.Lobby; public void Process() { switch(mode) { case Mode.Lobby: ProcessLobby(); break; } } public void ProcessLobby() { while (true) { Console.WriteLine("직업을 선택하세요"); Console.WriteLine("[1]검사"); Console.WriteLine("[2]궁"); Console.WriteLine("[3]마법사"); string input = Console.ReadLine(); switch (input) { case "1": player = new Knight(); break; } } } } } 이렇게 있을 때 두번째 파일의 player = new Knight(); 에서 심각도 오류 CS0246 'Knight' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. 라는 오류가 뜹니다 아무리 찾아봐도 뭐가 문젠지 모르겠어요ㅠㅠ 처음엔 오류의 원인을 찾는게 원래 이렇게 어려운건가요? 찾아볼 때 그 과정에서도 모르는 말이 너무 많아서 하나하나 찾아가다보면 이렇게 오래 걸릴 단계가 아닌 것 같은데 시간이 많이 지체되고 결국 잘못된 방향으로 찾아서 해결책도 찾지 못할 때가 많아요. 처음 공부할 때는 너무 막히면 질문하고 일단 넘어가고 나중에 돌아오는게 맞을까요? 아니면 끝까지 문제를 파악하고 넘어가야할까요?

  • C#
몽몽이 바보다옹~ 댓글 2 좋아요 0 조회수 799

질문있습니다@!!

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

안녕하세요 강의를 듣다 enum으로 하나씩 넣는게 제 개인적인 생각으로는 귀찮다라는 생각을 받았어요 그래서 이걸 오브젝트의 이름만 받아서 사용할 수 있게 해보자 해서 짜봤는데 강의에서 소개해주신 enum으로 관리하는 것과 제 코드와 비교해서 enum으로 관리할 때의 장점이 있을까요? 그리고 아래 코드에서 개선할만한 부분도 있다면 알려주시면 감사하겠습니다 private Dictionary<Type, UnityEngine.Object[]> _componentDictionary = new Dictionary<Type, UnityEngine.Object[]>(); private void Start() { Bind<Button>(); Bind<TextMeshProUGUI>(); Bind<Image>(); Bind<GameObject>(); Debug.Log(Get<GameObject>("ddd").transform.position.x); } void Bind<T>() where T : UnityEngine.Object { //필터 해줄 타입 추가 if (typeof(T) != typeof(Button) && typeof(T) != typeof(TextMeshProUGUI) && typeof(T) != typeof(Image) && typeof(T) != typeof(GameObject)) return; if (typeof(T) == typeof(GameObject)) { Transform[] transforms = Util.FindChild<Transform>(transform, true); GameObject[] gameObjects = new GameObject[transforms.Length]; for (int i = 0; i < transforms.Length; i++) { gameObjects[i] = transforms[i].gameObject; } _componentDictionary.Add(typeof(GameObject), gameObjects); return; } T[] objects = Util.FindChild<T>(transform, true); _componentDictionary.Add(typeof(T), objects); } T Get<T>(string name) where T : UnityEngine.Object { UnityEngine.Object[] objects = null; if (_componentDictionary.TryGetValue(typeof(T), out objects) == false) return null; foreach (UnityEngine.Object obj in objects) { if (obj.name == name) return obj as T; } return null; } public static T[] FindChild<T>(UnityEngine.Transform transform, bool recursive = false) where T : UnityEngine.Object { if (transform == null) return null; if (recursive == false) { T[] dd = new T[transform.childCount]; for (int i = 0; i < transform.childCount; i++) { dd[i] = transform.GetChild(i).GetComponent<T>(); } return dd; } else { return transform.GetComponentsInChildren<T>(); } }

  • C#
  • unity
toyboy0113 댓글 1 좋아요 0 조회수 403

FindChild 사용시 원치 않은 것에 대한 컴포넌트 반환

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

안녕하세요 Util에서 FindChild를 정의하는 부분의 recursive가 true일 때 최상위 계층 gameobject 안에 이름과 컴포넌트 타입은 같지만 계층이 다른? gameobject가 있다면 ex) 최상위 부모 ㄴTest(name) - Text(컴포넌트) (1) ㄴTest2 ㄴㄴTest(name) - Text(컴포넌트) (2) 내가 찾고자 하는 오브젝트의 컴포넌트는 예제에서의 2번인데 GetComponentsInChilderen에서 1번이 반환 될 수 있지 않나요? 만약 그렇다면 해당 구조를 사용할때의 제약조건이 같은 이름이면서 같은 컴포넌트를 갖는 오브젝트는 사용할 수 없다 정도일까요?(물론 같은이름이면서 같은 컴포넌트를 갖어야만하는 경우는 없을테지만요)

  • C#
  • unity
toyboy0113 댓글 1 좋아요 0 조회수 469

VS 툴팁 이전/다음 단축키 질문드립니다.

해결됨

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

루키스님 안녕하세요? VS 단축키가 궁금해서 질문 올립니다. 강의 10:56초 툴팁 확인할 때 다음/이전 단축키가 무엇인가요? tab은 될때 있고 안될 때 있는 것 같아서요 위아래 화살표는 자동완성 따라가서 잘 안되는 것 같아요.

  • C#
  • unity
  • 네트워크
mhyim 댓글 1 좋아요 0 조회수 486

인수 전달 관련 질문 있습니다!!

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

안녕하세요 선생님 강의 잘 듣고 있습니다! 강의 초반에 bool[] visited를 클래스 내에서 필드로 선언할 수도 있지만, SearchAll 메서드 내에서 선언해서 DFS에 인수로 넘겨줄 수도 있다고 하셨는데요 이 때 ref 키워드를 쓰지 않았는데도 visited가 참조로 넘어가는 이유가 배열 자체가 참조 형식이기 때문이 맞나욤? 만약 맞다면 배열이 아니라 int같은 값 형식을 메서드 내에서 선언해서 다른 메서드에 참조로 전달하려는 경우에는 ref를 써야하는 게 맞을까요?

  • C#
에옴 댓글 1 좋아요 0 조회수 256

랜덤메타(Sleep(1), Sleep(0), Yield())는 컨텍스트 스위칭이 없나요?

해결됨

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

루키스님 안녕하세요? SpinLock, sleep/Yield, event, Mutex까지 잘 들었습니다. 제가 이해하기로는 SpinLock은 계속 돌기 때문에 컨텍스트 스위칭이 없어 (여기서의 예에서만) 빠르게 _num = 0 을 출력하고, event와 Mutex는 커널 단까지 컨텍스트 스위칭이 일어나 반복문이 조금만 많아도 _num = 0을 출력하는데 시간이 걸리는걸 볼 수 있었습니다. 그런데 궁금한건, 랜덤메타인 Sleep와 Yield도 쉬는 동안 커널 단까지 컨텍스트 스위칭이 일어날 것 같은데(쉬는 동안 다른 스레드에 메모리 <-> 레지스터 가 왔다 갔다 하므로) 여기서의 예에서는 _num이 빠르게 출력 되었습니다. 그래서 빠르게 출력된 이유가 랜덤메타는 컨텍스트 스위칭이 없어서인지, 아니면 컨텍스트 스위칭이 일어나는게 맞지만 여기서의 예에서만(간단한 예제이므로) 빠르게 _num= 0이 출력된 건지 궁금합니다.

  • C#
  • unity
  • 네트워크
mhyim 댓글 1 좋아요 0 조회수 413

저는 왜 강의랑 다르게 될까요?

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

각 연결선에 has exit time도 모두 체크되어있는데 RUN의 Transitions 순서에는 WAIT으로 애니메이션이 실행되어야하는데 왜 저는 JUMP가 실행될까요?

  • C#
  • unity
ᄏᄏᄏᄏ 댓글 1 좋아요 0 조회수 480

질문 물어본거 말고 다른거에 대한 답변이 AI로 달리는데...

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

유니티에서 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는 보지도 않고 다른 답변을 답니다) 어떤식으로 질문해야 제대로된 답변을 받을수 있나요?

  • C#
  • unity
요가인 댓글 1 좋아요 0 조회수 490

ForceRebuildLayoutImmediate 함수가 실행되지 않는 것 같습니다.

해결됨

따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 02

UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(nodeSpawner.GetComponent<RectTransform>()); 이 라인이 제대로 실행되어야 Node들의 localPosition을 갱신되고 업데이트 할 수 있는 데, 이 라인이 실행이 제대로 되지 않는건지 Node들의 localPosition이 항상 (0, 0)으로 나옵니다. 디버깅, 2.8f1 버전 혹은 그 상위버전으로도 시도해보았지만 실행되지 않습니다. ): 혹시 제가 놓친 부분이 있나 다른 스크립트도 살펴보았는데, 분명 고박사님 스크립트와 크게 다른부분은 없었습니다. 예상되는 문제점이라던가 제가 놓치고 있는 부분이 있을까요?

  • C#
  • unity
제빈 댓글 1 좋아요 0 조회수 585

State Machine #2 에 대해서 질문드립니다.

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

anim.SetFloat("speed", _speed); anim.SetFloat("speed", 0); 이 두 가지를 통해서 애니메이션의 파라미터값을 변경하는 것 까지는 완료했습니다. 그런데 속도가 10이 되어도 웨이트의 애니메이션이 다 완료가 되어야 런으로 넘어갑니다. 파라미터가 바뀌면 바로 애니메이션도 바뀌게 하고 싶은데 어떤 옵션을 건드려야 할까요? <speed가 10이 되어도 WAIT가 재생되고, 계속이면 WAIT가 끝난 후에 RUN으로 넘어갑니다.>

  • C#
  • unity
rhkdwh2 댓글 1 좋아요 0 조회수 358

질문있습니다

미해결

[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#
  • unity
요가인 댓글 1 좋아요 0 조회수 319

비주얼스튜디오 한글 입력 오류

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

안녕하세요, 문의 드립니다. 비주얼스튜디오에서 한글 입력 후 방향키를 누르면 아래 첨부한 사진과 같이 입력한 한글이 GS RS ...등등의 특수 문자?로 바뀌는데요. 해당 프로그램에서만 이런 현상이 생기네요. 혹 해결 방법을 아신다면 부탁드리겠습니다 ...ㅠㅠㅠㅠ

  • C#
babybird 댓글 1 좋아요 0 조회수 1628

질문 있습니다

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

TextMeshProUGUI 변수를 추가해서 에디터에서 텍스트를 드래그 드롭으로 할당해주었는데 버튼을 누를때 계속해서 NullExecption 에러가 나서 확인해보니 text 변수에 아무것도 가져와지지가 않습니다. 왜 이러는걸까요 ㅠㅠ

  • C#
  • unity
조녁쓰 댓글 1 좋아요 0 조회수 387

자마린 강의 시작 프로젝트 파일 형식 질문

미해결

C# 입문부터 Xamarin Forms(자마린 폼즈) + Maui(마우이) 안드로이드, 윈도우 앱(UWP) 동시에 만들기

비쥬얼 스튜디오 2022에서는 프로젝트를 생성할때 어떤걸로 생성을 해야되는건가요 ㅠ 영상에서 보이는 안드,ios 프로젝트가 없고 다른 이름들의 프로젝트들 형식만 있씁니다ㅠ

  • C#
  • gui
  • Xamarin
ks 댓글 2 좋아요 0 조회수 456

구글 프로토콜 버퍼 사용 이유

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

기존의 PDL.xml대신 구글 프로토콜 버퍼를 사용하는 이유가 Write, Read 함수의 최적화: 기존에 Write, Read를 사용하면서 역직렬화, 직렬화 하실 때 비트컨버터를 사용하는 방법 말고도 더 최적화 할 수 있다고 해주셨는데 관련 문서를 찾아보니 엄청 복잡한 설계를 통해 최적화가 잘 돼 있다고 봤습니다. 현업에서의 업무 적응 능력: 대부분 프로토콜 버퍼 혹은 플랫 버퍼를 쓰기 때문에 나중에 혹시나 사용하는 프로젝트를 만나면 적응이 빠르다. 데이터의 직관성: 제가 자주 사용해서 그런진 모르겠는데 xml과 달리 패킷 설계가 직관적이라 쉬운편 클라와 서버에 쓰일 공통 데이터 선언: 클라와 서버에서 쓰일 패킷 관련 변수를 매번 복붙안해도됨(정확하지 않음, 패킷 자동화 부분에서 xml에서 프로토콜버퍼로 바뀌면서 자동으로 수행되는 부분인지 프로토콜 버퍼 자체 기능인지는 모르겠으나 using protocol buffer를 사용하면 패킷 변수를 사용할 수 있는 것을 보니 자체 기능 같기도하고..?) 샌드 버퍼와 리시브 버퍼의 최적화: 1번의 현상과 마찬가지로 구글 프로토콜 버퍼를 사용시 강의에서 자체 제작하신 샌드 버퍼와 리시브 버퍼는 사용하지 않고 조금 더 최적화된 프로토콜 버퍼의 것을 사용한다. 이런 이유로 보이는데 루키스님은 어떤 매력이 있으신거 같나요?

  • C#
  • unity
자르트 댓글 1 좋아요 0 조회수 760

특정 위치에서 player가 Monster의 바로 옆을 click하면 버그가 발생합니다.

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

player가 현 위치에서 해당 지점을 이동하고자 클릭하면(마우스는 Monster가 아닌 Ground를 가리켜서 cursor icon은 HandIcon상태) 캐릭터가 monster앞에서 movespeed가 느려지고 해당 지점(Ground)으로 가는게 아니라 몬스터의 position에 가면서도 monster를 공격하는게 아닌, 몬스터에게 이동만 하는 상태가 나타나는 버그가 발생합니다. (공격을 하지 않고 이동만 하는 모습) 이를 해결해보고자 여러차례 시도해보다가 결국 실패해서 질문으로 남깁니다. -공격#2

  • C#
  • unity
attach 댓글 1 좋아요 0 조회수 439

참고 서적

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

면접 가기전에 서버 강의를 다시 보고 있는데 자동화 방식에 대한 설계 같은 부분이 정말 대단하다고 느껴지네요... 추후에 프로토콜 버퍼로 바꾸긴 하지만 이렇게 자동화해서 PDL에 패킷만 추가해서 EXE 실행 후 서버, 클라 세션에 각각 코드가 들어가는 자동화가 엄청 편한거였네요 핵심은 'PDL에 원하는 패킷 이름과 자료형만 선언해주면 내가 원하는 패킷을 만들 수 있다' 인데 자동화의 저력 정말 감탄했습니다 혹시 루키스님이 참고한 서적 같은 것도 알 수 있을까요? 아니면 회사를 다니시면서 분석하시면서 배운 코드신가요

  • C#
  • unity
  • 네트워크
자르트 댓글 2 좋아요 0 조회수 583

Navemesh Display

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

유니티에서 bake를 해도 해당영역이 어디인지 보이지가 않고 (NavmeshDisplay가 뜨지 않습니다) 검색을 해도 도저히 못찾겠습니다...

  • C#
  • unity
요가인 댓글 1 좋아요 0 조회수 864

인기 태그

인프런 TOP Writers

주간 인기글