当前位置: 代码迷 >> 综合 >> u3d 相机跟随角色行走
  详细解决方案

u3d 相机跟随角色行走

热度:95   发布时间:2024-01-28 01:43:16.0
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CameraFlow : MonoBehaviour
{//目标物体public GameObject target;//相机与目标物体的距离public float distance;//横向角度public float rotDegree = 0;public float rotSpeed = 0.2f;float rot; //弧度//纵向角度public float rollDegree = 30;public float rollSpeed = 0.2f;public float minRollDegree = 0;public float maxRollDegree = 70;float roll; //弧度//摄像机移动速度(滚轮控制)public float zoomSpeed = 1.5f;public float minDis = 8;public float maxDis = 22;// Use this for initializationvoid Start(){//target = GameObject.Find("tank");//GetTarget(target);}// Update is called once per framevoid Update(){if (Input.GetMouseButton(1)){Rotate();Roll();}Zoom();//角度转换成弧度rot = rotDegree * Mathf.PI / 180;roll = rollDegree * Mathf.PI / 180;//计算相机的地面投影和相机高度float d = distance * Mathf.Cos(roll);float height = distance * Mathf.Sin(roll);Vector3 cameraPos;//计算相机的坐标cameraPos.x = target.transform.position.x + d * Mathf.Cos(rot);cameraPos.z = target.transform.position.z + d * Mathf.Sin(rot);cameraPos.y = target.transform.position.y + height;Camera.main.transform.position = cameraPos;Camera.main.transform.LookAt(target.transform.position);}//鼠标水平滑动调整视角void Rotate(){float value = Input.GetAxis("Mouse X");rotDegree -= value * rotSpeed;}//鼠标垂直方向调整视角void Roll(){float value = Input.GetAxis("Mouse Y");rollDegree -= value * rollSpeed;rollDegree = Mathf.Clamp(rollDegree, minRollDegree, maxRollDegree);}//滚轮调整视角的远近void Zoom(){float value = Input.GetAxis("Mouse ScrollWheel");distance -= value * zoomSpeed;distance = Mathf.Clamp(distance, minDis, maxDis);}//让相机始终跟随目标物体身上的某一点void GetTarget(GameObject target){if (target.transform.Find("cameraPoint") != null){this.target = target.transform.Find("cameraPoint").gameObject;}else{return;}}
}

 

  相关解决方案