当前位置:网站首页>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); //
}
}
}
边栏推荐
猜你喜欢

基于C51实现按键控制

三六零与公安部三所发布报告:关基设施保护成为网络安全博弈关键

数据持久化技术——MP

mysql根据多字段分组——group by带两个或多个参数

Android studio connects to MySQL and completes simple login and registration functions

After class, watching the documentation and walking back to the lab, I picked up the forgotten SQL operators again

MySql模糊查询大全

unity computeshader的可读写buffer

In PLC communication error or timeout or download the prompt solution of the model

Obsidian设置图床
随机推荐
线程池 ThreadPoolExecutor 详解
Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
Mysql环境变量的配置(详细图解)
【Web技术】1397- 深入浅出富文本编辑器
deeplab实现自己遥感地质分割数据集
ApiPost 真香真强大,是时候丢掉 Postman、Swagger 了
Docker实践经验:Docker 上部署 mysql8 主从复制
科学论文和学术论文写作
关于Mysql数据库的介绍
oracle优化:instr做join条件很慢「建议收藏」
R语言做面板panelvar例子
lotus-local-net 2k v1.17.0-rc4
Docker搭建Mysql主从复制
在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据
3.网页信息解析方法:Xpath与BeautifulSoup
CWE4.8 -- 2022年危害最大的25种软件安全问题
3D激光SLAM:LeGO-LOAM论文解读---完整篇
mpu9150(driverack pa简明教程)
Distributed id solution
MySQL百万数据优化总结 一