1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > unity鼠标控制镜头旋转_unity3D鼠标滚轮来实现镜头拉近拉远及视角旋转

unity鼠标控制镜头旋转_unity3D鼠标滚轮来实现镜头拉近拉远及视角旋转

时间:2019-07-20 06:15:04

相关推荐

unity鼠标控制镜头旋转_unity3D鼠标滚轮来实现镜头拉近拉远及视角旋转

镜头拉近拉远的代码(无限拉远拉近)

代码如下:

if( Input.GetAxis("Mouse ScrollWheel") != 0 )

{

this.gameObject.transform.Translate(new Vector3(0,0,Input.GetAxis("Mouse ScrollWheel")*Time.deltaTime*500));

}

上述代码放在Update ()函数中,其中gameObject是摄像机或者物体对象,500是可以调节的参数。方法非常简单。

上述方法虽然能实现,但是太简单下面来个完整代码如下(只要把这个脚本绑定到相机上就OK);

实现:右键转动视角和镜头拉伸(拉动有范围)

///

/// Mouse orbit.

/// This script use to control a main camera

///

using UnityEngine;

using System.Collections;

public class MouseOrbit : MonoBehaviour {

[HideInInspector]

public GameObject target; //a target look at

public float xSpeed; //speed pan x

public float ySpeed; //speed pan y

public float yMinLimit; //y min limit

public float yMaxLimit; //y max limit

public float scrollSpeed; //scroll speed

public float zoomMin; //zoom min

public float zoomMax; //zoom max

//Private variable

private float distance;

private float distanceLerp;

private Vector3 position;

private bool isActivated;

private float x;

private float y;

private bool setupCamera;

// Use this for initialization

void Start () {

//Warning when not found target

if(target == null)

{

target = GameObject.FindGameObjectWithTag("Player");

if(target == null)

{

Debug.LogWarning("Don't found player tag please change player tag to Player");

}

}

//Setup Pos

Vector3 angles = transform.eulerAngles;

x = angles.y;

y = angles.x;

CalDistance();

}

void LateUpdate () {

ScrollMouse();

RotateCamera();

}

//Roate camera method

void RotateCamera()

{

if (Input.GetMouseButtonDown(1)){

isActivated = true;

}

// if mouse button is let UP then stop rotating camera

if (Input.GetMouseButtonUp(1))

{

isActivated = false;

}

if (target && isActivated) {

y -= Input.GetAxis("Mouse Y") * ySpeed;

x += Input.GetAxis("Mouse X") * xSpeed;

y = ClampAngle(y, yMinLimit, yMaxLimit);

Quaternion rotation = Quaternion.Euler(y, x, 0);

Vector3 calPos = new Vector3(0, 0, -distanceLerp);

position = rotation * calPos + target.transform.position;

transform.rotation = rotation;

transform.position = position;

} else

{

Quaternion rotation = Quaternion.Euler(y, x, 0);

Vector3 calPos = new Vector3(0, 0, -distanceLerp);

position = rotation * calPos + target.transform.position;

transform.rotation = rotation;

transform.position = position;

}

}

//Calculate Distance Method

void CalDistance()

{

distance = zoomMax;

distanceLerp = distance;

Quaternion rotation = Quaternion.Euler(y, x, 0);

Vector3 calPos = new Vector3(0, 0, -distanceLerp);

position = rotation * calPos + target.transform.position;

transform.rotation = rotation;

transform.position = position;

}

//Scroll Mouse Method

void ScrollMouse()

{

distanceLerp = Mathf.Lerp(distanceLerp,distance,Time.deltaTime * 5);

if (Input.GetAxis("Mouse ScrollWheel") != 0 && !GUI_Menu.instance.CheckHoverItemShop() && !GUI_Menu.instance.CheckHoverSkillWindow())

{

// get the distance between camera and target

distance = Vector3.Distance (transform.position , target.transform.position);

distance = ScrollLimit(distance - Input.GetAxis("Mouse ScrollWheel")*scrollSpeed, zoomMin, zoomMax);

}

}

//Scroll Limit Method

float ScrollLimit(float dist, float min, float max)

{

if (dist < min)

dist= min;

if (dist > max)

dist= max;

return dist;

}

//Clamp Angle Method

float ClampAngle(float angle,float min,float max)

{

if(angle < -360)

angle += 360;

if(angle > 360)

angle -= 360;

return Mathf.Clamp(angle,min,max);

}

}

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