Unity/개발연습 22

[Unity] Behaviour Tree Editor 제작기 - 8

최적화 어차피 실행 중에는 노드가 추가되거나 삭제되지 않으므로 자식 노드들을 매 프레임 찾을 필요가 없는 것 같다.현재 아래와 같이 실행하고 있으므로 미리 캐싱을 해서 조금이나마 최적화를 진행// Tree가 평가될 때마다 실행 (매 프레임 실행되는 함수)public override NodeStates Evaluate(){ foreach (string nodeGuid in childNodeGuidList) { // 매번 Node를 찾을 필요가 없다 var node = tree.FindNode(nodeGuid); if (node == null) { Debug.LogError($"{nameof(SelectorNode)} : Child ..

Unity/개발연습 2024.10.21

[Unity] Behaviour Tree Editor 제작기 - 7

Sequence Node 로직 변경 Sequence Node의 문제점을 발견했다. 예를들어 아래와 같이 3초 대기 후 타겟에게 이동하는 상황에서 예상한 결과는 이렇지만  1. 3초 대기  2. 타겟과 근접할 때까지 이동 결과는 아래와 같았다.  1. 3초 대기  2. 타겟에게 이동하지만 1프레임만 이동  3. 다시 3초 대기 후 1프레임 이동     문제는 Wait 노드의 구현 방식이었다. 일정 시간이 지난 후 elapsedTime 변수를 0으로 만들고 Success 상태로 변경하기 때문에 다음 평가 때 Running 상태가 되면서 Wait 노드를 재실행한다. public override NodeStates Evaluate(){ if (elapsedTime     즉, Action Node는 자체에..

Unity/개발연습 2024.10.21

[Unity] Behaviour Tree Editor 제작기 - 6

# Node 초기화 함수 추가 런타임 중에 Awake나 Start 함수에서 Node를 초기화하는 기능이 필요할 것 같아서 추가했다.Root Node부터 시작해서 하위 Node들의 Init 함수를 재귀형태로 실행한다.public void Init(BehaviourTreeContext context){ this.Context = context; if (string.IsNullOrEmpty(RootNodeGuid)) Debug.LogError($"{nameof(BehaviourTree)} : Root Node Guid is Empty"); rootNode = FindNode(RootNodeGuid); InitRecursive(rootNode);}private void Init..

Unity/개발연습 2024.09.04

[Unity] Behaviour Tree Editor 제작기 - 5

개별 노드마다 추가된 필드가 저장 되도록 만들었는데 Editor에서 해당 필드 값이 보여지지 않고 수정도 불가능하다.     예전에 커스텀 애트리뷰트를 만들어본 적 있는데 그 때처럼 애트리뷰트를 추가하고 해당 애트리뷰트가 추가된 필드나 프로퍼티를 Node에 보여주면 될 것 같았다. [Unity] Inspector에서 함수 실행하기예전에 Ordin Inspector 에셋을 사용했을 때 그 안에 있었던 기능인데 가끔 필요할 때가 있어서 만들어 봤다.  Odin Inspector and Serializer | 유틸리티 도구 | Unity Asset StoreUse the Odin Inspector and Serializer frommintchobab.tistory.com    Field에 추가할 수 있는 애트..

Unity/개발연습 2024.09.01

[Unity] Behaviour Tree Editor 제작기 - 4

현재 Node들은 아래와 같이 상속 구조를 따르고 있다.     모든 Node들은 BehaviourTree 클래스에서 관리하고 직렬화를 하는데 직렬화 과정에서 다형성이 지원이 안 되는 것 같아서 아래와 같이 Data들만 따로 관리하는 클래스를 만들어서 해당 객체를 직렬화하는 방식으로 우회했었다.// 다형성 문제 발생 // ex) ActionNode가 Serialization/Deserialization 되면 BehaviourNode가 됨public List NodeList = new List(); public List NodeList = new List();public List NodeDataList = new List();public void OnBeforeSerialize(){ NodeDataL..

Unity/개발연습 2024.08.30

[Unity] Behaviour Tree Editor 제작기 - 3

노드들이 이런 형태가 되길 원했고, 구현을 성공 하긴 했지만 다른 문제가 발생하여 결국 포기했다.     문제의 원인 노드는 Experimental.GraphView.Node를 상속받도록 만들었다.노드안에 내용들은 container들이 감싸고 있고 아래와 같은 구조로 되어있다.    container 구성을 변경할 순 없어서 (아예 없는 건 아니지만... 방법은 아래에)mainContainer.Clear() 함수를 이용해서 기존의 mainContainer를 삭제하고 새로운 container를 만들어서 원하는 레이아웃으로 구성되게 만들었다. 그 결과 처음 이미지처럼 input과 output 사이에 tilte이 오도록 만들 수 있었다. 여기까진 큰 문제가 없어보였는데 문제는 에셋에 변경사항이 생기거나 유니티..

Unity/개발연습 2024.08.30