묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
첫 강의 manager 가 재생이 안됩니다.
첫 강의 manager 가 재생이 안됩니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
T2는 어떻게된걸까요?
T2가 지금 멈춰있는것같은데..어떻게 진행 되는걸까요?ㅜㅜ
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
9주차 강의 'Stage 분할' 이 로딩만 뜨고 재생되지 않습니다
전후 강의 동영상은 정상적으로 재생이 되는데, 이 강의는 로딩만 계속되고 화면이 나오지 않네요. 혹시 제가 뭐 세팅을 변경해야 하는 것이 있으면 알려주시기 바랍니다.맥/윈도우 크롬 브라우저를 이용해서 수강 중입니다.가능하다면 빠른 해결이 되었으면 합니다.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
Animator오류
안녕하세요 똑같이 다 수정했는데 공격 애니가 실하지않고 사진처럼 저 오류 가나옵니다 뭐가 잘못되고있는건가요 선생님
-
미해결ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
ASP.NET Core MVC를 비동기로 처리하는 이유가 무엇일까요?
웹폼도 써보고, 다른 언어도 해봤는데비동기를 쓰지는 않았었는데요.강의하는 내용보면, 대부분 비동기로 처리하더라고요. 그런데 만약 게시판 글쓰기 같은 경우 리스트나 조회페이지로이동을 시키는데요.비동기로 처리하면 나의 글이 저장이 안된 상태에서도이동이 가능한데, 그러면 내 글이 없는 상태로 나타나게 될텐데요. 혹시 어떤 이유때문에 비동기로 처리하는 건지아니면 단순히 사용법 알려주시려고 그렇게 한건지 궁금합니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
강의 완료 시기
강의 완료시기가 언제쯤인지 알 수 있을까요?
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
네트워크 오브젝트 설정
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요 안녕하세요 선생님 Hero에게 network Object 넣었을때 hash값이 저는 0이고 선생님은 다르네요 그래서 Default network Prefabs 에 자동으로 추가되지않아서플러스 버튼 눌러서 추가하면 정상 작동되긴하나 선생님이랑 방법이 틀려서 찝찝합니다 뭐를 실수하고있는건가요
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
싱글턴 적용된 클래스가 현재 씬을 재로드하면 이상해요
싱글턴이 적용된 클래스는 사라지지 않고또 한 개만 존재해야 할 텐데가끔식 씬을 재로드시 한 개가 더 생깁니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
스핀락이 올바르게 작동하지 않는 것 같습니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ServerCore { class SpinLock { volatile int _locked = 0; // true: 잠겨있음, false: 잠겨있지 않음 public void Acquire() { while(true) { ////Interlocked.Exchange의 반환값은 원래값이다. //int original = Interlocked.Exchange(ref _locked, 1); ////original == 0이면 잠금 성공, original == 1이면 잠금 실패 //if (original == 0) //{ // //내꺼 // break; //} //CAS (Compare-And-Swap) 함수라고 한다. int expected = 0; int desired = 1; if(Interlocked.CompareExchange(ref _locked, desired, expected) == expected) { break; } } } public void Release() { //잠김을 푼다. _locked = 0; } } class Program { static int _num = 0; static SpinLock _lock = new SpinLock(); static void Thread_1() { for (int i = 0; i < 1000000; i++) { _lock.Acquire(); _num++; _lock.Release(); } } static void Thread_2() { for (int i = 0; i < 1000000; i++) { _lock.Acquire(); _num--; _lock.Release(); } } static void Main(string[] args) { Task task = new Task(Thread_1); Task task2 = new Task(Thread_2); task.Start(); task2.Start(); task.Wait(); Console.WriteLine(_num); } } } 다음과 같이 작업 후 디버깅해보았는데 결과값이 때로는 맛이 간 값을 출력합니다.제시된 코드와 같은 것 같은데 이유를 모르겠습니다!그리고 다음과 같은 상황일 때 어떻게 브레이크포인트를 잡아서 버그수정을 시도해야 할 지 감이 안잡힙니다ㅠㅠ
-
해결됨[C#/.NET 8.0]어서와, Blazor Server는 처음이지?
Radzen 설치 관련해서 오류가납니다.
위코드가 app.razor 이고위와같이 오류가나는데 어디가 잘못됬는지 모르겠어요https://blazor.radzen.com/get-started?theme=material3
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
Instantiate 관련 질문 드립니다
GameObject Instantiate(string key, Transform parent = null, bool pooling = false) 함수에서 GameObject prefab = Load<GameObject>($"{key}"); 이 부분에 Load<GameObject>(key)가 계속 null이 반환 되는데 왜 그런걸까요 나머진 전부 똑같이 했고 어드레서블에 넣은 프리팹만 제가 아무 오브젝트나 이름만 바꿔서 프리팹으로 만든 뒤에 넣은거 말곤 차이가 없는데 이게 차이가 있는걸까요
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
NetworkVariable<>, ClientNetworkTransform 사용 질문
강의를 보던 중 궁금한 점이 생겼습니다. 몬스터의 체력변경을 수동으로 ServerRpc,ClientRpc를 사용했는데, NetworkVariable<>을 사용하지 않으신 이유가 있으실까요? NetworkVariable<int> 같은 형식으로 해당 변수를 선언하면 그 변수가 알아서 다른 클라이언트에게 전파되어 동기화 된다고 배웠습니다. ugs 패키지를 임포트하고나면 오브젝트에 ClientNetworkTransform 컴포넌트를 부착할 수 있더라구요. 이걸 추가하면 그 오브젝트의 TRS(이동,회전,크기) 모두 자동으로 동기화를 해주는 듯 하던데 이것을 사용하지 않으신 이유가 있으실까요? 처음 배우는 입장에서 동기화를 신경쓰기가 제일 까다로운 부분인데 이 컴포넌트를 사용하면 적어도 트랜스폼에 한정해서는 동기화에서 도움을 받을 수 있는 것처럼 보입니다.
-
해결됨[유니티6] 따라하면서 배우는 고박사의 2D 플랫포머 게임 제작
02-05 레벨시작(마지막 강의)에서 SelectLevelController오브젝트의 SelectLevelController 컴포넌트조작
SelectLevelController 컴포넌트를 우클릭해서, Reset Data 하는 것의 의미가 무엇이죠?해당 스크립트를 다시 로드하는 건가요?무슨 원리인지 궁금해요.추가로, 그렇다면 만약 앞서처럼 레벨구성을 바꾸게 되면,항상 이렇게 해주어야 각각의 레벨들이 제대로 반영되게 되는 거죠?
-
해결됨새싹부터 시작하는 Unity 게임 개발
Game화면에서 캐릭터가 끊기듯 움직입니다.
섹션4 3D캐릭터 이동 구현까지 진행헸습니다. Scene에서는 아무 문제가 없는데 Game화면에서는 캐릭터가 끊기면서 움직입니다 카메라 문제 같은데 정확한 이유를 모르겠네요 ㅠ 영상에 있는 Lerp 까지 그대로 따라했습니다
-
해결됨[유니티6] 따라하면서 배우는 고박사의 2D 플랫포머 게임 제작
간혹 벽의 콜라이더를 뚫고 빠지는 경우
위에서 아래로 내려올 때, 잘못하면 옆의 벽으로 들어가서 떨어지고, 그 이후로 못 빠져 나옵니다. 그래서 콜라이더가 느슨한가 봐도 그렇지도 않더라구요.그리고 우측에 회전칼날 근처의 벽도 그런 적이 있어요..이런 현상은 왜 일어나죠?
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
안녕하세요 초반 프로젝트 생성 버전 관련해서 질문 드립니다.(2022.3.6f1)
https://unity.com/kr/releases/editor/archive안녕하세요 강사님 ! 현재 유니티 공식 홈페이지에서 지원하는 유니티 LTS의 경우 2022.3.51이 최신으로 나와있고 이후에는 2023으로 넘어가는것 같습니다. 구글링을 통해 찾아보니 유니티 공식 홈페이지가 아니라 다른 깃허브나 외부 링크를 통해 다운로드를 받을 수는 있지만 안정성 면에서 공식 홈페이지를 통해 다운로드를 하는 것이 좋아보여서 질문을 남깁니다. 혹시 2022.3.6f1 버전을 공식 홈페이지가 아니라 다른 경로로 설치를 해야 할까요? 아니면 최신 2022인 3.5를 통해 프로젝트를 진행해도 괜찮을까요??
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
스테이지 반복이 진행될 수록 몬스터 스케일이 작아집니다.
현재 스테이트패턴 Dead 까지 수강한 상태이구요,스테이지의 반복이 진행될수록, 몬스터 스케일이 불규칙적으로 작아집니다.처음에는, 몬스터 스케일이 불규칙적으로 작아지는것에 있어서 몬스터가 스폰되는 중에 캐릭터가 100%까지 처치를 완료하여, SpawnStart 코루틴메서드를 통해 LocalScale이 커지고 있는 도중, Return 메서드가 호출되어 비활성화가 된듯한 느낌을 받아(게임오브젝트가 비활성화가 되면 코루틴메서드가 중단되지않나요?) 확인해보았으나, 정확하게 원인을 파악하지 못했습니다 ㅠ 그리고 몬스터가 스폰되지 않았음에도 허공에 어택모션을 계속 취하는 버그도 있습니다.분명 풀링에는 전부 비활성화인데, 타겟이 있는것처럼 허공에 공격모션을 계속 취하다가, 몬스터가 실제로 스폰되면 추적하여 공격을 실행합니다. 제가 혹시 코드에 잘못된부분이 있다면 리뷰 한번만 부탁드립니다. ㅠ 추가적으로 필요하신 코드나, 직접적인 버그영상이 필요하시면 댓글한번만 남겨주시면 동영상을 개인메일이나, 유튜브 링크로 첨부해서 보여드리겠습니다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Spawner : MonoBehaviour { public int M_Count; // 몬스터의 수 public float M_SpawnTime; // 몇 초마다 스폰이 될 것인지 결정. // 1. 몬스터는 여러마리가 몇 초 마다 수시로 여러번 스폰 되어야 한다. //Spawner 에 손쉽게 접근하기 위해, static으로 설계 public static List<Monster> m_monsters = new List<Monster>(); public static List<Player> m_players = new List<Player>(); private Coroutine coroutine; private void Start() { Base_Manager.Stage.M_PlayEvent += OnPlay; Base_Manager.Stage.M_BossEvent += OnBoss; } public void OnPlay() { coroutine = StartCoroutine(SpawnCoroutine()); } public void OnBoss() { if(coroutine != null) { StopCoroutine(coroutine); } for(int i = 0; i<m_monsters.Count; i++) { Base_Manager.Pool.m_pool_Dictionary["Monster"].Return(m_monsters[i].gameObject); //Destroy(m_monsters[i].gameObject); } m_monsters.Clear(); StartCoroutine(BossSetCoroutine()); } IEnumerator BossSetCoroutine() { yield return new WaitForSeconds(2.0f); var monster = Instantiate(Resources.Load<Monster>("Boss"), Vector3.zero, Quaternion.Euler(0, 180, 0)); // 보스 생성 monster.Init(); Vector3 Pos = monster.transform.position; // 같은 변수를 사용할 때는, 한 변수로 묶어서 사용하면 메모리 절약이 됨. (중복계산방지) // 일정 소환거리 내부에 플레이어가 존재하면, 보스 소환 시, 넉백을 합니다. for(int i = 0; i<m_players.Count; i++) { if(Vector3.Distance(Pos, m_players[i].transform.position) <= 3.0f) { m_players[i].transform.LookAt(monster.transform.position); m_players[i].Knock_Back(); } } yield return new WaitForSeconds(1.5f); m_monsters.Add(monster); Base_Manager.Stage.State_Change(Stage_State.BossPlay); } //Random.insideUnitSphere = Vector3(x,y,z) //Random.insideUnitCircle = Vector3(x,y) IEnumerator SpawnCoroutine() { Vector3 pos; for(int i = 0; i < M_Count; i++) { pos = Vector3.zero + Random.insideUnitSphere * 5.0f; pos.y = 0.0f; Vector3 returnPos = Vector3.zero; while (Vector3.Distance(pos, Vector3.zero) <= 3.0f) { pos = Vector3.zero + Random.insideUnitSphere * 5.0f; pos.y = 0.0f; } //몬스터 스폰 var go = Base_Manager.Pool.Pooling_OBJ("Monster").Get((value) => { // 풀링이 생성될때의 기능을 구현한다. value.GetComponent<Monster>().Init(); value.transform.position = pos; value.transform.LookAt(Vector3.zero); m_monsters.Add(value.GetComponent<Monster>()); }); } yield return new WaitForSeconds(M_SpawnTime); coroutine = StartCoroutine(SpawnCoroutine()); } } using System.Collections; using System.Collections.Generic; using UnityEngine; public class Monster : Character { /// <summary> /// 몬스터가 스폰이 될 때, 스케일의 크기변화를 줍니다. /// </summary> /// <returns></returns> IEnumerator Spawn_Start() { float current = 0.0f; float percent = 0.0f; float start = 0.0f; float end = transform.localScale.x; // 몬스터의 로컬스케일 Debug.Log($"몬스터의 로컬스케일 변화 :{transform.localScale.x}"); while(percent < 1) { current += Time.deltaTime; percent = current / 0.2f; float LerpPos = Mathf.Lerp(start,end, percent); // 선형보간 (시작값,끝값,시간) transform.localScale = new Vector3(LerpPos, LerpPos, LerpPos); yield return null; } yield return new WaitForSeconds(0.3f); isSpawn = true; } private void Dead_Event() { if (!isBoss) { Stage_Manager.Count++; Main_UI.Instance.Monster_Slider_Count(); } else { Base_Manager.Stage.State_Change(Stage_State.Clear); } Spawner.m_monsters.Remove(this); Base_Manager.Pool.Pooling_OBJ("Smoke").Get((value) => { value.transform.position = new Vector3(transform.position.x, 0.5f, transform.position.z); Base_Manager.instance.Return_Pool(value.GetComponent<ParticleSystem>().duration, value, "Smoke"); }); Base_Manager.Pool.Pooling_OBJ("COIN_PARENT").Get((value) => { value.GetComponent<Coin_Parent>().Init(transform.position); }); for (int i = 0; i < 3; i++) { Base_Manager.Pool.Pooling_OBJ("Item_OBJ").Get((value) => { value.GetComponent<Item_OBJ>().Init(transform.position); // 몬스터 위치 삽입 }); } if (!isBoss) { Base_Manager.Pool.m_pool_Dictionary["Monster"].Return(this.gameObject); } else { Destroy(this.gameObject); // 보스몬스터는 풀링하지않고 파괴한다. } } }
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
채팅 시스테 ㅁ구현
안녕하세요! 유니티 초보이지만 개발 경력이 쪼끔 있어 파이누스님의 기초 유니티 강의를 빠르게 듣고 방치형 강의를 들으려고하는 학생입니다. 방치형 게임은 솔로 플레이인데 혹시 다른 유저들과 소통할 수 있는 채팅 기능 구현하는게 있을까요~? 궁금합니다!
-
해결됨새싹부터 시작하는 Unity 게임 개발
Start 자동 완성이 안됩니다.
학습에 관련된 상세한 질문을 남겨주세요 🙂그 외에도 여러분들이 자체적으로 게임을 개발하면서 생긴 여러 오류들도 남겨주신다면 제가 아는 선에서 최대한 답변드리겠습니다 ! 😃
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
Fade 구현 파트에서 childcount 부분이 헷갈려서요
로비씬 마지막에 Fade 구현 파트에서 UIManager에 CloseUI 함수에서 lastchild 가져오는 부분을 var lastChild = UICanvasTrs.GetChild(UICanvasTrs.childCount - 3); 빼기 숫자를 FadeImg 추가했으니 3으로 수정하는 부분이요. 강의에서도 유니티 창에서 추가 설명해주시긴 했는데 약간 헷갈려서요이 코드 이후에 설명해 주실때 lastChild가 true면 겟 컴포넌트로 BaseUI 컴포넌트 가져오는데 이게 위 코드에서 -3으로 하면 null이 되니까 ... 대략 이런 방식으로 설명 주셨는데 이 부분도 잘 이해가 안돼서요 추가로 더 설명해 주실 수 있을까요