Unity3d实现鼠标控制相机绕物体旋转(带阻尼)
Unity3d实现鼠标控制相机绕物体旋转(带阻尼)
本来想的是用四元数实现球性插值实现阻尼效果,但是不知道四元数怎么绕定点旋转。因此用速度衰减的方法进行实现。
1.实现鼠标控制相机带阻尼旋转
2.实现鼠标中键放大鼠标所在位置的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class rotate1 : MonoBehaviour{public Transform CenObj;//围绕的物体public float ratio = 1.0f;//放大缩小速率public float min_distance = 5.0f; //相机距物体最小距离public float max_distance = 10.0f;//相机距物体最大距离//滑动结束时的瞬时速度Vector3 Speed = Vector3.zero;//每帧偏差Vector3 offSet = Vector3.zero;//速率衰减值public float decelerationRate = 0.2f;private Vector3 Rotion_Transform;private new Camera camera;void Start(){camera = GetComponent<Camera>();Rotion_Transform = CenObj.position;}void Update(){Ctrl_Cam_Move();Cam_Ctrl_Rotation();}//镜头的远离和接近public void Ctrl_Cam_Move(){Vector3 mousePos = camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.1f));if (Input.GetAxis("Mouse ScrollWheel") > 0 && Vector3.Distance(CenObj.position,camera.transform.position)>min_distance) //放大{camera.transform.position -= ratio * (camera.transform.position - mousePos);}if (Input.GetAxis("Mouse ScrollWheel") < 0 && Vector3.Distance(CenObj.position,camera.transform.position)<max_distance) //缩小{camera.transform.position += ratio * (camera.transform.position - mousePos);}}//摄像机的旋转public void Cam_Ctrl_Rotation(){var mouse_x = Input.GetAxis("Mouse X");//获取鼠标X轴移动var mouse_y = -Input.GetAxis("Mouse Y");//获取鼠标Y轴移动if(Input.GetMouseButton(0)){offSet.x = mouse_x;offSet.y = mouse_y;//瞬时速度Speed = offSet / Time.deltaTime;}else{Speed *= Mathf.Pow(decelerationRate, Time.deltaTime);if (Mathf.Abs(Vector3.Magnitude(Speed)) < 1){Speed = Vector3.zero;}}Move(Speed);}public void Move(Vector3 speed){if(Vector3.Magnitude(speed)==0){return;}Debug.Log("Move");transform.RotateAround(Rotion_Transform, Vector3.up, speed.x*Time.deltaTime*2.0f);transform.RotateAround(Rotion_Transform, transform.right, speed.y*Time.deltaTime*2.0f);}}
Unity3d实现鼠标控制相机绕物体旋转(带阻尼)相关推荐
- Unity/c#鼠标右键控制相机围绕物体旋转/滚轮控制远近
鼠标右键控制相机围绕物体旋转/滚轮控制远近 #c#代码` 鼠标右键控制相机围绕物体旋转/滚轮控制远近 using System.Collections; using System.Collection ...
- Unity鼠标控制摄像机 围绕物体旋转
Unity鼠标控制摄像机 围绕物体旋转 角度范围判定 // An highlighted block using UnityEngine;public class CameraCtrl : MonoB ...
- 【Unity】Unity实现鼠标控制摄像机围绕物体旋转镜头 滑轮控制远近
在游戏和一些产品展示等项目中会有让摄像机围绕某个物体进行旋转这种需求 下面展示的代码是个删减版的 只保留了主要功能 限制的方面都删除了 在原有的代码中有 移动摄像机功能 围绕的点不做限制每 ...
- 相机漫游,绕物体旋转及缩放(Android及手机端通用)
缩放有两种方式:一种改变相机的视距还有一种直接改变相机的位置们这里我们使用第二种方法: 旋转:绕自身旋转和绕物体旋转, 这里我们也是使用第二种: 其中的阀值需要自己控制. 有一些相机的角度位置离物体中 ...
- Unity 在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小
在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小 鼠标和触屏的操作 下面展示一些 内联代码片. using System; using System.Colle ...
- Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理
Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 目录 Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 ...
- 解决Unity3D中多层级结构子物体旋转受父物体尺寸影响的问题
前言 在使用unity3D进行场景设计和物体控制的过程中,多层物体嵌套是经常会用到的一个结构.多层级物体中,每个层次的物体可能都会有子物体,这就导致了子物体的一些行为会收到父物体参数的影响.本文讨论子 ...
- Cesium 键盘鼠标控制相机漫游(源码+原理讲解)
Cesium 键盘鼠标控制相机漫游(源码+原理讲解) 在各大博客平台上,Cesium使用键盘控制相机漫游的源码已经有不少人贴出源码,本人在浏览这些源码的过程中发现大家采用的方式基本一致,大部分代码都是 ...
- unity3D 鼠标控制物体旋转带阻尼效果
最近做了一个鼠标拖拽360°旋转查看物体的功能,很基础的一个功能,代码不多写的很快 但是最后出来的效果不是很满意,感觉没有灵魂,很死板僵硬,所以做了一点小修改,在鼠标拖拽结束时计算最后鼠标的加速度,让 ...
最新文章
- python3 字符串 转 整型
- 关于Tomcat安装过程中出现的一些问题...
- UltraEdit v18及注册
- oracle11告警日志,oracle 11.2.0.4 告警日志里错误
- SQL文档阅读笔记-对水平分区和垂直分区理解
- 转载--ASP解决AJAX带来的码问题
- 杭电OJ分类题目(1)
- [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
- Excel 甘特图 一行公式 极简版
- android 动态改变字体大小
- autodesk fbx sdk sample里面的工程无法调试解决方法
- MATLAB中表示点形状、颜色的常见符号
- 优盘婚礼MP4视频播放内容不全的文件修复技术
- 自己动手写操作系统第三章pmtest7源码解析——检测系统内存
- JS jQuery 赋值取值整理
- Google账户结构
- 「人物特写」清华大学教授、IEEE Fellow王志华:几乎所有的AI,到现在为止都是胡扯...
- windows下使用GRUB2 制作支持BIOS和UEFI的WINPE、LINUX、MAXDOS多引导U盘
- “Memo桌面便笺”总结
- 免费的系统压力测试方法/工具有哪些?企业如何做好软件压力测试
热门文章
- linux usb 总线驱动程序,Linux下的USB总线驱动
- 从卖电脑到卖服务应从培训CEO开始
- 顺瓜摸藤--策划人的系统观和方法论
- 2016 Google hosts 持续更新【更新于:2016-04-10】
- python中i表示什么_python中::-1代表什么?
- 活期储蓄帐目管理 课程设计 c语言,活期储蓄帐目管理.docx
- 对32位单片机串口的理解
- java aot,Java三种编译方式: 前端编译 JIT编译 AOT编译
- 深圳物联网培训:要想成为一名物联网工程师,需要学习哪些知识?
- 解决ROS中rosdep init 网络地址无法访问