728x90
카메라 이동 애니메이션 구현
씬 상에 가상의 위치값을 정해놓은 후 오브젝트가 해당 값으로 이동하면서 카메라가 따라가는 애니메이션을 구현했다.
Create Empty(positions)를 생성 후 자식 Create Empty(pos1 ~ pos8)까지 생성해주었다. 그리고 각각의 pos 오브젝트의 인스펙터 창에서 cube 모양을 클릭 후 가상의 초록색 점을 매핑해주었다. 이는 씬 상에서만 보이지 플레이하면 보이지 않는다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class movPath : MonoBehaviour
{
public bool bDebug = true;
public float Radius = 2.0f;
public Transform[] transPos;
public float speed = 2.0f;
public float mass = 5.0f;
public bool isLooping = true;
private float curSpeed;
private int curPathIndex;
private float pathLength;
private Vector3 targetPoint;
Vector3 velocity;
void Start()
{
pathLength = Length;
curPathIndex = 0;
velocity = transform.forward;
}
void Update()
{
curSpeed = speed * Time.deltaTime;
targetPoint = GetPoint(curPathIndex);
if (Vector3.Distance(transform.position, targetPoint) < Radius)
{
if (curPathIndex < pathLength - 1)
{
curPathIndex++;
}
else if (isLooping)
{
curPathIndex = 0;
}
else
{
return;
}
}
if (curPathIndex >= pathLength)
{
return;
}
if (curPathIndex >= pathLength - 1 && !isLooping)
{
velocity += Steer(targetPoint, true);
}
else
{
velocity += Steer(targetPoint);
}
transform.position += velocity;
transform.rotation = Quaternion.LookRotation(velocity);
}
public Vector3 Steer(Vector3 target, bool bFinalPoint = false)
{
Vector3 desiredVelocity = (target - transform.position);
float dist = desiredVelocity.magnitude;
desiredVelocity.Normalize();
if (bFinalPoint && dist < 10.0f)
{
desiredVelocity *= (curSpeed * (dist / 10.0f));
}
else
{
desiredVelocity *= curSpeed;
}
Vector3 steeringForce = desiredVelocity - velocity;
Vector3 acceleration = steeringForce / mass;
return acceleration;
}
public float Length
{
get
{
return transPos.Length;
}
}
public Vector3 GetPoint(int index)
{
return transPos[index].position;
}
void OnDrawGizmos()
{
if (!bDebug)
{
return;
}
for (int i = 0; i < transPos.Length; i++)
{
if (i + 1 < transPos.Length)
{
Debug.DrawLine(transPos[i].position, transPos[i + 1].position, Color.red);
}
}
}
}
Cube에 다음과 같은 스크립트를 연결해주었다. 그리고 원하는 위치에 배치한 pos값들을 스크립트에 매핑해주고 플레이했더니 Cube가 pos1부터 pos9 임의의 path까지 차례로 이동하는 것을 확인할 수 있었다. 씬 상의 빨간색 선은 씬뷰에서만 보이고 플레이 상에서는 보이지 않는다. 그리고 Cube에 Main Camera를 상속시키면 Cube를 비추며 카메라가 함께 이동하는 것을 볼 수 있다.
728x90
'게임 프로그래밍 > 유니티 프로젝트' 카테고리의 다른 글
VR 메타 퀘스트 컨트롤러 버튼 체크 및 오브젝트 이동을 위한 소스 코드 (0) | 2021.10.08 |
---|---|
유니티 오브젝트 이동 방법(Input, CharacterController, NavMeshAgent) (0) | 2021.10.08 |
유니티 Animation 기능을 사용하여 시계 애니메이션 만들기 (0) | 2021.10.07 |
[VR 개발]360 VR Capture를 통해 360 Panoramic 이미지 만들기 및 이미지 (0) | 2021.10.01 |
[VR 개발]HDR Panoramic 360 VR 이미지 만들기 (0) | 2021.09.30 |