本实例实现了双手指滑动移动摄像机视角的功能。这个功能被拆分成了两个方法:MoveCamera()
用于处理双手指滑动并移动摄像机,而 CalculateCameraMovement()
则用于计算摄像机的移动方向和距离。
using UnityEngine;
public class CameraMove : MonoBehaviour
{
public Camera mainCamera; // 需要在Unity编辑器中指定
public float moveSpeed = 0.5f; // 摄像机移动速度
private Vector2 previousTouchMidPoint; // 上一次触摸点的中点
private void Update()
{
// 检查是否有两个手指触摸屏幕
if (Input.touchCount == 2)
{
// 获取第一个和第二个触摸点
Touch touchZero = Input.GetTouch(0);
Touch touchOne = Input.GetTouch(1);
// 计算当前两个触摸点的中点
Vector2 currentTouchMidPoint = (touchZero.position + touchOne.position) / 2;
// 如果任一手指开始移动,则计算并移动摄像机
if (touchZero.phase == TouchPhase.Moved || touchOne.phase == TouchPhase.Moved)
{
MoveCamera(currentTouchMidPoint);
}
// 如果两个手指都刚开始触摸,则记录初始中点
else if (touchZero.phase == TouchPhase.Began && touchOne.phase == TouchPhase.Began)
{
previousTouchMidPoint = currentTouchMidPoint;
}
}
}
// 移动摄像机
void MoveCamera(Vector2 currentTouchMidPoint)
{
// 计算移动方向和距离
Vector2 movement = currentTouchMidPoint - previousTouchMidPoint;
previousTouchMidPoint = currentTouchMidPoint; // 更新上一次触摸点的中点
// 将触摸移动转换为摄像机移动
Vector3 cameraMovement = new Vector3(movement.x, 0, movement.y) * moveSpeed;
mainCamera.transform.Translate(-cameraMovement, Space.World);
}
}
在这个脚本中,mainCamera
需要在Unity编辑器中指定为你想要移动的摄像机。moveSpeed
变量用于控制摄像机移动的速度。
Update()
方法用于检测双手指的触摸,并计算它们的中点。如果任一手指开始移动,则调用 MoveCamera()
方法来移动摄像机。MoveCamera()
方法计算摄像机的移动方向和距离,并将其应用到摄像机上。注意,这里使用了 Translate()
方法来移动摄像机,并且移动是在世界空间中进行的(Space.World
)。如果你想要在不同的空间中进行移动,可以相应地更改这个参数。