Unity 54

[내배캠][Unity6기][TIL] NavMesh 경로 설정 수정

여전히 문제는 해결되지 않았지만 튜터님이 예상되는 원인을 찾아주셔서 해결 중이다!오브젝트 풀에서 다시 생성될 때 제대로 초기화되지 않는 부분이 있는 것 같다고 조언해 주셔서 찾아보고 있다.그 외에도 Walk나 Run에서 경로를 설정할 때 매번 경로를 재설정하지 않고 변경되었을 때만 재설정하도록 코드를 수정했다. 훨씬 효율적으로 동작하도록 코드를 변경해주셨다! [ 이전 코드 ] public bool ArriveToDestination(Vector3 target) { agent.ResetPath(); agent.SetDestination(target); bool flag = agent.remainingDistance [ 변경된 코드 ] public boo..

[내배캠][Unity6기][TIL] 최종 프로젝트 중간 기록 (1)

현재 인간 이동에서 알 수 없는 버그가 발견되면서 진행이 더뎌지고 있다. [ 문제 상황 ]1. WalkNode에서 애니메이션은 실행되는데 이동하지 않고 멈춰있다가 다시 거점을 향해 이동(처음 스폰될 때부터 정상적으로 실행되는 객체와 아닌 객체가 있음)2. HumanSpawnPoint가 아닌 다른 곳(MonsterSpawnPoint4)에서 스폰(오랜 시간 실행 시 간혹 재현되는 버그, 정말 랜덤 확률로 나와서 디버깅 찍기도 어려움ㅠ) [ TODO ]0. 브랜치 병합1. 업데이트 된 맵에서 단위 테스트 작동하는지 확인2. 트리 구조 가독성 향상을 위해 재작성3. Walk, SetFormation, Run(Blender Tree) 제외하고 나머지 애니메이션 작업4. 공포 게이지 UI 생성5. EndPointT..

[내배캠][Unity6기][TIL] Behavior Tree 구조 설계 (3)

병합테스트에서 또 버그가 나왔다 ㅠ일단 이것부터 수정하고 트리 구조 다시 설계해야한다.우선 튜터님께서 조언해주신 포인트는1. 미리 설계한 트리 구조(피그마로 만든 것) 대로 스크립트로 구현2. 실제로 수행하는 노드는 Sequence나 Selector가 아닌 Leaf Node로 두기3. 트리 구조 한눈에 파악할 수 있도록 스크립트 수정 1번을 진행하며 Surprise는 계획대로 없애면서 훨씬 자연스러워졌고, WaitNode도 없는 것이 로직 흐름이 자연스럽다는 것을 깨달았다! Wait를 제외하고 거의 계획했던 트리 구조대로 나왔다. 그리고 인간 유닛 기준으로 배치하려면 Idle도 없애는게 나을지도 모르겠다고 생각하고 있다.2는 해결했고, 이제 3번만 하면 된다! 지금 해야할 일이 너무 많아서 ㅠㅠ 잊어버리..

[내배캠][Unity6기][TIL] 11.15 최종 프로젝트 시작 전, 알아두면 좋을 것들 특강(스탠다드) (2)

Preview주제: 성능 저하를 일으키는 요인- 사용하지 않는 생명 주기 함수 - Find 계열 함수 - Debug.Log - LINQ - 순서를 고려하지 않은 연산식 - Camera.main - 문자열 덧셈 - 반복문에서 new WaitForSeconds - ObjectPool 미사용 - 빈번한 Boxing & Unboxing사용하지 않는 생명 주기 함수- 일단 생명 주기 함수가 등록되면 내부에 코드가 없어도 매 프레임마다 호출되므로 리소스 낭비- 사용하지 않는 생명 주기 함수는 반드시 삭제 필요Find 계열 함수- 메모리에 있는 모든 게임오브젝트와 컴포넌트에 대해 검사하기 때문에 자주 호출될수록 성능 부하 큼- 빌드 단계의 코드에서 최대한 제거 필요 참고 자료: https://docs.unity3d...

[내배캠][Unity6기][TIL] UGS 데이터 로드

팀원분께서 UGS 패키지 세팅과 공유 폴더까지 미리 준비해주셔서 구글 스프레드시트로 작성하고 받아와서 SO로 파싱만 하면 된다!이전에 받아온 데이터로만 SO가 생성되는 문제가 있어서 추후 수정이 필요하다.using UnityEngine;using UnityEditor;using System.Collections.Generic;using Human_Data;public class HumanDataLoader : MonoBehaviour{ [MenuItem("Tools/Update HumanSO from JSON")] public static void UpdateHumanSOFromJSON() { // JSON 파일 리스트로 로드 List humanDataList =..

[내배캠][Unity6기][TIL] Behavior Tree 구조 설계 (2)

오늘은 개인 일정이 있어 거의 진행을 못했다 ㅠ어제 작성해 둔 코드 로직 한번 더 검토하고 다시 나가봐야한다...조건 분기가 많아 Condition을 주로 사용하게 될 줄 알았는데 직접 구현해보니 Sequence와 Selector만 사용하게 되었다.이부분은 테스트 진행하면서 제대로 로직상 상태가 변경되어야 하는 부분 있으면 트리 구조 스크립트만 수정하면 되므로 차차 다듬어나가면 될 것 같다. 기본 노드는 튜터님이 참고하라고 공유해주신 블로그 자료를 베이스로 작성되었다.Condition과 Action은 지금 당장 사용하지는 않는데, 혹시 나중에 사용될 수도 있어서 만드는 김에 미리 작성했다.INodepublic enum NodeState { Success, Failure, Running }public in..

[내배캠][Unity6기][TIL] Behavior Tree 구조 설계 (1)

유니티에는 언리얼처럼 내장으로 Behavior Tree를 비주얼 스크립팅할 수 있는 툴이 없어서... 코드로 해야한다!물론 쉽게 추가할 수 있는 API와 무료 or 유료 에셋들을 사용하여 만들 수도 있다.선배 기수님 프로젝트 중에 UnityEditor.Experimental.GraphView를 이용해 BT를 비주얼 스크립팅하신 분이 계셔서 찾아보니 이것도 괜찮을 것 같다. 그런데 공식문서를 확인해보니 변경되거나 사라질 수 있다고 경고창...?이 떠서 보류해야겠다.일단 코드로 기본 구현을 해보는 것을 권장하셔서 코드로 노드부터 만들어보려고 한다. 머릿속으로 전체 구조를 잡는 것보다는 눈에 보이게 뭐든 문서화나 그림을 그리는 것이 더 좋다!지능 이슈로 뇌내 빅픽쳐를 그리기 힘들어서도 있지만... 누군가에게 ..

[내배캠][Unity6기][TIL] 캐릭터 행동 구현 설계

게임에서 적의 AI를 구현하는 방식은 매우 다양하다.우리 게임에서 어떤 방식으로 구현해야 적합할지 모르겠어서 우선 행동 양식을 분석했다.그런데... 더 알 수가 없어져서 튜터님 조언을 받고 일단은 Behavior Tree로 구현하기로 했다.Behavior Tree...공부하면 할수록 스스로 불러온 재앙이라는 느낌을 지울 수 없는데 이왕 하기로 한거 열심히 해보는 수밖에!  그리고 분석하고 설계하는데 너무 많이 고민할 필요는 없고, 이정도면 일단 구현을 해보면서 수정하고 방향을 잡아가는게 좋을 것 같다고 말씀해주셔서 내일부터는 본격적으로 구현에 들어갈 예정이다.이론적으로 좋은 설계와 이상향을 목표하고 시작해도 작업하다보면 어쩔 수 없이 처음 계획과 다르게 수정되기 때문에 너무 처음부터 각잡고 이렇게 해야겠..

[내배캠][Unity6기][TIL] ObjectPool

생성과 삭제가 빈번한 오브젝트는 풀링이 반드시 필요하므로 인간을 만들기 전에 ObjectPool 프레임워크부터 설계했다.오브젝트 풀은 어떻게 사용할지에 따라 구현 방법이 다양해지기 때문에 여기저기에서 많은 레퍼런스를 참고하고 우리 게임에 최적화하는 방식으로 설계하고자 했다. [ 고려했던 사항 ]1. Unity에서 제공하는 Pool 사용 or 직접 구현?=> 직접 구현! Unity Pool 활용하려면 내부 코드를 잘 알아야 유연하게 활용할 수 있는데 내부 코드 분석이 아직은 어려워서 직접 구현한 ObjectPool을 사용하는 것이 더 낫다고 판단했다. 무엇보다 문제가 발생했을 때 디버깅이 어려울 것 같았다! Unity 제공 Pool은 나중에 더 공부해서 개인 프로젝트에 활용해보거나 테스트 해볼 생각이다. ..

[내배캠][Unity6기][TIL] 최종 프로젝트 기획

오늘은 초기 기획을 더욱 구체적으로 디벨롭하였고 세부 구현사항을 리스트업하여 역할을 분배했다. 내가 맡은 역할은 인간 생성 및 관리 로직이다.구현 토대를 잡기 위해 오늘은 오브젝트 풀 생성 작업을 진행했고 내일 완성할 예정이다. 이미지 출처: Kingdom Rush 킹덤 러쉬 전략형 타워 디펜스(Ironhide Games) 인게임 화면작업 환경: Figma