1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > unity 摄像头跟着鼠标移动_lwj_unity_模拟第一人称摄像机前后左右移动 摄像机随鼠标

unity 摄像头跟着鼠标移动_lwj_unity_模拟第一人称摄像机前后左右移动 摄像机随鼠标

时间:2021-04-13 03:04:47

相关推荐

unity 摄像头跟着鼠标移动_lwj_unity_模拟第一人称摄像机前后左右移动 摄像机随鼠标

(涉及角度范围限制、资源加载、预设体、屏幕坐标世界坐标互相转换)

//把主相机设置为FPS(空物体)的子物体,枪设置为主相机的字物体

public class FPS : MonoBehaviour {

public float speed;

//角度限制数值设置

public float MinimumX = -90;

public float MaximumX = 90;

//获取主相机

private Transform mCarmeraTransform;

//获取枪

private Transform mGunTransform;

//父物体旋转目标角度

private Quaternion mParentTargetRot;

//相机旋转目标角度

private Quaternion mCameraTargetRot;

//枪的旋转目标角度

private Quaternion mGunTargetRot;

// Use this for initialization

void Start () {

//隐藏光标

//Cursor.visible = false;

//用下标找子物体

mCarmeraTransform = transform.Find("Main Camera");

//mGunTransform = transform.GetChild(0);

//获取初始本地旋转角度

mParentTargetRot = transform.localRotation;

mCameraTargetRot = mCarmeraTransform.localRotation;

//mGunTargetRot = mGunTransform.localRotation;

}

// Update is called once per frame

void Update () {

//if (Input.GetKeyDown(KeyCode.Escape))

//{

// Cursor.visible = true;

//}

//直接调用方法

Move();

//旋转

float yRot = Input.GetAxis("Mouse X");

float xRot = Input.GetAxis("Mouse Y");

//获得物体旋转后的旋转角度

mParentTargetRot *= Quaternion.Euler(xRot, 0, 0);

mCameraTargetRot *= Quaternion.Euler(0, yRot, 0);

//mGunTargetRot *= Quaternion.Euler(0, yRot, 0);

//限制父物体角度移动范围

mParentTargetRot = ClampRotationAroundXAxis(mParentTargetRot);

//旋转设置为缓动

transform.localRotation = Quaternion.Slerp(transform.localRotation, mParentTargetRot, Time.deltaTime);

mCarmeraTransform.localRotation = Quaternion.Slerp(mCarmeraTransform.localRotation, mCameraTargetRot, Time.deltaTime);

//mGunTransform.localRotation = Quaternion.Slerp(mGunTransform.localRotation, mGunTargetRot, Time.deltaTime);

}

//使用WASD进行摄像机前后左右的位移

void Move(){

//位移

float hor = Input.GetAxis("Horizontal");

float ver = Input.GetAxis("Vertical");

transform.Translate(new Vector3(hor, 0, ver) * Time.deltaTime * speed);

}

//限制角度范围

Quaternion ClampRotationAroundXAxis(Quaternion q)

{

q.x /= q.w;

q.y /= q.w;

q.z /= q.w;

q.w = 1.0f;

float angleX = 2.0f * Mathf.Rad2Deg * Mathf.Atan(q.x);

angleX = Mathf.Clamp(angleX, MinimumX, MaximumX);

q.x = Mathf.Tan(0.5f * Mathf.Deg2Rad * angleX);

return q;

}

}

//鼠标点击创建一个球

public class CreatBall : MonoBehaviour {

private GameObject ballPerfab;

private float z;

// Use this for initialization

void Start () {

ballPerfab = Resources.Load("Ball");

Transform plane = GameObject.Find("Plane").transform;

z = Camera.main.WorldToScreenPoint(plane.position).z;

}

// Update is called once per frame

void Update () {

//世界坐标 position

//本地坐标 localposition

//屏幕坐标 => 世界坐标 ScreenToWorld

//世界坐标 => 屏幕坐标 WorldToScreen

//视口坐标(0,1) 屏幕左下角为(0,0)

if (Input.GetMouseButtonDown(0))

{

Vector3 screenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, z);

Vector3 worldPosition = Camera.main.ScreenToWorldPoint(screenPoint);

GameObject ball = Instantiate(ballPerfab, worldPosition, Quaternion.identity);

}

}

}

unity 摄像头跟着鼠标移动_lwj_unity_模拟第一人称摄像机前后左右移动 摄像机随鼠标移动旋转 鼠标点击添加物体...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。