Step 9 - 카메라 추적(Camera follow)
런타임에서 ECS와 GameObjects의 간단한 상호작용.
- "Scripts/MonoBehaviours" 폴더에 "CameraSingleton.cs"이라는 이름의 새 C# 스크립트 파일을 만들고 다음 내용을 저장합니다:
-
// 메인 카메라에 접근하는 방법은 여러 가지가 있지만, // 싱글톤(여기서 사용하는 방식)을 사용하는 접근 방식은 모든 종류의 MonoBehaviour에서 작동됩니다. class CameraSingleton : UnityEngine.MonoBehaviour { public static UnityEngine.Camera Instance; void Awake() { Instance = GetComponent<UnityEngine.Camera>(); } }
- "SampleScene"의 "Main Camera" 게임 오브젝트에 "CameraSingleton" MonoBehavior를 추가합니다.
- "Scripts/Systems" 폴더에 "CameraSystem.cs"이라는 이름의 새 C# 스크립트 파일을 만들고 다음 내용을 저장합니다:
-
using Unity.Collections; using Unity.Entities; using Unity.Mathematics; using Unity.Transforms; // 이 시스템은 변환 시스템이 업데이트된 후 실행되어야 합니다. // 그렇지 않으면 카메라가 탱크보다 한 프레임 뒤로 처져 흔들림이 발생합니다. [UpdateInGroup(typeof(LateSimulationSystemGroup))] partial class CameraSystem : SystemBase { Entity Target; Random Random; EntityQuery TanksQuery; protected override void OnCreate() { Random = Random.CreateFromIndex(1234); TanksQuery = GetEntityQuery(typeof(Tank)); RequireForUpdate(TanksQuery); } protected override void OnUpdate() { 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)); } }
- 플레이 모드로 들어가서 게임 뷰(이전과 같이 씬 뷰가 아님)를 보면 카메라가 탱크 중 하나를 따라가고 있음을 확인할 수 있습니다. 게임 뷰에 입력 포커스가 되어 있는지 확인하고(클릭해서) 스페이스바를 반복적으로 누릅니다. 카메라는 그 때마다 매번 다른 임의의 탱크로 전환되어야 합니다.
- 플레이 모드에서 나오세요.
축하합니다!
이 튜토리얼을 끝냈습니다! 가서 케이크 좀 사 와서 축하하세요!
'Unity' 카테고리의 다른 글
[Unity Error] Resources.LoadAll<Sprite> 가 작동을 안할 때 (0) | 2023.01.12 |
---|---|
[Unity] GPGS 설치시 빌드가 안될 때: 성공 (0) | 2022.12.15 |
ECS(Entity Component System) 튜토리얼: Step 8 - 세이프 존(Safe zone) (0) | 2022.12.07 |
ECS(Entity Component System) 튜토리얼: Step 7 - 색이 입혀진 탱크들과 대포알들(Colored tanks and cannon balls) (0) | 2022.12.03 |
ECS(Entity Component System) 튜토리얼: Step 6 - 많은 탱크들을 소환(Spawning many tanks) (0) | 2022.11.30 |