当前位置:网站首页>CameraToolUnity中两种摄像机的两种观察控制方式
CameraToolUnity中两种摄像机的两种观察控制方式
2022-07-31 11:43:00 【先生沉默先】
目标环绕
private void SayHello()
{
www.baidu.com
}
自由摄像机
// **********************************************************************
// 文件信息
// 文件名(File Name): FreeCamera.cs
// 作者(Author): WYH
// 创建时间(CreateTime): 2022年7月16日 17:32:05
// Unity版本(UnityVersion): 2021.1.18f1c1
// 脚本描述(Module description):
// **********************************************************************
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
[AddComponentMenu("Camera/FreeCamera")]
public class FreeCamera : MonoBehaviour
{
private Vector3 _oldMousePosition;
private Vector3 _newMousePosition;
[SerializeField]
private float _flMinimumY = 0.2f;
[SerializeField]
private float _flZoomSpeed = 30.0f;
[SerializeField]
private float _flKeyBoardMoveSpeed = 1f;
[SerializeField]
private float _flRoteSpeed = 0.05f;
private float _fldistance = 5;
//private Vector3 centerOffset = Vector3.zero;
private Vector3 _initPos = Vector3.zero;
private Vector3 _initRot = Vector3.zero;
private void Awake()
{
_initPos = transform.position;
_initRot = transform.eulerAngles;
}
private void OnEnable()
{
transform.position = _initPos;
transform.eulerAngles = _initRot;
}
void Update()
{
MoveCameraKeyBoard();
ZoomCamera();
CameraRotation();
_oldMousePosition = Input.mousePosition;
}
/// <summary>
/// 鼠标控制移动
/// </summary>
private void MoveCameraKeyBoard()
{
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(new Vector3(-_flKeyBoardMoveSpeed, 0, 0), Space.Self);
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(new Vector3(_flKeyBoardMoveSpeed, 0, 0), Space.Self);
}
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(new Vector3(0, 0, _flKeyBoardMoveSpeed), Space.Self);
}
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(new Vector3(0, 0, -_flKeyBoardMoveSpeed), Space.Self);
}
if (Input.GetKey(KeyCode.E))
{
transform.Translate(new Vector3(0, _flKeyBoardMoveSpeed, 0), Space.World);
}
if (Input.GetKey(KeyCode.Q))
{
if (transform.transform.position.y - _flKeyBoardMoveSpeed >= this._flMinimumY)
transform.Translate(new Vector3(0, -_flKeyBoardMoveSpeed, 0), Space.World);
}
}
/// <summary>
/// 鼠标控制摄像机是视角,上下左右看
/// </summary>
private void CameraRotation()
{
if (Input.GetMouseButton(1))
{
_newMousePosition = Input.mousePosition;
Vector3 dis = _newMousePosition - _oldMousePosition;
float angleX = dis.x * _flRoteSpeed;
float angleY = dis.y * _flRoteSpeed;
transform.Rotate(new Vector3(-angleY, 0, 0), Space.Self);
transform.Rotate(new Vector3(0, angleX, 0), Space.World);
}
}
/// <summary>
/// 摄像机的缩放
/// </summary>
private void ZoomCamera()
{
float offset = Input.GetAxis("Mouse ScrollWheel");
if (offset != 0)
{
offset *= _flZoomSpeed;
_fldistance -= offset;
transform.Translate(Vector3.forward * offset, Space.Self); //
}
}
}
边栏推荐
- Addition logic for SAP Commerce Cloud Product Review
- 3D激光SLAM:LeGO-LOAM论文解读---点云分割部分
- 最全phpmyadmin漏洞汇总
- 便利贴--46{基于移动端长页中分页加载逻辑封装}
- After Effects 教程,如何在 After Effects 中修复曝光不足的镜头?
- LeetCode 1161.最大层内元素和:层序遍历
- How to correctly write the binary stream of the file returned by the server to the local file and save it as a file
- 502 bad gateway原因、解决方法
- Docker搭建Mysql主从复制
- VBA输出日志到工作簿demo
猜你喜欢
Android studio connects to MySQL and completes simple login and registration functions
[Virtualization ecological platform] Raspberry Pi installation virtualization platform operation process
deeplab implements its own remote sensing geological segmentation dataset
DCM 中间件家族迎来新成员
【Web技术】1397- 深入浅出富文本编辑器
瑞吉外卖项目:新增菜品与菜品分页查询
"JUC Concurrent Programming - Advanced" 06 - Immutability of Shared Models (Design of Immutable Classes | Use of Immutable Classes | Flyweight Pattern)
《MySQL高级篇》五、InnoDB数据存储结构
5 open source Rust web development frameworks, which one do you choose?
5 个开源的 Rust Web 开发框架,你选择哪个?
随机推荐
如何正确地把服务器端返回的文件二进制流写入到本地保存成文件
[Go Affair] See through Go's collections and slices at a glance
一文带你了解redux的工作流程——actionreducerstore
「R」使用ggpolar绘制生存关联网络图
学自动化测试哪个培训机构好 试听课程后就选了这个地方学习
Use Excel to read data exposed by SAP ABAP CDS View through ODBC
Yarn安装配置(vsftpd安装配置)
Intranet Penetration Learning (IV) Domain Lateral Movement - SMB and WMI Service Utilization
Detailed tutorial on distributed transaction Seata
拥抱趋势!阿里这套微服务开源框架权威手册,实战到底层细致清晰
结构化查询语言SQL-关系数据库标准语言
Docker实践经验:Docker 上部署 mysql8 主从复制
Redis - Basics
最全phpmyadmin漏洞汇总
redis-enterprise use
台达PLC出现通信错误或通信超时或下载时提示机种不符的解决办法总结
MySQL 的 limit 分页查询及性能问题
在 Excel 内使用 ODBC 消费 SAP ABAP CDS view
MySql模糊查询大全
《MySQL高级篇》四、索引的存储结构