묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[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] 함께 만들어가는 방치형 게임 개발
채팅 시스테 ㅁ구현
안녕하세요! 유니티 초보이지만 개발 경력이 쪼끔 있어 파이누스님의 기초 유니티 강의를 빠르게 듣고 방치형 강의를 들으려고하는 학생입니다. 방치형 게임은 솔로 플레이인데 혹시 다른 유저들과 소통할 수 있는 채팅 기능 구현하는게 있을까요~? 궁금합니다!
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
소환 위치
안녕하세요 선생님 혹시 나중에 한 자리에같은 속성끼리 3마리 씩 소환예정인가요??아니면 한자리에 한마리만 스폰가능하나요
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
리얼타임 데이터베이스 정렬보기 같은게 있을까요?
파이어베이스 리얼타임 데이터베이스에USER 하위 항목으로 저장된 내용들을 보니까제가 저장에 쓰이게 했던 변수들의 순서 나열과 다르게변수이름 시작부분 a~z 순으로 데이터가 저장되는것 같더라구요.....예를들어 제가 변수를public int zzz;public int ccc;public int aaa;이렇게 코드를 쳤다면........파이어베이스 데이터 쪽에는 (USER 하위에)public int aaa;public int ccc;public int zzz;로.... 제가 코드로 순서 맞춰 쓴 변수와 다르게a순부터 z 순까지 자동정렬 되더라구용;;이거 그냥 a~z순 말고 제가 쓴 변수 순서대로 정렬되서저장되게 하는법이 있을까요??
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
파이어베이스 데이터베이스 불러오기 궁금한점이 있어요.
데이터 베이스 불러올때 public void ReadData() 함수에서만약에, 저장된 파일이 없을때 불러오려고 하면 에러날수도있을거같아서 혹시if(그 유저의 저장된파일이 있다면){ ReadData(); //데이터를 불러온다. }else{ return;} 이렇게 코드를 짜보고싶은데위에서 if 안에 들어갈만한 (그 유저의 저장된파일이 있다면) 에혹시 뭐라고 쓰는게 좋을까요? ㅠㅠ
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
강의 제공 에셋 import
제일 마지막 공유 에셋 파일 import 하면지금까지 올려주신 모든 에셋 파일을 한번에 import 할 수 있는건가요?총 9개의 다운로드 파일이 있던데 이거를 전부 다운받아서 import 해야하는지 궁금합니다
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
코드 다운로드에 관해서
다른 질문글도 있지만개발 진행하며, 관련 코드가 없어 화면을 일일이 찾아야되는 부분이 있어 그런데,혹시 지금까지 하셨던 내용선에서라도 한번 전체 소스코드를 올려주시는건 가능하신지 문의드립니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
코드오류 (버전문제인지 궁금합니다)
유니티 버전을 22.3.6f 로 하라고 하셨었는데 lts버전이 아니여서 22.3.47f 로했는데그래서 그런건지 여기도 이렇게 글씨에 이렇게 그어져있고 자꾸 오류가 뜨네요 ㅠ#pragma warning disable CS0618 // 형식 또는 멤버는 사용되지 않습니다. 이렇게 넣어서 오류 문구는 안뜨는데 상관없는 걸까요??
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
이 오류가 계속뜨는데 어떻게 잡아야할지 모르겠습니다.
Parent of RectTransform is being set with parent property. Consider using the SetParent method instead, with the worldPositionStays argument set to false. This will retain local orientation and scale rather than world orientation and scale, which can prevent common UI scaling issues.UnityEngine.Transform:set_parent (UnityEngine.Transform)Object_Pool:Return (UnityEngine.GameObject,System.Action`1<UnityEngine.GameObject>) (at Assets/00_Scripts/Manager/Pool_Mng.cs:48)Pool_Mng:Add_Queue (string) (at Assets/00_Scripts/Manager/Pool_Mng.cs:111)Pool_Mng:Pooling_OBJ (string) (at Assets/00_Scripts/Manager/Pool_Mng.cs:83)Monster:GetDamage (double) (at Assets/00_Scripts/Monster/Monster.cs:62)Bullet:Update () (at Assets/00_Scripts/Bullet.cs:71)공격할 때 마다 계속 쌓이네요 ㅠ
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
기능 구현 질문드립니다.
강의 영상 알차게 잘 보고 있습니다!출시까지 목표로 두고 있는 프로젝트라고 하셔서 캐릭터 장비요소는 필수라 생각되어 혹시나 장비드랍 및 장착기능 구현이 업데이트 내용에 있나 궁금해서 여쭤봅니다.1.장비아이템도 드랍 및 가챠뽑기방식2.장비아이템이 추가된다면 같은 장비라도 옵션이 다르게 보여지고 인벤토리로 저장되는 방식으로 구현되는지 궁금합니다. (예시 : 디아블로 아이템 옵션수치 및 옵션랜덤 방식)
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
안녕하세요 강의 무한로딩 문의합니다.
9월 20일 추가 하신 강의 중 가챠 2 강의 제외하고 모두 무한 로딩 뜨는데요 혹시 무슨 문제 일까요?
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
작성된 코드 다운로드 에 대해서 질문드려요
안녕하세요다름이 아니라 파트가 끝난 코드는 다운로드 받을수 있게 안되나요? 똑같이 따라 친거같은데 무언가 오류도 많이 발생하고 잘안되네요 파트가 끝난 부분에 대해서 코드 다운로드 를 제공해주실수 있는지 문의드립니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
안녕하세요 어플 에서 실행
안녕하세요 선생님 컴퓨터로 강의 실행은 잘되는데 인프런 어플로 재생했을때 34강 부터 실행이 안됩니다 ㅠㅠ 동영상을 준비중에 있습니다 이렇게 나옵니다 확인 부탁드립니다
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
Item 깨짐 현상
10강 수강 중 Other > Item에 있는 아이템 삽입 시 화면처럼 마젠타 색으로 모든 아이템이 전부 깨져서 표시됩니다제가 가지고 있는 패키지에는 Item 항목이 없어 섹션3의 패키지 파일을 다운 받아 유니티에 드래그드롭으로 넣고 Import 된 Item을 꺼냈더니 저렇게 뜹니다 어떻게 해결해야 하는지 질문 드립니다
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
오브젝트 폴링 문의 합니다.
Add_Queue 함수에서 go.transform.parent = m_pool_Dictionary[path].parentTransform;부모 설정을 하고 다시 Return 함수로 가서 obj.transform.parent = parentTransform; 다시 부모 설정 하는 이유가 궁금 합니다. 아 그리고 스킬 구현 아이디어는 끝났나요 ?
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
Render Texture 관련 문의
안녕하세요. 강의 잘 수강하고 있습니다. 다름이 아니라 Render Texture에서 RawImage에 Texture #Heroes 를 넣었을 때 모양이 저와는 다르게 나와서 문의드립니다.강사님과 동일한 값으로 카메라 및 Circle 컴포넌트 값을 입력해도 저는 아래와 같은 모습이 나옵니다.반면 영상에서는 Circle이 더 작게 표시되는데, 혹시 이유가 궁금해서 질문 드립니다.감사합니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
스킬 구현 강의 영상 화질 관련
안녕하세요!이번에 올려주신 스킬 구현 강의 부분의영상 설정이 720p 까지만 되어 있습니다.영상 화질 설정과 관련해서 확인 부탁드립니다.참고로 작은(부분) 화면에서는 화질이 괜찮아보이나전체 화면 시에는 글씨가 많이 뭉개져 보이니영상 확인 시에는 전체 화면으로 체크해주시면확실하게 확인이 가능할 것 같습니다.
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
수업자료질문
수업자료에서 파일을 다운받았는데 studyfile.gz를 다운받으니 유니티 프로젝트가 아니고 이상한 폴더가 가득있어요. ㅠㅠ . 참 열심히 듣겠습니다~
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
헉!!! ㅠㅠㅠ 몰랐어요 구현하고 싶은거있었는데
안녕하세요 구현하고 싶은 스킬있는데 스킬 보다는 약간 시스템이긴합니다 헤헤 늦었겠죠 ??다음에는 꼼꼼하게 봐야 겠어요 ㅠㅠ 좋은강의 감사합니다
-
미해결[따라하면 취업되는 게임기획]MORPG 게임밸런스 기획
스테이지별 몬스터의 기준 능력치 중 체력과 공격력 비 설정
안녕하세요.금일 강의에서 추세선을 사용하여 공격력 및 체력의 밸런싱을 조절하는 방법을 배웠는데 제 생각에 체력이나 공격력을 추세선으로 밸런싱 잡은 후 체력과 공격력의 비율을 유지해도 될 것 같은데 따로 따로 공식화하여 잡으시는 이유가 있을까요?밸런싱이 제대로 되지 않을경우 체력과 공격력의 값 차이가 점점 벌어질 것 같아서 궁금증이 생겨서 질문드립니다.