资源简介
这篇代码主要是实现摄像机在场景中围绕某个物体进行移动,主要是通过鼠标进行线性平移、旋转、镜头的拉伸。
代码片段和文件信息
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class MoveCamera : MonoBehaviour
{
public static bool isMouseMove = true;
public static bool isUseEvent = true;
public static bool isLookDown = false;
//观察目标
public Transform Target;
//观察距离
public static float Distance = 100f;
//旋转速度
private float SpeedX = 150;
private float SpeedY = 100;
//角度限制
private float MinLimitY = 5;
private float MaxLimitY = 180;
public static Vector3 offset;
//旋转角度
public static float mX = 0.0F;
public static float mY = 0.0F;
//鼠标缩放距离最值
private float MaxDistance = 500;
private float MinDistance = 1.5F;
//鼠标缩放速率
private float ZoomSpeed = 20F;
//是否启用差值
public bool isNeedDamping = true;
//速度
public static float Damping = 10F;
// public float moveSpeed = 20f;
public static Quaternion mRotation;
void Start()
{
//初始化旋转角度
mX = -9.532309E-05f;
mY = 26.659f;
offset = new Vector3(12.5f -0.8f -26.5f);
mRotation = new Quaternion(0.2f 0.0f 0.0f 1.0f);
//mX = 51.345f;
// mY = 17.781f;
}
bool IsHitUI()
{
bool res = true;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
Debug.Log(EventSystem.current.IsPointerOverGameobject());
Debug.Log(Physics.Raycast(ray out hit));
if (!Physics.Raycast(ray out hit) && EventSystem.current.IsPointerOverGameobject())
{
Debug.Log(hit.transform.name);
if (hit.transform.name != “Rotate“ && hit.transform.name != “Rest“)
{
Debug.Log(hit.transform.name);
res = false;
}
}
return res;
}
void LateUpdate()
{
if (isUseEvent == true)
{
if (EventSystem.current.IsPointerOverGameobject())
{
return;
}
}
if (isMouseMove == true)
{
//鼠标右键旋转
if (Target != null && Input.GetMouseButton(0))
{
if (isLookDown == false)
{
//获取鼠标输入
mX += Input.GetAxis(“Mouse X“) * SpeedX * 0.009F;
mY -= Input.GetAxis(“Mouse Y“) * SpeedY * 0.009F;
//范围限制
mY = ClampAngle(mY MinLimitY MaxLimitY);
//Debug.Log(mX);
//Debug.Log(mY);
//计算旋转
//我们可以通过Quaternion.Euler()方法将一个Vector3类型的值转化为一个四元数
//,进而通过修改Transform.Rotation来实现相同的目的
mRotation = Quaternion.Euler(mY mX 0);
//根据是否插值采取不同的角度计算方式
if (isNeedDamping)
{
transform.rotation = Quater
相关资源
- 逐步法线性回归C#源码
- 用C#绘制正弦曲线,要用到Form1_Resiz
- c#在线考试系统(附源码)
- 在线求职系统(C#ASP.NET源码)
- 从PLC循环读取到前台显示,并推送给
- C# Socket TCP通信
- unity+Socket+KCP+Protobuf的Unity局域网联机
- AssetStudio V0.16.0 源代码 使用VS2019
- c#绘制动态曲线
- C#曲线图控件
- asp.net 在线考试系统及论文
- SignalR在线聊天(websocket)
- NiVision找直线
- winform实现饼状图、柱状图、折线图(
- WPF贝塞尔曲线
- 车辆CAN总线数据现场分析工具源码
- Unity摄像机分辨率自适应设计尺寸脚本
- unity 2d-extras-master插件
- polyvav2D-1.5.2_BehaviorDesigner.unitypackage
- unity读取Excel
- chart 柱状图,饼状图,折线图
- 软键盘(Package_KeyBoard.unitypackage)
- unity5圣典中文API手册v0.02.chm
- C#多线程以及Socket通讯
- Unity 房间游览
- 大文件复制(多线程)
- C#控制雷赛板卡两轴直线插补
- 百度在线翻译API (使用)
- 百塞尔曲线粒子插件(.unitypackage)
- wpf在线更新
评论
共有 条评论