- UNITY DOTS - Unity.Mathematics.Random 랜덤 사용하기개양반1. 개요 DOTS에서는 Random 값을 얻을려면 Unity.Mathematics 패키지에 있는 Random을 사용해야 한다. 하지만, 기존의 UnityEngine.Random 처럼 사용하면 모든 Entity가 같은 랜덤 값을 생성하는 문제가 발생한다. 해결 방법으로는 Entity가 개별 Seed를 가지고 있으면 된다. 2. 예제 2-1 ComponentData public struct RandomScoreData : IComponentData { // Entity는 고유한 Ramdom Component를 가져야 한다. public Random Randomizer; } 2-2 Authoring public class RandomScoreAuthoring : MonoBehaviour { public fl..
- 2022-11-28 18:57:07
- UNITY DOTS - 거리 계산하기개양반Unity DOTS 에서 수학 패키지로 using Unity.Mathematics를 사용해야 한다. using Unity.Mathematics에서 제공하는 오브젝트 간의 거리를 계산하는 함수에는 math.distance와 math.distancesq 2개가 존재한다. 1. math.distance 정확한 거리를 계산할 때 사용한다. 두 점간의 제곱 거리에 루트를 한 값이라 컴퓨터 성능에 악영향을 끼친다. 컴퓨터는 나누셈 연산에 잼병이다. math.distance(AEntity의 위치, BEntity의 위치); 2. math.distancesq 정확한 거리를 측정할 때는 좋지 않지만 루트 연산을 하지 않으므로 성능에 좋다. 위 Distance의 거리 계산에서 루트 계산을 하지 않은 두 점 사이의 제곱 거리..
- 2022-11-25 20:09:50
- Unity DOTS(ECS) 에서 Build 하는 방법개양반Dots(ECS)는 기존의 Build로는 안되고 유니티에서 제공하는 com.unity.platforms 패키지를 사용해야 한다. com.unity.platforms도 프리뷰이다. 그럼, com.unity.platforms로 Unity Dots(ECS) 프로젝트를 빌드하는 방법에 대해 알아보자. Package 설치 Package Manager에서 + 버튼 클릭 Add package by name... 을 클릭하고 com.unity.platforms 입력한다. Build Configuration 만들기 1. Base Build Configuration Project - Assets 폴더에 우클릭 > Create > Build Configuration > Empty Build Configuarion 을 클릭한..
- 2022-08-09 23:49:04
- Unity DOTS(ECS)에선 꼭 Enter Play Mode Options를 활성화하자개양반Project Setting - Editor - Enter Player Mode Options 라는 옵션이 존재한다. 이 옵션을 활성화하고 유니티 재생을 누르면 매우 빠르게 로드된다. 다만, 수정한 내용을 리로드 하지 않기 때문에 수정한 내용이 적용이 안된다는 문제점을 가지고 있다. 대부분의 프로젝트는 게임 객체 기반이고 게임 객체 기반 프로젝트는 상태에 대해 수많은 정적 변수를 사용하는 경향이 있기 때문에 Unity의 빠른 진입 플레이 모드는 기본값이 아닙니다. 그리고 기본적으로 그렇게 하면 플레이 모드에 들어가기 전에 모든 정적 상태를 재설정하기 위해 도메인을 다시 로드해야 합니다. 의도적으로 DOTS에서 수행하는 모든 작업은 이 패턴을 피합니다.(리로드를 안해도 된다는 말) 다중 세계, 세계 싱글톤..
- 2022-08-09 22:53:07
- Unity DOTS(ECS)에서 따라다니는 카메라 만들기개양반Player(Entity)를 따라다니는 Camera(GameObject)을 만들려고 Camera를 ConvertToEntity로 변환시키면 카메라 랜더링이 없다는 검정화면을 보게 된다. Camera Rendering이 Entity 로 전환되면 먹통이 되어서 생기는 문제다. 즉, 카메라는 항상 GameObject로 존재해야 한다. 그러므로 MonoBehaviour 에서 Player(Entity)의 위치 정보를 읽어서 카메라가 따라다니게 만들어야 한다. MonoBehaviour 에서 Player(Entity)를 읽어오는 방법은 여러가지가 있다. 그 중 GetSingletonEntity로 읽어오는 방법에 대해 다루겠다. using Unity.Entities; using Unity.Mathematics; usi..
- 2022-08-09 16:41:30
- UNITY DOTS - State Machine(상태 머신) 만들기 #6 색상 변경개양반오늘 알아볼 내용 Guard의 상태(순찰, 대기, 추격)에 따라 Material이 변경되는 방법에 대해 다룹니다. Component 1. GuardAuthoring.cs 수정 색상이 변경되어야 할때 추가할 IsInTransitionTag를 GuardAuthoring.cs에 추가합니다. public struct IsInTransitionTag : IComponentData { } 2. MaterialSingletonAuthoring.cs 작성 MaterialSingletonAuthoring.cs 파일을 만들고 아래의 코드를 작성합니다. using Unity.Entities; using Unity.Mathematics; using UnityEngine; class StateTransitionMaterials..
- 2022-08-08 14:36:40
- UNITY DOTS - State Machine(상태 머신) 만들기 #5 Guard 추격개양반오늘 알아볼 내용 Guard의 탐색 범위에 Player가 존재하면 추격상태로 변경하고 탐색범위 밖으로 도망가면 Idle 상태로 변경하는 것에 대해 다룹니다. 범위를 탐색하기 1. Authoring Guard의 탐색범위를 저장할 ComponentData가 필요하다. GuardAuthoring.cs 에 아래의 코드를 추가한다. public struct VisionCone : IComponentData { public float AngleRadians; public float ViewDistanceSq; } 위에서 만든 ComponentData를 GuardAuthoring class의 전역변수로 추가한다. // 탐색 범위와 거리 public float VisionAngleDegrees = 45.0f; publ..
- 2022-08-07 17:07:16
- UNITY DOTS - State Machine(상태 머신) 만들기 #4 Guard 순찰개양반오늘 알아볼 내용 Guard가 목적지에 도착하면 Idle 상태가 되고 CoolTime 동안 대기를 한 뒤에 다음 목적지로 이동하는 순찰을 구현할 예정입니다. Idle 상태 만들기 1. ComponentData 추가 Idle 상태가 되면 Guard에게 얼마동안 휴식을 취했는지 저장하는 IdleTimer Data를 추가합니다. GuardAuthoring.cs에 아래의 코드를 추가합니다. public struct IdleTimer : IComponentData { public float Value; } 2. GuardAIUtility Idle 상태가 되면 IdleTimer를 Guard에 추가하는 기능을 만듭니다. 아래의 코드를 GuardAIUtility.cs에 추가합니다. /// /// Idle 상태로 변경 ..
- 2022-08-07 14:41:27
- UNITY DOTS - State Machine(상태 머신) 만들기 #3 Guard 이동개양반오늘 알아볼 내용 두 개의 Waypoints를 설치합니다. Guard가 Entity로 전환될 때 Waypoint 1개를 목적지로 설정하고 해당 목적지로 이동하는 것에 대해 다룹니다. GuardAIUtility Guard 의 여러 행동들을 설정할 때 사용할 예정인 GuardAIUtility.cs 파일 생성하고 아래의 코드를 작성합니다. public class GuardAIUtility { public const float kStopDistanceSq = 0.4f; } #코드 설명 목적지에 도달했다고 판단하는 거리입니다. 목적지와 Guard의 현재위치의 거리가 kStopDistanceSq보다 작아지면 도착했다고 판단합니다. Data Waypoints 와 현재 이동해야 하는 위치를 저장해야 합니다. 아래의 코..
- 2022-08-06 15:53:30
- UNITY DOTS - State Machine(상태 머신) 만들기 #2 Player개양반오늘 알아볼 내용 WSAD로 Player를 이동시키는 기능을 구현한다. (오늘은 매우 심플하다!) 사용자 입력에 따라 방향값 받아오기 ASDW 또는 상하좌우 방향키 입력에 따라 Player가 이동해야 하는 방향값(x,y)을 설정하는 기능을 구현할 예정이다. 아래 코드를 작성한다. using Unity.Entities; using Unity.Jobs; using Unity.Mathematics; using UnityEngine; struct UserInputData : IComponentData { public float2 Move; } public partial class GetherInputSystem : SystemBase { protected override void OnUpdate() { var ..
- 2022-08-05 16:47:53
- UNITY DOTS - State Machine(상태 머신) 만들기 #1 개요개양반EntityComponentSystemSamples의 State Machine 만들기를 분석하는 글이다. 샘플프로젝트는 https://github.com/Unity-Technologies/EntityComponentSystemSamples 로 가면 다운받을 수 있다. 게임 진행방식 Guard는 Waypoint를 순찰한다. Waypoint에 도착하면 잠시 대기를 하고 다음 Waypoint로 이동하는 것을 반복한다. 순찰 중에 원뿔 범위 내에 Player가 존재하면 추격하고 원뿔 범위 밖으로 Player가 도망치면 잠시 대기하다가 다시 Waypoints를 순찰하는 간단한 게임이다. 해당 샘플로 알 수 있는 것들 1. Unity DOTS 에서 조건에 따라 상태가 변경되는 State Machine을 만드는 방법..
- 2022-08-05 16:27:50
- ECS SampleProject #8 EntityPrefab개양반Hello Cube 부분은 완료되었고 Advanced 폴더에 있는 예제를 뜯어보기로 했다. 해당 기능의 개념보다 예제 자체가 어려운건 건너뛰었다. 이번에 알아볼 내용 이번 글의 핵심은 EntityPrefabReference 라는 것이다. PrefabSpawnerSystem 에서 사용되는 것인데 Unity에서 제공하는 기능으로 Entity를 로드하고 생성하는 것에 최적화된 기능이라고 볼 수 있다. EntityPrefabReference 에 대해 ReadMe 에서는 아래와 같이 설명하는데 사실 이해는 안 간다. 더보기 이 샘플은 엔티티 프리팹을 참조하여 동적으로 로드하고 인스턴스화할 수 있도록 하는 방법을 보여줍니다. 장면에서 PrefabSpawnerAuthoring 구성 요소에는 프리팹에 대한 참조 배열이..
- 2022-08-04 16:41:39
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)