当前位置:网站首页>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); //
}
}
}
边栏推荐
- 无法将“node.exe”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
- After Effects 教程,如何在 After Effects 中修复曝光不足的镜头?
- MySQL index usage and optimization
- Read through the interface to call the artifact RestTemplate
- 订song餐系统
- Docker实践经验:Docker 上部署 mysql8 主从复制
- IDEA configure method annotation automatic parameters
- Initial JDBC programming
- Master SSR
- Detailed tutorial on distributed transaction Seata
猜你喜欢
随机推荐
After Effects 教程,如何在 After Effects 中修复曝光不足的镜头?
Standard SQL/JSON - the sobering part
Summary of several defragmentation schemes for MySQL (to solve the problem of not releasing space after deleting a large amount of data)
vb.net 画曲线
R语言:文本(字符串)处理与正则表达式
线程池 ThreadPoolExecutor 详解
deeplab implements its own remote sensing geological segmentation dataset
Master SSR
Docker installs canal and mysql for simple testing and achieves cache consistency between redis and mysql
才22岁!这位'00后'博士拟任职985高校!
Service discovery of kubernetes
IDEA 配置方法注释自动参数
If the value of the enum map does not exist, deserialization is not performed
数据持久化技术——MP
3.网页信息解析方法:Xpath与BeautifulSoup
Data Persistence Technology - MP
使用 Excel 读取 SAP ABAP CDS View 通过 ODBC 暴露出来的数据
Yarn安装配置(vsftpd安装配置)
Is the working process of the belt you know the story - actionreducerstore
502 bad gateway原因、解决方法