1. 摄像机跟随人物
首先,你需要一个脚本来控制摄像机跟随人物。这个脚本应该附加到你的摄像机对象上。
CameraFollow.cs
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
public Transform target; // 指向你的人物对象
public float smoothSpeed = 0.125f; // 摄像机平滑移动的速度
public Vector3 offset; // 摄像机相对于人物的偏移量,比如(0, 10, -10)表示摄像机在人物的上方和后方
void LateUpdate()
{
// 计算摄像机应该到达的位置
Vector3 desiredPosition = target.position + offset;
// 平滑地移动到那个位置
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
transform.position = smoothedPosition;
// 让摄像机始终看向人物
transform.LookAt(target);
}
}
在这个脚本中,target
是你想要摄像机跟随的人物对象。offset
是摄像机相对于人物的偏移量,你可以根据需要调整它。smoothSpeed
控制摄像机移动时的平滑程度。
2. 人物走到地图边缘 摄像机停止平移
为了检测人物是否走到地图边缘,你可以在地图边缘放置一些碰撞体(如BoxCollider),并给它们一个共同的父对象,然后将这个父对象的Transform组件赋值给CameraFollow
脚本中的mapBoundary
变量。
CameraFollow.cs(扩展)
// ...之前的代码
public Transform mapBoundary; // 地图边界的父对象Transform
void LateUpdate()
{
// ...之前的代码
// 检查摄像机是否超出地图边界
Vector3 desiredPosition = target.position + offset;
if (desiredPosition.x < mapBoundary.position.x + mapBoundaryBoundaryOffset.x)
{
desiredPosition.x = mapBoundary.position.x + mapBoundaryBoundaryOffset.x;
offset.x = desiredPosition.x - target.position.x;
}
else if (desiredPosition.x > mapBoundary.position.x + mapBoundary.localScale.x - mapBoundaryBoundaryOffset.x)
{
desiredPosition.x = mapBoundary.position.x + mapBoundary.localScale.x - mapBoundaryBoundaryOffset.x;
offset.x = desiredPosition.x - target.position.x;
}
// 对y和z轴进行相同的处理
// ...
// 平滑地移动到那个位置(这部分代码与之前相同)
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
transform.position = smoothedPosition;
// 让摄像机始终看向人物(这部分代码与之前相同)
transform.LookAt(target);
}
public Vector3 mapBoundaryBoundaryOffset = new Vector3(1, 1, 1); // 用于调整边界检测的灵敏度
在这个扩展中,我添加了mapBoundary
变量来存储地图边界的父对象Transform。我还添加了mapBoundaryBoundaryOffset
变量来允许你调整边界检测的灵敏度。现在,当人物走到地图边缘时,摄像机将停止平移。
3. 手指长按屏幕 摄像机平移
为了通过触摸控制摄像机平移,你需要另一个脚本。
CameraTouchControl.cs
using UnityEngine;
public class CameraTouchControl : MonoBehaviour
{
private Vector3 touchOrigin = -Vector3.one; // 用于存储触摸开始的位置
public float panSpeed = 0.5f; // 摄像机平移的速度
void Update()
{
// 检查是否有触摸输入
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
// 当触摸开始时,记录触摸位置
if (touch.phase == TouchPhase.Began)
{
touchOrigin = touch.position;
return;
}
// 当触摸移动时,移动摄像机
if (touch.phase == TouchPhase.Moved)
{
Vector3 touchEnd = touch.position;
float x = touchEnd.x - touchOrigin.x;
float y = touchEnd.y - touchOrigin.y;
touchOrigin = touchEnd;
// 根据触摸移动的方向和距离移动摄像机
Vector3 move = new Vector3(x, 0, y) * panSpeed * Time.deltaTime;
transform.Translate(-move, Space.World);
}
}
}
}
在这个脚本中,panSpeed
控制摄像机平移的速度。当用户在屏幕上触摸并移动时,摄像机将根据触摸移动的方向和距离进行平移。
现在,你应该有了实现所需功能的完整代码。将这些脚本附加到相应的对象上,并调整变量以适应你的游戏。