ue3dUnity相机靠近对象使用移动缩放控制

Unity相机靠近对象使用移动缩放控制

分类:

在之前文章中提到在Unity中平滑缩放相机有俩种方法,只是当放大查看远处对象时,靠近对象进行缩放可能是需要考虑的,那此文将介绍自上而下相机靠近对象通过移动控制缩放相关内容。

ue3d - Unity相机靠近对象使用移动缩放控制

基于主题首先我们需要了解基于运动的缩放本质上是相机控制,游戏玩家只需将相机拉近而不改变其视角。

ue3d - Unity相机靠近对象使用移动缩放控制

那么一般情况下制作一个简单的自上而下的相机控制器,可以使用键盘或鼠标进行平移放大。则此方法需要两个对象。一个将移动的父游戏对象以及一个相机子对象,该对象向下旋转到场景中并将靠近以创建基本的缩放效果。

ue3d - Unity相机靠近对象使用移动缩放控制

那么此时我们可以通过将水平轴垂直轴传递给 Translate 函数来移动相机控制器对象:

public class CameraMovement : MonoBehaviour
{
    public float speed = 25;
    void Update()
    {
        MoveCamera(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
    }
    void MoveCamera(float x, float y)
    {
        Vector3 movementAmount = new Vector3(x, 0, y) * speed * Time.deltaTime;
        transform.Translate(movementAmount);
    }
}

在上面的代码中将速度值设置为 25,那么相机将以每秒 25 个单位移动。这是通过从两个方向轴获取运动值并将它们乘以增量时间和速度值来实现的。

当然也可以通过使用相机对象的局部前向来做:

// 世界空间的前进方向
Vector3.forward;
// 局部空间的前进方向
Transform.forward;

因为相机向下旋转,面向世界,所以它沿着它的局部前向矢量移动,这是它的向下的蓝色箭头 Z 轴的方向,它在所面对的方向上向前移动。那么在这种情况下,这是面向世界的缩放动作而已。

ue3d - Unity相机靠近对象使用移动缩放控制

相机的前向向量是一个方向向量,那么它的向量的长度大小被被限制为 1,则将其正向向量乘以浮点值将返回一个新向量,该向量由多个单位向前设置,可用于设置相机的缩放位置。

public class MovementZoom : MonoBehaviour
{
    public float zoomLevel;
    public Transform parentObject;
    void Update()
    {
        transform.position = parentObject.position + (transform.forward * zoomLevel);
    }
}

以上代码允许使用单个浮点变量设置相机的缩放位置,这使得它易于管理和控制。例如,如果想设置最大缩放量,可以在移动相机之前限制缩放值。

// 将缩放限制为 30 个单位
zoomLevel = Mathf.Clamp(zoomLevel, 0, 30);

又或者,如果想平稳地将相机移向其目标,那么可以使用 MoveTowards 让相机以设定的速度跟随缩放值。

// 以每秒 30 个单位遵循 zoomLevel 值
zoomPosition = Mathf.MoveTowards(zoomPosition, zoomLevel, 30 * Time.deltaTime);
transform.position = parentObject.position + (transform.forward * zoomPosition);

以上虽然可以使用缩放值的方法对相机进行缩放,但仅仅只是使用键盘平移并用鼠标放大和缩小,可它们并没有连接到任何类型的控制,或许使用 Ultimate Camera Controller、Pro Camera 等这类Unity源码也是一个不错的选择。

如排除这些,则获取 Unity 设备输入的 Input 控制类来控制相机即可。

相关信息

  • 类型:知识
  • 字数:729
  • 字符:2457
  • 平台:Unity
  • 说明:无
  • 编号:69567

热门内容

提示:3D天堂作为服务提供者,尊重网络版权及知识产权,对某些行为的发生不具备充分的监控能力,若无意间侵犯到您的权利,请 联系我们,我们会在收到信息后尽快给予处理。

本站文章版权归本站自创作者所有,未经允许不得转载!