38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
using UVC.Core;
|
|
|
|
namespace UVC.Factory
|
|
{
|
|
public class CameraController : SingletonScene<CameraController>
|
|
{
|
|
public float moveSpeed = 5.0f;
|
|
public float rotateSpeed = 100.0f;
|
|
|
|
private Coroutine focusCoroutine;
|
|
|
|
|
|
public void FocusOnTarget(Transform target, float distance)
|
|
{
|
|
if (focusCoroutine != null)
|
|
{
|
|
StopCoroutine(focusCoroutine);
|
|
}
|
|
focusCoroutine = StartCoroutine(FocusRoutine(target, distance));
|
|
}
|
|
|
|
private IEnumerator FocusRoutine(Transform target, float distance)
|
|
{
|
|
Vector3 targetPosition = target.position - transform.forward * distance;
|
|
Quaternion targetRotation = Quaternion.LookRotation(target.position - transform.position);
|
|
|
|
while (Vector3.Distance(transform.position, targetPosition) > 0.01f)
|
|
{
|
|
transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * moveSpeed);
|
|
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * rotateSpeed);
|
|
yield return null;
|
|
}
|
|
}
|
|
}
|
|
}
|