Unity鼠标自由查看3D物体之直接旋转物体

来源:互联网 发布:microsoftoutlook mac 编辑:程序博客网 时间:2024/05/22 06:24

需要将要查看的物体通过两层包装。

第一层为Tile,作为垂直方向旋转

第二层为Spin,作为水平旋转。

也就是Tile下面有一个子物体叫Spin,Spin下面再放要自由查看的3D物体。

然后给Tile和Spin都加下面的这段代码,注意里面有一个属性是IsTile,如果放在Tile上面这个就需要勾选。

using UnityEngine;using System.Collections;public class SpinObject : MonoBehaviour {public float RotationSpeed = 50;private float resultX = 0;private float resultY = 0;public bool isTile=true;public float tileMinAngle = 0f; //垂直方向的旋转限制public float tileMaxAngle = 90; <span style="font-family: Arial, Helvetica, sans-serif;">//垂直方向的旋转限制</span>private Vector3 mousePostion;void Start(){if ( !(Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer)) {RotationSpeed*=10;}}void Update()  {  if (Input.GetMouseButton(0))  {  Vector3 currentMousePos = Input.mousePosition;float deltaX = Input.GetAxis("Mouse X");float deltaY = Input.GetAxis("Mouse Y");if (Input.touchCount > 0){deltaX = Input.touches[0].deltaPosition.x;deltaY = Input.touches[0].deltaPosition.y;}resultX = -deltaX*RotationSpeed*Time.deltaTime;resultY = deltaY*RotationSpeed*Time.deltaTime;}  if(!isTile){if(resultX!=0){resultX = Mathf.Lerp(resultX,0,0.25f);if(Mathf.Abs(resultX)>0.01f){transform.Rotate(Vector3.up*resultX);}}}else{if(resultY!=0){resultY = Mathf.Lerp(resultY,0,0.25f);if(Mathf.Abs(resultY)>0.01f){float rotaX = (transform.right*resultY).x+transform.localEulerAngles.x;rotaX = ClampAngle(rotaX,tileMinAngle,tileMaxAngle);transform.localRotation = Quaternion.Euler(rotaX,transform.localEulerAngles.y,0);}}}} static float ClampAngle (float angle ,float min ,float max ) {if (angle < -360)angle += 360;if (angle > 360)angle -= 360;return Mathf.Clamp (angle, min, max);}}


0 0
原创粉丝点击