【unity】鼠标拖拽实现摄像机围绕物体视角旋转(物体不动、摄像机旋转)
直接贴效果和源码了

using UnityEngine; public class StagitCamController : MonoBehaviour
{ // 旋转的目标点
public Transform target;
public float distance = 5.0f; public Vector3 startRotation; public float xSpeed = 120.0f;
public float ySpeed = 120.0f; public float yMinLimit = -20f;
public float yMaxLimit = 80f; public float distanceMin = .5f;
public float distanceMax = 15f; float x = 0.0f;
float y = 0.0f; private bool init = false; // 初始角度设置
void Start ()
{
Vector3 angles = transform.eulerAngles;
x = angles.y;
y = angles.x; }
void LateUpdate ()
{
if (target)
{ if (Input.GetMouseButton (0) || Input.GetAxis ("Mouse ScrollWheel") != 0.0f || !init) {
x += Input.GetAxis ("Mouse X") * xSpeed * distance * 0.02f;
y -= Input.GetAxis ("Mouse Y") * ySpeed * 0.02f; //y = ClampAngle (y, yMinLimit, yMaxLimit); Quaternion rotation = Quaternion.Euler (y + startRotation.x, x + startRotation.y, 0 + startRotation.z); distance = Mathf.Clamp (distance - Input.GetAxis ("Mouse ScrollWheel") * 5, distanceMin, distanceMax); RaycastHit hit;
if (Physics.Linecast (target.position, transform.position, out hit)) {
distance -= hit.distance;
}
Vector3 negDistance = new Vector3 (0.0f, 0.0f, -distance);
Vector3 position = rotation * negDistance + target.position; transform.rotation = rotation;
transform.position = position;
init = true;
}
}
} public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp(angle, min, max);
}
}
【unity】鼠标拖拽实现摄像机围绕物体视角旋转(物体不动、摄像机旋转)的更多相关文章
- 【转】C#.net拖拽实现获得文件路径
C#.net拖拽实现获得文件路径 作者Attilax , EMAIL:1466519819@qq.com 思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等), ...
- 【WPF】一些拖拽实现方法的总结(Window,UserControl)
原文:[WPF]一些拖拽实现方法的总结(Window,UserControl) 原文地址 https://www.cnblogs.com/younShieh/p/10811456.html 前文 本文 ...
- 【狼】unity 鼠标拖拽物体实现任意角度自旋转
主要涉及函数 Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量 Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量 通过勾股定理获取拖拽长 ...
- Silverlight中的拖拽实现的图片上传
原文 http://blog.csdn.net/dujingjing1230/article/details/5443003 在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接 ...
- HTML5元素拖拽实现示例
HTML5现在前端圈中,已然成为一个不那么新的技术词汇了,很多公司也把HTML5也当成了硬性的技能要求,但是很多前端恐怕都不了解HTML5的拖拽怎么实现吧. 看了下极客学院的视频,大概的了解了下思路. ...
- 【WPF】这可能是全网最全的拖拽实现方法的总结
原文地址 https://www.cnblogs.com/younShieh/p/10811456.html 前文 本文只对笔者学习掌握的一般的拖动问题的实现方法进行整理和讨论,包括窗口.控件等内容的 ...
- C#.net拖拽实现获得文件路径
思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等), 在DragDrop事件中对“信息”进行解析. 窗体的AllowDrop属性必须设置成tru ...
- selenium操作拖拽实现无效果的替代方案
如果碰到这种情况,无论你是直接通过draganddrop()还是分步执行clickandhold(),dragtoelement(),或通过by_offset位移都无法实现元素拖拽.只能物理模拟了 w ...
- HTML5 元素拖拽实现 及 jquery.event.drag插件
如上图片: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- WPF ListView 简单的拖拽实现(转)
首先设置ListView的AllowDrop=True:SelectionMode=Extended;并且ListView视图为GridVIew. private void listView1_Mou ...
随机推荐
- 卷积神经网络(CNN)模型
一.概述 卷积神经网络(Convolutional Neural Network, CNN)是一种深度学习模型,广泛应用于图像识别.计算机视觉等领域.其设计理念源于对生物视觉皮层神经机制的模拟,核 ...
- 【中英】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第四周测验
[中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第四周测验 上一篇:[课程1 - 第三周编程作业]※※※※※ [回到目录]※※※※※下一篇:[课程1 - 第四周编程作业] 第4 ...
- 控制ERP物料主数据通过Middleware传往CRM
先说一下优化过滤的必要性. CRM物料主数据一百多万. 感谢MDM或者相关的系统,每天通过接口更新的不知道什么东西,每天数百万的物料更新队列进入CRM. CRM系统被搞死了好几次. 然后各种优化报表, ...
- 2025国内五大MES系统排名探秘:从核心架构到选型指南,解锁智造升级最优解
在智能制造浪潮席卷全球的今天,MES系统(制造执行系统)作为连接企业管理层与车间生产层的"神经中枢",其重要性日益凸显.它能有效打通信息孤岛,实现生产全流程透明化.可控化与智能化, ...
- 【Cursor保姆级教程】零基础小白从安装到实战,手把手教你玩转AI编程神器!
1.什么是AI编程? 在传统的编程模式中,开发程序是一项高度专业化的任务.程序员需要具备深厚的技术背景,掌握至少一门编程语言比如Python.Java.C++等等.并且要对复杂的逻辑和算法有清晰的理解 ...
- laravel-casbin-admin
基于 vue-element-admin laraveljwtcasbin 整合的前后端分离的rbac权限管理系统 功能和介绍 github地址 系统采用前后端分离架构,是一个企业后台解决方案. 前端 ...
- C# WinForm NumericUpDown 控件全选其中文字 (Numeric 全选文本) 全选文本Numeric
num_length.Focus(); UpDownBase updbText = (UpDownBase)num_length; ...
- Django 实战:Celery 异步任务从环境搭建到调用全掌握
一.Celery入门 介绍 Celery 是一个简单.灵活且可靠的分布式任务队列系统,专注于实时处理的异步任务队列,同时也支持任务调度.Celery是实现异步任务.定时任务的一种工具. Celery ...
- off 表面三角网格翻转问题解决
简介 参考链接 https://gamedev.stackexchange.com/questions/26974/repairing-back-facing-triangles-without-us ...
- CMD中文乱码之另解决方案
参考链接 博客 MSDN 博客园大牛 如果以上博客没有成功我也没办法了. 根据第二个给出的解决方案:控制面板--> 区域 --> 管理 --> 更改系统区域设置 -->设为中文 ...