Unity Engine 23

[Unity] Cinemachine - 초기 세팅

https://unity.com/unity/features/editor/art-and-design/cinemachine Cinemachine Learn how Unity's Cinemachine makes complex camerawork – including target tracking, composing, blending, and cutting – easy and intuitive. unity.com 시네머신은 카메라의 다양한 컨트롤을 하기 위해 사용합니다. 이름에서 알수 있듯이 영화쪽에서도 쓸 수 있다고 안내하고 있습니다. 초기세팅 및 카메라 전환을 간단히 알아 보겠습니다. 설치 시네머신은 기본으로 설치되어 있지 않습니다. 따라서 패키지 매니저에서 선택 해 줍니다. 패키지 종류를 Unity Regi..

Unity Engine 2022.12.19

[Unity] CharacterController.Move 가 Update에서 동작하지 않는 현상

서론 최근 이상한 일을 겪었습니다. CharacterController.Move 가 Update에서 동작하지 않고 FixedUpdate에서만 동작하는 현상입니다. Google에서 검색해도 비슷한 현상에 대한 내용은 몇건 찾을 수 있었으나 정확한 내용은 없었고 FixedUpdate로 옮겼다는 글만 몇개 보았습니다. 원인은 단순한 문제가 복잡하게 얽혀 있었습니다. 1. 너무나도 높은 프레임 2. CharacterController의 Min Move Distance 값. Update Update는 가능한 호출할 수 있는 만큼 자주 호출되는 녀석이고 FixedUpdate는 고정된 주기로 호출되는 녀석 입니다. 따로 수정하지 않는다면 FixedUpdate는 0.02초마다 호출됩니다. Update는 부하가 심하지 ..

Unity Engine 2022.12.16

유용한 공식 - 직선에 대한 한 점의 직각 좌표 구하기

제목이 약간 애매한데 그림을 보시면 이해가 빠르실 것입니다. 화면 하단에 플레이어가 있습니다. 플레이어의 forward는 붉은색 직선 입니다. 우측에 적이 있습니다. 플레이어의 forward기준으로 직각이 되는 녹색 직선을 구하는 - 정확히는 녹색직선과 붉은색 직선의 교차점을 구하는 내용 입니다. 이 내용을 찾아보게 된 것은 실제로 필요 해서였고 붉은색 직선을 기준으로 좌우로 데미지가 약해지는 등의 기획에서 쓸 수 있습니다. Collider를 분리하면 되지 않냐고 할수 있겠지만 Collider를 적게 쓰는것이 서버와의 협업에 좋았기 떄문에 이러한 공식을 찾게 되었습니다. 우선 이름을 정하자면 A : 플레이어 B : 목표 C : 교차점 모든 계산은 A를 기준으로 처리 합니다. void Start() { V..

Unity Engine 2022.11.10

[Unity]CollisionFlag - CharacterController

객체가 현재 어떻게 충돌하고 있는지 판단하는 방법은 여러가지나 CharacterController를 사용하고 있다면 비교적 쉽게 판단 할 수 있습니다. CharacterController.Move()를 사용한다면 CollisionFlags를 반환하게 되는데 이것은 현재 어떤 충돌상황인지를 나타내고 있습니다. 우선 단순한 바닥을 만들고 그 위에 캡슐을 올리고 CharacterController를 붙여 줍니다. 기본형 객체를 만들면 Collider가 붙어있는데 그것은 제거해 줍니다. void Start() { _controller = GetComponent() as CharacterController; print("1 : " + _controller.collisionFlags); CollisionFlags ..

Unity Engine 2022.11.06

[Unity]Physics 와 Layer

충돌 처리를 하게 된다면 Physics를 많이 쓰게 됩니다. 크게 나누게 된다면 Raycast 와 Overlap 계열, Cast 계열이 있습니다. Raycast 한 점에서 직선 방향으로 빛을 쏴 지정된 거리까지 충돌하는 객체가 있는지 체크하는 용도로 쓰고 있습니다. 투사체가 어디에 충돌했는지, 혹은 바닥 높이가 몇인지 등등등 다방면으로 쓰이고 있습니다. Overlap 계열 Physics.OverlapSphere를 보면 위와 같이 표시 됩니다. Overlap 에서 가장 큰 특징은 충돌한 Collider를 반환 하게 됩니다. 정확히 이야기 하자면 내가 누구와 충돌했는지를 체크하게 됩니다. Alloc버전과 NonAlloc버전이 있는데 Alloc버전은 Collider배열을 반환합니다. NonAlloc버전은 Co..

Unity Engine 2022.11.01

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

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