전체 글 53

Behavior Tree - AI 이동 디테일

AI 이동을 좀 더 쓸만하도록 수정하겠습니다. AI 가 이동할떄 한번에 끝까지 이동하며 도중에 다른 판단을 하지 않게되면 매우 어색하기 때문에 중간중간 갈 위치를 정해두고 매번 다시 평가하는 구조로 만들었습니다. NodeCanvas의 MoveToward의 경우 A포인트에서 B포인트까지 한번에 일정속도로 이동하게 되는데 이떄 시간이 3초 걸린다면 3초동안 다른 평가를 하지 않기 때문에 이상하게 됩니다. 이럴경우 0.5초 로 이동할 수 있는 거리만큼 거리를 계산하고 그만큼만 이동하고 다시 평가를 진행합니다. 우선 기존에 진행 하였던 것들에 이어서 진행하지만 많은 변경점이 있어서 전체적으로 다시 적었습니다. CubeController.cs public class CubeController : MonoBehav..

Unity Engine 2022.07.10

Behavior Tree - Custom Action

기존에 이어서 새로운 태스크를 제작해 봅니다. 하고자 하는 목표는 다음과 같습니다. 1. 객체를 감지한다. 2. 감지된 객체가 있다면 객체까지 이동한다. 기존에 Cube Controller 에 있던 Target객체를 할당 해제 합니다. 또한 Cylinder의 레이어를 변경 해 줍니다. Add Layer로 레이어 추가 해 주고, Target 이라는 레이어를 추가 해 줍니다. 이제 선택된 레이어를 변경해서 올바르게 할당 되었는지 확인합니다. 새로운 Task 를 만들어 줍니다. Node Canvas를 설치하였다면 위와 같은 메뉴가 추가 되었습니다. 여기서 New Task를 선택 해 줍니다. Task Name, Namespace에 적당한 이름을 넣고 CREATE 버튼을 눌러 줍니다. 올바르게 생성 되었다면 On..

Unity Engine 2022.07.07

Behavior Tree - Node Canvas (2)

Node Canvas를 통해 기본적인 동작을 테스트 해보겠습니다. 3D Object2개를 만들고 하나를 다른 쪽으로 움직이도록 해보겠습니다. 화면에 Cube 와 Cylinder를 만들어 줍니다. 그리고 Cube에 스크립트 하나를 붙여줍니다. public class CubeController : MonoBehaviour { public GameObject Target; } 아주 단순하게 GameObject를 변수로 하나 설정해 두는 것입니다. 이것을 Cube에 할당 해 주고 Target에 Cylinder를 할당 해 줍니다. 이제 준비가 끝났고 Node Canvas로 Behavior Tree를 제작해 줍니다. Behaviour Tree Owner를 추가해 줍니다. 약간 다른 스펠링에 주의 하세요. 이제 2가..

Unity Engine 2022.07.02

Behavior Tree - Node Canvas (1)

NodeCanvas | 비주얼 스크립팅 | Unity Asset Store Get the NodeCanvas package from Paradox Notion and speed up your game development process. Find this & other 비주얼 스크립팅 options on the Unity Asset Store. assetstore.unity.com ParadoxNotion 의 NodeCanvas를 기준으로 작성 하였습니다. 기본적인 구성 자체는 유니티의 다른 Behavior Tree 에셋이나 언리얼 엔진 것과 동일 합니다. 다만 특정 에셋기준으로 작업한 내용이기 떄문에 메소드 이름이 약간 씩 다를 수 있습니다. Action 직접적인 행동을 수행 합니다. EndAction..

Unity Engine 2022.06.29

Flutter - Spread Operator 활용

표시된 부분과 같이 버튼이 다수 존재 하는데 이것이 상황에 따라 달라질 경우 예를들면 A라는 사람에게는 2개, B라는 사람에게는 3개가 표시 되어야 할 상황이라면 위젯을 그냥 박아버리면 문제가 될 수 있습니다. 이때 Spread Operator 를 활용 할 수 있습니다. import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { var TextArray = ['Hello', 'World', 'ABCD']; void ButtonClick() { print('Button Click'); } // This widget is the root of your applicatio..

Flutter 2022.06.23

Flutter 각종 연산자

?? 좌측이 null이라면 우측을 리턴합니다. ??= 변수가 null 일 경우에만 변수에 우측값을 할당 합니다. 초기 할당에서는 null이기 때문에 3이 할당 되었지만 10을 할당 하려 했을 경우 null이 아니기 때문에 할당되지 않았습니다. ... Spread Operator 이라고 불리며 컬렉션의 값을 쪼개버립니다. ...을 썻을경우 list2 에는 값이 쪼개져서 할당 되었고 쓰지 않은 list3에는 리스트 내부에 리스트가 또 있는것을 확인 하였습니다 ...?으로 널체크 가능 합니다.

Flutter 2022.06.23

Flutter - CustomWidget + VoidCallback

StatelessWidget을 상속받아 커스텀 위젯을 만들 수 있습니다. 당연히 여러 방면에서 쓰일수 있고 전체 코드양을 줄이며 재활용 하기 편하기 떄문에 다른 언어에서도 많이 사용 하는 방법 입니다. https://aostols.tistory.com/16?category=564017 Flutter - StatelessWidget / StatefulWidget StatelessWidget 간략히 설명하자면 한번 그려지고 나면 다시 그려지지 않습니다. 예를 들어서 단순히 이미지 + 버튼 링크만 있는 상황이라면 언제나 링크만 동작하면 되기 때문에 이럴때 StatelessWidge aostols.tistory.com 기존 코드를 약간 변형해서 사용 해 봅시다. import 'package:flutter/mat..

Flutter 2022.06.23

Unity - RaycastCommand, IJobParallelFor

Unity 에서 레이캐스트용 Job 객체가 있습니다. RaycastCommand 라는 객체인데 이것의 성능을 테스트 하기 위해 실험을 해 보았습니다. 0.1도 단위로 Ray를 쏴서 성능 비교를 진행 하였습니다. Update()문에서 일반 Physhics.RaycastNonAlloc 으로 처리된것과 RaycastCommand로 처리한 것을 비교 해 보았습니다. for (int i = 0; i < totalRay; ++i) { float angle = stepSize * i; float rad = angle * Mathf.Deg2Rad; Vector3 direction = new Vector3(Mathf.Sin(rad), 0, Mathf.Cos(rad)); Ray ray = new Ray(this.trans..

Unity Engine 2022.06.21

Custom Inspector - ReorderableList(2)

ScriptableObject 를 활용하여 데이터를 편집할때 인스펙터를 수정하는 방법을 확인 해 보겠습니다. [Serializable] public class CharacterInfo { public string CharacterName; public int CharacterLevel; public float value; } 기본적인 데이터 입니다. 이것이 배열 형태로 ScriptableObject로 처리 됩니다. [CreateAssetMenu(fileName = "CharacterData", menuName = "Scriptable Object/CharacterData")] public class CharacterData : ScriptableObject { [SerializeField] private..

Unity Engine 2022.06.20