当前位置:网站首页>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); //
}
}
}
边栏推荐
- [Virtualization Ecological Platform] Platform Architecture Diagram & Ideas and Implementation Details
- 普林斯顿微积分读本03第二章--编程实现函数图像绘制、三角学回顾
- ESP8266-Arduino编程实例-HDC1008温度湿度传感器驱动
- 线程池 ThreadPoolExecutor 详解
- 多线程学习笔记-2.final关键字和不变性
- Data Lake (19): SQL API reads Kafka data and writes it to Iceberg table in real time
- Use ODBC in Excel to read data from CDS view on SAP BTP platform
- Docker practical experience: Deploy mysql8 master-slave replication on Docker
- The most complete phpmyadmin vulnerability summary
- 才22岁!这位'00后'博士拟任职985高校!
猜你喜欢
随机推荐
关于Mysql数据库的介绍
Curl 命令使用
Different lower_case_table_names settings for server ('1') and data dictionary ('0') solution
redis-enterprise use
mysql 自动添加创建时间、更新时间
oracle优化:instr做join条件很慢「建议收藏」
Experience innovation and iteration through the development of lucky draw mini-programs
淀粉与纤维素
瑞吉外卖项目:文件的上传与下载
file contains vulnerabilities
Life is endless, there are more questions, simple questions to learn knowledge points
Data Persistence Technology - MP
kubernetes之服务发现
In Excel using ODBC consumer SAP ABAP CDS view
MySQL 行级锁(行锁、临键锁、间隙锁)
《MySQL高级篇》四、索引的存储结构
普林斯顿微积分读本03第二章--编程实现函数图像绘制、三角学回顾
Summary of several defragmentation schemes for MySQL (to solve the problem of not releasing space after deleting a large amount of data)
分布式id解决方案
便利贴--46{基于移动端长页中分页加载逻辑封装}