操作物体任意方向旋转的三种方法
来源:互联网 发布:淘游戏号软件 编辑:程序博客网 时间:2024/06/02 07:29
方法一:
private Transform hitTransfrom; void Update(){ if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray mouseray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(mouseray, out hit)) { hitTransfrom = hit.transform; } } else if (Input.GetMouseButtonUp(0)) { hitTransfrom = null; } if (hitTransfrom) { Matrix4x4 localmatrix = hitTransfrom.worldToLocalMatrix; Vector3 vUp = localmatrix.MultiplyVector(new Vector3(0, 1, 0)); Vector3 vRight = -localmatrix.MultiplyVector(new Vector3(1, 0, 0)); float fMoveX = -Input.GetAxis("Mouse X") * Time.deltaTime * 200.0f; Quaternion rotation = Quaternion.AngleAxis(fMoveX, vUp); hitTransfrom.localRotation *= rotation; float fMoveY = -Input.GetAxis("Mouse Y") * Time.deltaTime * 200.0f; Quaternion rotoy = Quaternion.AngleAxis(fMoveY, vRight); hitTransfrom.localRotation *= rotoy; }}
方法二:
using UnityEngine;using System.Collections; public class DragRotate : MonoBehaviour{ void OnMouseDrag () { this.transform.Rotate(new Vector3(Input.GetAxis("Mouse Y"),-Input.GetAxis("Mouse X"),0)*6f,Space.World); } }
方法三:
using UnityEngine;using System.Collections; public class DragRotate : MonoBehaviour{ private bool onDrag = false; public float speed = 6f; private float tempSpeed; private float axisX; private float axisY; void OnMouseDrag () { onDrag = true; axisX=-Input.GetAxis ("Mouse X"); axisY=Input.GetAxis ("Mouse Y"); } float Rigid () { if (onDrag) { if (tempSpeed < speed) { tempSpeed += speed * Time.deltaTime*5; }else{ tempSpeed=speed; } } else { if(tempSpeed>0){ tempSpeed-=speed * Time.deltaTime; }else{ tempSpeed = 0; } } return tempSpeed; } void Update () { this.transform.Rotate (new Vector3 (axisY, axisX, 0) * Rigid (), Space.World); if (!Input.GetMouseButton (0)) { onDrag = false; } }}
另外加入了缩放的代码,缩放、自动旋转、拖拽物体的综合:
using UnityEngine;using System.Collections; public class ZoomAndDrag : MonoBehaviour { public Camera MainCamera; public float ZoomMin; //滚轮的最小值 public float ZoomMax; //滚轮的最大值 private float normalDistance; //设置摄像机的景深值 private float MouseWheelSencitivity = 10.0f; //鼠标灵敏度,就是缩放的速度的快慢 private float axisX; private float axisY; public float speed = 6f; private float tempSpeed; private bool RoationOnly; void Start () { normalDistance = 50.0f; ZoomMin = 20.0f; ZoomMax = 100.0f; RoationOnly = true; } void Update () { Roation(); Zoom(); this.transform.Rotate(new Vector3(axisY, axisX, 0) * Rigid(), Space.World); //物体旋转的方法 } //自动旋转物体的方法,放在Update中调用 void Roation() { if (RoationOnly) { gameObject.transform.Rotate(Vector3.up * Time.deltaTime * 10); } } /**** *鼠标滚轮缩放物体的方法 * * **/ void Zoom() { if (Input.GetAxis("Mouse ScrollWheel") != 0) { if (normalDistance >= ZoomMin && normalDistance <= ZoomMax) { normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSencitivity; } if (normalDistance < ZoomMin) { normalDistance = ZoomMin; } if (normalDistance > ZoomMax) { normalDistance = ZoomMax; } MainCamera.fieldOfView = normalDistance; } } /*** * * 鼠标左键控制物体360°旋转+惯性 * **/ float Rigid() { if (Input.GetMouseButton(0)) { RoationOnly = false; //当鼠标按下的时候,停止自动旋转 axisX = Input.GetAxis("Mouse X"); axisY = Input.GetAxis("Mouse Y"); if (tempSpeed < speed) { tempSpeed += speed * Time.deltaTime * 5; } else { tempSpeed = speed; } } else { RoationOnly = true; //当鼠标没有按下的时候,恢复自动旋转 if (tempSpeed > 0) { tempSpeed -= speed * Time.deltaTime; } else { tempSpeed = 0; } } return tempSpeed; }}
- 操作物体任意方向旋转的三种方法
- 总结圣典中操作物体任意方向旋转的三种方法
- 总结圣典中操作物体任意方向旋转的三种方法
- Unity任意方向拉伸物体
- XNA中三维空间物体的几种旋转方法
- unity的三种物体移动方法
- 创建游戏物体的三种方法
- 拖动模型任意方向旋转
- 如何framework层任意设置Android屏幕的旋转方向
- 利用framework层任意设置Android屏幕的旋转方向
- 如何framework层任意设置Android屏幕的旋转方向
- [摘]探讨:物体绕任意向量的旋转-四元数法VS.旋转矩阵法的性能比较
- (转载)探讨:物体绕任意向量的旋转-四元数法VS.旋转矩阵法的性能比较
- 转载:探讨:物体绕任意向量的旋转-四元数法VS.旋转矩阵法的性能比较
- 物体绕任意向量的旋转——四元数法、旋转矩阵法、欧拉角法的比较
- 探讨:物体绕任意向量的旋转-四元数法VS.旋转矩阵法的性能比较
- DirectX 让物体绕任意轴旋转
- Unity游戏开发的数学与物理 3 ( 让物体延任意方向移动 )
- 40个超酷的jQuery动画教程
- spring学习笔记 (五)Spring&Jdbc整合入门
- ZOJ 3620 Escape Time II(floyd+dfs)
- iOS图片拉伸技巧
- JS 本周-本月
- 操作物体任意方向旋转的三种方法
- grub rescue模式下修复
- 永宏B1系列PLC是否有电池?
- 不再以讹传讹,GET和POST的真正区别
- QTreeWidget 和QTreeWidgetItem用法总结
- C++各大有名库的介绍
- strstr( )函数用法——来源于网络
- tile-eclipse启动失败的问题
- paip.软件版本完善计划C426fromVC423