런타임에서 ECS와 GameObject 간의 간단한 상호 작용.
1. "Scripts/MonoBehaviours" 폴더에 "CameraSingleton.cs"라는 이름의 새 C# 소스 파일을 만들고 아래 코드를 작성합니다.
// main cmaera에 접근하는 방법은 여러 가지가 있지만 싱글톤(여기서 사용하는 대로)을 사용하는 접근 방식은 모든 종류의 MonoBehaviour에서 작동합니다.
class CameraSingleton : UnityEngine.MonoBehaviour
{
public static UnityEngine.Camera Instance;
void Awake()
{
Instance = GetComponent<UnityEngine.Camera>();
}
}
2. "SampleScene"의 "Main Camera" GameObject에 "CameraSingleton" MonoBehaviour를 추가합니다.
3. "Scripts/Systems" 폴더에 "CameraSystem.cs"라는 이름의 새 C# 소스 파일을 만들고 아래 코드를 작성합니다.
using Unity.Collections;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;
[BurstCompile]
// 이 시스템은 변환 시스템이 업데이트된 후에 실행되어야 합니다.
// 그렇지 않으면 카메라가 탱크 뒤에서 한 프레임 지연되고 떨릴 것입니다.
[UpdateInGroup(typeof(LateSimulationSystemGroup))]
partial struct CameraSystem : ISystem
{
Entity Target;
Random Random;
EntityQuery TanksQuery;
[BurstCompile]
public void OnCreate(ref SystemState state)
{
Random = Random.CreateFromIndex(1234);
TanksQuery = SystemAPI.QueryBuilder().WithAll<Tank>().Build();
state.RequireForUpdate(TanksQuery);
}
[BurstCompile]
public void OnDestroy(ref SystemState state)
{
}
// 이 OnUpdate는 Managed object에 접근하기 때문에 BurstCompile할 수 없습니다.
public void OnUpdate(ref SystemState state)
{
if (Target == Entity.Null || UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.Space))
{
var tanks = TanksQuery.ToEntityArray(Allocator.Temp);
Target = tanks[Random.NextInt(tanks.Length)];
}
var cameraTransform = CameraSingleton.Instance.transform;
var tankTransform = GetComponent<LocalToWorld>(Target);
cameraTransform.position = tankTransform.Position - 10.0f * tankTransform.Forward + new float3(0.0f, 5.0f, 0.0f);
cameraTransform.LookAt(tankTransform.Position, new float3(0.0f, 1.0f, 0.0f));
}
}
4. 플레이 모드로 들어가 Game View(전과 같이 장면 보기가 아님)를 보고 카메라가 탱크 중 하나를 따라가는 것을 확인합니다. Game View에 입력 포커스가 있는지 확인하고(그것을 클릭), 그리고 스페이스바를 반복해서 누릅니다. 카메라는 매번 다른 무작위 탱크로 전환되어야 합니다.
5. 플레이 모드를 종료합니다.
축하합니다!
이 튜토리얼을 마쳤습니다! 가서 케이크 좀 사서 축하하세요!
'Unity Entities Tutorial' 카테고리의 다른 글
Unity Entities 1.0.0 Tutorial - Step 8. Safe zone (0) | 2023.01.29 |
---|---|
Unity Entities 1.0.0 Tutorial - Step 7. Colored tanks and cannon balls (0) | 2023.01.29 |
Unity Entities 1.0.0 Tutorial - Step 6. Spawning many tanks (0) | 2023.01.29 |
Unity Entities 1.0.0 Tutorial - Step 5. Cannon ball movement (0) | 2023.01.29 |
Unity Entities 1.0.0 Tutorial - Step 4. Cannon Balls (1) | 2023.01.28 |