帮我写个unity 鼠标拖动屏幕控制主相机移动的脚本
时间: 2023-09-23 14:12:23 浏览: 255
好的,以下是一个简单的Unity鼠标拖动屏幕控制主相机移动的脚本:
```csharp
using UnityEngine;
public class CameraController : MonoBehaviour
{
public float dragSpeed = 2;
private Vector3 dragOrigin;
void LateUpdate()
{
if (Input.GetMouseButtonDown(0))
{
dragOrigin = Input.mousePosition;
return;
}
if (!Input.GetMouseButton(0)) return;
Vector3 pos = Camera.main.ScreenToViewportPoint(dragOrigin - Input.mousePosition);
Vector3 move = new Vector3(pos.x * dragSpeed, 0, pos.y * dragSpeed);
transform.Translate(move, Space.World);
}
}
```
将该脚本添加到主相机上,即可通过鼠标拖动屏幕来控制主相机移动。注意,该脚本只能控制主相机在水平方向上的移动,若要实现更多的移动方式,需要进行修改。
相关问题
帮我写个unity 鼠标拖动控制主相机移动的脚本
好的,以下是一个简单的Unity鼠标拖动控制主相机移动的脚本:
```
using UnityEngine;
public class CameraController : MonoBehaviour
{
public float sensitivity = 100.0f;
public float maxYAngle = 80.0f;
private Vector2 currentRotation;
void Update()
{
if (Input.GetMouseButton(0))
{
currentRotation.x += Input.GetAxis("Mouse X") * sensitivity * Time.deltaTime;
currentRotation.y -= Input.GetAxis("Mouse Y") * sensitivity * Time.deltaTime;
currentRotation.y = Mathf.Clamp(currentRotation.y, -maxYAngle, maxYAngle);
transform.rotation = Quaternion.Euler(currentRotation.y, currentRotation.x, 0);
}
}
}
```
你可以在你的主相机上添加这个脚本,它将使你能够通过鼠标拖动主相机进行移动。
写出Unity相机控制脚本,右键长按拖动时,围绕刚按下位置射线检测地面点位旋转
以下是一个简单的Unity相机控制脚本,可以实现右键长按拖动时,围绕刚按下位置射线检测地面点位旋转:
```csharp
using UnityEngine;
public class CameraController : MonoBehaviour
{
public float rotateSpeed = 5.0f; // 相机旋转速度
private Vector3 mouseOrigin; // 鼠标按下位置
private bool isRotating; // 是否正在旋转
void Update()
{
if (Input.GetMouseButtonDown(1))
{
// 鼠标右键按下,记录按下位置
mouseOrigin = Input.mousePosition;
isRotating = true;
}
if (!Input.GetMouseButton(1))
{
// 鼠标右键松开,停止旋转
isRotating = false;
}
if (isRotating)
{
// 计算鼠标移动距离
Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - mouseOrigin);
// 将距离转换为相机旋转角度
Vector3 rotate = new Vector3(-pos.y * rotateSpeed, pos.x * rotateSpeed, 0);
// 围绕按下位置旋转
transform.RotateAround(GetHitPoint(), Vector3.up, rotate.x);
transform.RotateAround(GetHitPoint(), Vector3.right, rotate.y);
}
}
// 射线检测地面点位
private Vector3 GetHitPoint()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
return hit.point;
}
return transform.position;
}
}
```
在该脚本中,我们首先定义了一个 `rotateSpeed` 变量来控制相机旋转速度。然后在 `Update()` 函数中,我们通过检测鼠标右键的按下和松开来判断是否需要旋转相机。在旋转相机时,我们首先计算出鼠标移动距离,将其转换为相机旋转角度,然后围绕按下位置旋转相机。
为了实现围绕按下位置旋转,我们需要用到一个 `GetHitPoint()` 函数来射线检测地面点位。该函数会发射一条从相机到鼠标位置的射线,然后返回该射线与地面的交点。在旋转相机时,我们就可以将相机围绕该交点进行旋转。如果没有检测到地面点位,则默认将旋转围绕相机自身旋转中心。
阅读全文