相机旋转
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cameraRotate : MonoBehaviour {
public float sensitivity = 2;
public float smoothing = 5;
private float MouseX;
private float MouseY;
private Vector2 mouseLook;
private Vector2 mouseWatch;
public float minAngle = -15;
public float maxAngle = 30;
// Use this for initialization
void Start () {
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update () {
Vector2 md = new Vector3(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
md = Vector2.Scale(md, Vector3.one * sensitivity * smoothing);
mouseWatch.x = Mathf.Lerp(mouseWatch.x, md.x, 1 / smoothing);
mouseWatch.y = Mathf.Lerp(mouseWatch.y,md.y,1/smoothing);
mouseLook += mouseWatch;
mouseLook.y = Mathf.Clamp(mouseLook.y,minAngle,maxAngle);
transform.localRotation = Quaternion.Euler(-mouseLook.y,mouseLook.x,0);
}
}
相机射线检测碰撞
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class anotherCameraCollision : MonoBehaviour {
public float minDistance = 1;
public float maxDistance = 2;//设置镜头拉近,拉远的最大距离,和最小距离
public int smoothing = 10;
public int CamSpeed = 10;
private float distance;
private Vector3 cameraDir; //camera的本地方向
private float initCamDistance; //刚开始camera距父跟随物体的距离
// Use this for initialization
void Start () {
cameraDir = (transform.position - transform.parent.position).normalized; //通过这种方式求出来的是transform.localPosition是本地坐标,
//本地坐标不能用于射线检测,要用世界坐标。
initCamDistance = (transform.parent.position - transform.position).magnitude;
distance = initCamDistance;
}
// Update is called once per frame
void Update () {
RaycastHit hit;
Vector3 targetEndCast = transform.TransformPoint(cameraDir*distance);//求出射线检测的终止点,由于camera位置是过渡赋值,所以一定远于distance
if (Physics.Linecast(transform.parent.position,targetEndCast,out hit))
{
distance = Mathf.Lerp(minDistance,maxDistance,1/smoothing);
}
else
{
distance = maxDistance;
}
transform.localPosition = Vector3.Lerp(transform.localPosition,distance*cameraDir,Time.deltaTime*CamSpeed);
}
}