Unity3D 旋转相机视角 镜头缩放 拖动相机视角 Game视窗还原Sence视窗功能

本文主要是介绍Unity3D 旋转相机视角 镜头缩放 拖动相机视角 Game视窗还原Sence视窗功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在做一个工程,在Game视窗内用到了和Sence视窗内差不多的功能,研究了一段,做了一个小小的Demo,一下贴出一部分的代码,还有工程链接,有兴趣的朋友可以参考借鉴,转载请注明出处。

1、以下是效果图


2、开始贴代码吧
第一个新建一个C#脚本MouseOrbit,这个脚本是借鉴了unity3D自带的MouseOrbit脚本,我在其基础上进行了修改,删掉一部分内容,增加了不少东西,用射线检测来检测屏幕中心点物体的碰撞盒,并以此为旋转中心,如果屏幕中心没有物体,就采用偏移向量的方式来重新定位旋转中心,大体上功能是没有什么问题,如果有朋友有更好的想法欢迎指点和相互交流。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MouseOrbit : MonoBehaviour {//偏移量和中心店Vector3 offest;Vector3 target;//记录第一坐标Vector3 P1;float distance = 15.0f;float xSpeed = 250.0f;float ySpeed = 120.0f;float x = 0.0f;float y = 0.0f;//相机移动速度float Speed = 40.0f;// Use this for initializationvoid Start (){var angles = transform.eulerAngles;x = angles.y;y = angles.x;//旋转中心初始点target = new Vector3(0, 0, 0);}private void Update(){}void LateUpdate(){      if (Input.GetMouseButton(0)){x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;//返回一个四元数 绕某个轴旋转某个角度var rotation = Quaternion.Euler(y, x, 0);var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target;transform.rotation = rotation;transform.position = position;}else if(Input.GetMouseButton(1)){float x;float y;x = Input.GetAxis("Mouse X");y = Input.GetAxis("Mouse Y");transform.Translate(new Vector3(-x, -y, 0) * Time.deltaTime * Speed);//print("转换过的:" + Camera.main.ScreenToWorldPoint(new Vector3(x, y, 0)));}if (Input.GetMouseButtonDown(1)){P1 = transform.position;}if (Input.GetMouseButtonUp(1)){利用射线检测来获取屏幕中心点坐标Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));RaycastHit hit;if (Physics.Raycast(ray, out hit))  {if (hit.collider){target = new Vector3(hit.point.x, hit.point.y, hit.point.z);distance = (hit.point - transform.position).magnitude;print(hit.collider.name);}}else{offest = transform.position - P1;target = target + offest;distance = (target - transform.position).magnitude;}}}
}



3、两个脚本都挂在相机的视角下就可以了,左键按住滑动鼠标可以让相机绕旋转中心旋转,右键按住后可以拖动相机左右上下移动,当旋转中心为某个特定物体时,相机会围绕着该物体为中心做旋转。

4、附上源码工程,有需要的可以下载

http://download.csdn.net/download/mr_sun88/10194839

作者:大虾小二

CSDN:Mr_Sun88

转载请注明出处!

这篇关于Unity3D 旋转相机视角 镜头缩放 拖动相机视角 Game视窗还原Sence视窗功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/776112

相关文章

Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

《SpringBoot整合Redis注解实现增删改查功能(Redis注解使用)》文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Se... 目录配置Redis连接定义实体类创建Repository接口增删改查操作示例插入数据查询数据删除数据更

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php