鼠标滚轮:缩放
鼠标右键:旋转
鼠标中键:平移
鼠标左键:选中实体(下面的代码中未实现)
注:
1.地形必须在Terrain图层下
2.相机上必须挂载Rigidbody+Collider,防止钻到地下。
Rigidbody的Interpolate:Interpolate
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Viewer : MonoBehaviour
{
public Texture2D RotateIcon;
public Texture2D PanIcon;
public Rigidbody rigibodyCamera;
public bool IsRecoverCameraForword = false;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//鼠标是否在UI上
if (EventSystem.current != null && EventSystem.current.IsPointerOverGameObject())
{
return;
}
//旋转视角
if (Input.GetMouseButtonDown(1))
{
Cursor.SetCursor(RotateIcon, Vector3.zero, CursorMode.Auto);
}
if (Input.GetMouseButtonUp(1))
{
Cursor.SetCursor(null, Vector3.zero, CursorMode.Auto);
}
if (Input.GetMouseButton(1))
{
Vector3 ptCenter = rigibodyCamera.transform.position - rigibodyCamera.transform.forward * 0.1f;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
LayerMask mask = 1 Mathf.Abs(axis_y))
{
float drag_x_speed = Mathf.Rad2Deg * (radius / dist);
float rotX = axis_x * drag_x_speed * Time.deltaTime;
rigibodyCamera.transform.RotateAround(ptCenter, Vector3.up, rotX);
}
else
{
float drag_y_speed = Mathf.Rad2Deg * (radius / dist);
float rotY = axis_y * drag_y_speed * Time.deltaTime;
rigibodyCamera.transform.RotateAround(ptCenter, -rigibodyCamera.transform.right, rotY);
}
}
//鼠标没点在地面上,自由旋转
else
{
float axis_x = Input.GetAxis("Mouse X");
float axis_y = Input.GetAxis("Mouse Y");
if (Mathf.Abs(axis_x) > Mathf.Abs(axis_y))
{
float drag_x_speed = 50.0f;
float rotX = axis_x * drag_x_speed * Time.deltaTime;
rigibodyCamera.transform.RotateAround(ptCenter, Vector3.up, rotX);
}
else
{
float drag_y_speed = 30.0f;
float rotY = axis_y * drag_y_speed * Time.deltaTime;
rigibodyCamera.transform.RotateAround(ptCenter, -rigibodyCamera.transform.right, rotY);
}
}
}
//放大
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
float speed = 50.0f;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
LayerMask mask = 1
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?