unity3d 模型旋转、缩放、拖动
2015-06-29 16:26
288 查看
using UnityEngine; using System.Collections; public class MouseEvent : MonoBehaviour { public Transform target; private float xSpeed = 250.0f; //private float ySpeed = 120.0f; private float speed=20.0F; private float x = 0.0f; private float y = 0.0f; private Quaternion mRotation; public float Damping=10F; private Vector3 offset; private Vector3 mousePosition; private float distance = 10.0f; private float height = 5.0f; private float rotationDamping; private float heightDamping; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetMouseButton (0)) { // Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hit; if (Physics.Raycast (ray, out hit)) { //旋转 x -= Input.GetAxis("Mouse X") * xSpeed * 0.02F; y =target.position.y; // Input.GetAxis("Mouse Y")* ySpeed * 0.02F; //transform.position.y; // //手机触摸情况 //x -= Input.GetTouch (0).deltaPosition.x * xSpeed * 0.02F; //y = Input.GetTouch (0).deltaPosition.y * ySpeed * 0.02F; //y = ClampAngle(y,xSpeed,ySpeed); mRotation = Quaternion.Euler (y, x, 0); target.rotation = Quaternion.Lerp (target.rotation, mRotation, Time.deltaTime * Damping); } }else if (Input.GetAxis ("Mouse ScrollWheel") != 0) { //Zoom out if (Input.GetAxis ("Mouse ScrollWheel") < 0) { if (Camera.main.fieldOfView <= 100) Camera.main.fieldOfView += 2; if (Camera.main.orthographicSize <= 20) Camera.main.orthographicSize += 0.5F; } //Zoom in if (Input.GetAxis ("Mouse ScrollWheel") > 0) { if (Camera.main.fieldOfView > 2) Camera.main.fieldOfView -= 2; if (Camera.main.orthographicSize >= 1) Camera.main.orthographicSize -= 0.5F; } } if (Input.GetMouseButton (2)) { /* Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position); Vector3 offset = transform.position -Camera.main.ScreenToWorldPoint(new Vector3(mousePosition.x, screenSpace.y, screenSpace.z)); //Vector3 offset = transform.position -Camera.main.ScreenToWorldPoint(new Vector3(Input.GetTouch(0).deltaPosition.x, screenSpace.y, screenSpace.z)); Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, screenSpace.y, screenSpace.z); //Vector3 curScreenSpace = new Vector3(Input.GetTouch(0).deltaPosition.x, screenSpace.y, screenSpace.z); Vector3 ss=transform.position+offset; transform.position = ss; */ target.position -= Vector3.right * Time.deltaTime*Input.GetAxis ("Mouse X") * speed; target.position += Vector3.up * Time.deltaTime*Input.GetAxis ("Mouse Y")* speed; } } void OnGUI () { Event Mouse = Event.current; //鼠标双击事件 if (Mouse.isMouse && Mouse.type == EventType.MouseDown && Mouse.clickCount == 2) { //target.position = new Vector3(Input.GetAxis ("Mouse X")+10.0f,target.position.y,target.position.z+10.0f); // Calculate the current rotation angles var wantedRotationAngle = target.eulerAngles.y; var wantedHeight = target.position.y + height; var currentRotationAngle = transform.eulerAngles.y; var currentHeight = transform.position.y; // Damp the rotation around the y-axis currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime); // Damp the height currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime); // Convert the angle into a rotation var currentRotation = Quaternion.Euler(0, currentRotationAngle, 0); // Set the position of the camera on the x-z plane to: // distance meters behind the target transform.position = target.position; transform.position -= currentRotation * Vector3.forward * distance; // Set the height of the camera transform.position = new Vector3(transform.position.x ,currentHeight , transform.position.z); // Always look at the target transform.LookAt(target); } } #region ClampAngle 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); } #endregion }
相关文章推荐
- Unity-Shader Sublime 自制shader提示插件
- 【Unity开发实战】官方实例SURVIVAL SHOOTER开发心得
- unity中Image显示android手机SD卡中的图片
- Unity3D中摄像机常用技巧Dolly&nbs…
- Unity3D中的Grobal Illuminit…
- unity3D中阴影渲染的shadow a…
- UnityC# MD5验证
- Unity3D学习笔记第一课
- unity, List namespace
- unity5, UGUI刺穿问题解法
- unity架构原则(摸索、增补中)
- (译)Cg Programming/Unity(Cg编程/Unity)
- Unity3D之AssetBundle学习:Android上运行笔记
- [Unity-24] Unity的四种加载场景的方法
- unity手游《摩卡世界online》全套源码(服务端+客户端+数据库)
- unity资源管理
- Unity炸弹爆炸伤害(群攻伤害)
- 学习笔记:Unity战斗卡牌游戏(一)-----NGUI基础组件使用及代码修改获取
- 游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
- unity, remove a scene from build settings