直接挂载到模型上

using UnityEngine;
using System.Collections;public class OnDrag : MonoBehaviour
{//目标物体public Transform target;private int MouseWheelSensitivity = 1; //放大倍数的快慢private int MouseZoomMin = 1; //最小倍数private int MouseZoomMax = 5; //最大倍数//默认距离private float normalDistance = 3;private Vector3 normalized;//拖拽的移动速度private float xSpeed = 250.0f;private float ySpeed = 120.0f;//拖拽的高度限制private int yMinLimit = -20;private int yMaxLimit = 80;//角度private float x = 0.0f;private float y = 0.0f;//记录目标物体的坐标private Vector3 screenPoint;private Vector3 offset;//围绕x旋转30°private Quaternion rotation = Quaternion.Euler(new Vector3(30f, 0f, 0f));//目标的3D坐标private Vector3 CameraTarget;//打印欧拉角:绕各个轴旋转的角度,顺时针为正方向public void Awake(){target = transform;print(transform.eulerAngles.x);print(transform.eulerAngles.y);print(transform.eulerAngles.z);}void Start(){//找到目标飞机的3d坐标CameraTarget = target.position;//目标飞机的z-3,距离摄像机更近了float z = target.transform.position.z - normalDistance;//给当前相机给定位,现在的3D坐标乘以30°transform.position = rotation * new Vector3(transform.position.x, transform.position.y, z);//将视角转向物体transform.LookAt(target);//记录各个轴偏离的角度var angles = transform.eulerAngles;x = angles.y;y = angles.x;}void OnGUI(){GUI.Label(new Rect(10, 10, 300, 30), "左击:旋转;滚轮:缩放;中击:拖拽");}void Update(){//如果左击了,旋转if (Input.GetMouseButton(0)){x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;y = ClampAngle(y, yMinLimit, yMaxLimit);var rotation = Quaternion.Euler(y, x, 0);var position = rotation * new Vector3(0.0f, 0.0f, -normalDistance) + CameraTarget;transform.rotation = rotation;transform.position = position;}//滚轮缩放else if (Input.GetAxis("Mouse ScrollWheel") != 0){//摄像机3d坐标-物体的3d坐标normalized = (transform.position - CameraTarget).normalized;if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax){normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;}if (normalDistance < MouseZoomMin){normalDistance = MouseZoomMin;}if (normalDistance > MouseZoomMax){normalDistance = MouseZoomMax;}//改变摄像机的远近transform.position = normalized * normalDistance;}//案件按下 记录鼠标的else if (Input.GetMouseButtonDown(2)){//将目标物体的坐标转化成平面坐标screenPoint = Camera.main.WorldToScreenPoint(target.transform.position);//计算鼠标的3维坐标跟物体的3维坐标的差值offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));}//中键拖拽,改变飞机的坐标,每帧调用if (Input.GetMouseButton(2)){//鼠标的平面坐标Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);//鼠标转移的3d空间坐标值Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;//改变鼠标的3D空间坐标target.transform.position = curPosition;}//朝向,每动一帧都要改变朝向transform.LookAt(CameraTarget);}//控制旋转的角度,如果旋转的角度大于360或者小于360都要加上或者减去对应的角度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);}
}

unity3d鼠标拖拽模型,旋转模型相关推荐

  1. 3dmax java_Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能

    /**-------------------------------------------------代码区--------------------------------------------- ...

  2. CocosCreator3D鼠标拖拽相机旋转,第一人称旋转

    直接挂载到相机即可 import { _decorator, Component, math, UITransformComponent, EventTouch, Touch, Node, Label ...

  3. 【计算机图形】制作能够利用鼠标拖拽实现360度旋转的3D人体模型flash文件

    前段时间,由于要对参加挑战杯的系统进行改善,老师要求我们在系统当中添加一个可旋转的3D人体模型,于是俺陷入了深深的思考当中.之前一直都没有接触过3D模型的制作,而且老师这回给的时间又特紧,当时那个急呀 ...

  4. Unity-Live2d(鼠标拖拽触发动作变化)

    Unity-Live2D 概述:这是我学习Unity中Live2d的相关操作的一个笔记,欢迎各位同好和大牛的指点.(参考siki学院出的视频学的) 注:由于这个鼠标拖拽操作内容相较之前来说有点多,所以 ...

  5. html div 可鼠标滚动,js实现鼠标拖拽div左右滑动

    本文实例为大家分享了js鼠标拖拽div左右滑动的具体代码,供大家参考,具体内容如下 Title body{ position: relative; margin:0; padding:0; width ...

  6. 弹出框的鼠标拖拽事件

    几个与定位有关的概念: js: clientX/clientY属性:获得事件发生时鼠标指针在视口中的水平和垂直坐标. screenX/screenY属性:获取鼠标事件发生时鼠标光标相对于整个电脑屏幕的 ...

  7. 自动化测试之鼠标悬浮操作、双击、鼠标拖拽

    鼠标操作.封装在ActionChains中 -move_to_element -double_click 双击 -context_click right_click 右键 -drag_and_drop ...

  8. JavaFX鼠标拖拽事件

    一.节点原拖拽事件 //鼠标拖拽进入node node.setOnMouseDragEntered(event->{//do something });//鼠标拖拽退出node node.set ...

  9. java鼠标左键按下后拖动实现多选_鼠标拖拽多选功能

    鼠标拖拽多选功能 *{ box-sizing:border-box; } ul{ width:500px; height:auto; margin:0; padding:20px; font-size ...

最新文章

  1. 【iCore4 双核心板_FPGA】例程七:状态机实验——状态机使用
  2. C语言链表是否为循环表的算法(附完整源码)
  3. java类似sizeof_如何用Java编写类似C的Sizeof函数
  4. 各种语言的 Hello World
  5. 华图砖题库php文件怎么打印_事业单位招聘考试《工会基础知识》试题库及答案1380题...
  6. OPPO沈义人:OPPO即将量产全球最快的手机快充65W SuperVOOC
  7. 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...
  8. mysql5好还是8_定投扣款哪天好?周一还是周五,月末还是月初?(定投知识8)...
  9. ie8 js未指明的错误_DD_belatedPNG IE8 js报错问题解决
  10. Duplicate zip entry
  11. 如何快速提高产品互动能力?
  12. 关于MATLAB调用第三方程序
  13. HYSBZ 3991 寻宝游戏
  14. LOGO设计的五大原则
  15. java 引用数据类型Scanner类 Random类
  16. GitFlow 代码管理模型实战
  17. 如何编写Junit测试代码
  18. office中excel设置下拉框多选
  19. 如何通过BI构建一份企业经营报表
  20. 怎么把pdf中的某一页分出来?

热门文章

  1. 可靠性测试设备技术含量_电子产品可靠性测试及设备
  2. Android 测试教程
  3. 小派(PiMax)vr Artisan固件升级失败,没反应了
  4. java压测请求线程数_程序员撕开京东 618 大促压测的另一面 | 原力计划
  5. 过程 oracle 写在哪里,Oracle怎么写存储过程? 在什么地方写以及怎么调用?最好给个Sample 急(2)...
  6. python fromfile_python之numpy文件操作
  7. java语言提供结构_java学习之语句结构
  8. java sync_Java同步简介 - 加大装益达 - OSCHINA - 中文开源技术交流社区
  9. c语言 五子棋 悔棋代码,跪求C语言五子棋悔棋部分实现
  10. 2020兰大计算机学硕线,兰州大学2020年硕士研究生招生复试分数线