Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
[RequireComponent(typeof (Camera))]
public class CameraController : MonoBehaviour
{
public Transform tarFirst;
public Transform tarSecond;
public float targetRadius = 3;
public float cameraElevation = 1.5f;
public float centerPointElevation = 1;
private Camera cam;
void Start()
{
cam = GetComponent<Camera>();
}
void Update()
{
Vector3 firstPos = tarFirst.position;
Vector3 secondPos = tarSecond.position;
firstPos.y = 0;
secondPos.y = 0;
float bc = Vector3.Distance(firstPos, secondPos)/2/cam.aspect + targetRadius;
float ac = bc/Mathf.Tan(cam.fieldOfView/2*Mathf.Deg2Rad);
Vector3 toFirstVect = tarFirst.position - tarSecond.position;
Vector3 center = tarSecond.position+(toFirstVect)/2;
Vector3 cross = Vector3.Cross(toFirstVect.normalized, Vector3.up);
cross = center + cross.normalized*ac;
cam.transform.position = cross+Vector3.up*cameraElevation;
cam.transform.forward = center+Vector3.up*centerPointElevation - cam.transform.position;
}
}
using System.Collections;
[RequireComponent(typeof (Camera))]
public class CameraController : MonoBehaviour
{
public Transform tarFirst;
public Transform tarSecond;
public float targetRadius = 3;
public float cameraElevation = 1.5f;
public float centerPointElevation = 1;
private Camera cam;
void Start()
{
cam = GetComponent<Camera>();
}
void Update()
{
Vector3 firstPos = tarFirst.position;
Vector3 secondPos = tarSecond.position;
firstPos.y = 0;
secondPos.y = 0;
float bc = Vector3.Distance(firstPos, secondPos)/2/cam.aspect + targetRadius;
float ac = bc/Mathf.Tan(cam.fieldOfView/2*Mathf.Deg2Rad);
Vector3 toFirstVect = tarFirst.position - tarSecond.position;
Vector3 center = tarSecond.position+(toFirstVect)/2;
Vector3 cross = Vector3.Cross(toFirstVect.normalized, Vector3.up);
cross = center + cross.normalized*ac;
cam.transform.position = cross+Vector3.up*cameraElevation;
cam.transform.forward = center+Vector3.up*centerPointElevation - cam.transform.position;
}
}