方法一:简单但是如果物体运动到障碍物前面会遮挡人物,
在这里插入代码片using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class camer_move : MonoBehaviour {
public Transform player;
private Vector3 offset;
// Use this for initialization
void Start () {
offset = transform.position - player.position;
}
// Update is called once per frame
void Update () {
transform.position = player.position + offset;
}
}
方法二:摄像头一直跟随人物不会被障碍物遮挡
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class camera : MonoBehaviour
{
private Transform ThirdPersonController;
private Vector3 offset;
private void Awake()
{
ThirdPersonController = GameObject.FindWithTag("player").transform;
offset = transform.position - ThirdPersonController.position;
offset = new Vector3(0, offset.y, offset.z);
}
void Update()
{
Vector3 startPos = ThirdPersonController.position + offset;
Vector3 endPos = ThirdPersonController.position + offset.magnitude * Vector3.up;
Vector3[] points = new Vector3[]
{
startPos,
Vector3.Lerp(startPos,endPos,0.25f),
Vector3.Lerp(startPos,endPos,0.5f),
Vector3.Lerp(startPos,endPos,0.75f),
endPos
};
Vector3 target = points[0];
for (int i = 0; i < points.Length; i++)
{
RaycastHit hit;
if (Physics.Raycast(points[i], ThirdPersonController.position - points[i], out hit))
{
if (hit.collider.tag == "player" || hit.collider.tag =="Camera" || hit.collider.tag == "Laser")
{
target = points[i];
break;
}
}
else
{
target = points[i];
break;
}
}
transform.position = Vector3.Lerp(transform.position, target, Time.deltaTime * 10);
Quaternion rotate = transform.rotation;
transform.LookAt(ThirdPersonController.position);
transform.rotation = Quaternion.Lerp(rotate, transform.rotation, Time.deltaTime * 10);
}
}