您可以使用以下步骤来实现此目标:

  1. 在场景中创建一个空对象,命名为“CameraBounds”。

  2. 将一个Box Collider组件添加到“CameraBounds”对象上,并将其大小调整为您想要限制相机移动的范围。

  3. 在Cinemachine虚拟相机对象上添加一个CinemachineConfiner组件。

  4. 将“CameraBounds”对象拖放到CinemachineConfiner组件的“Bounding Shape”字段中。

  5. 在Cinemachine虚拟相机对象上添加一个CinemachineComposer组件。

  6. 在CinemachineComposer组件的“Tracked Object”字段中选择要跟踪的对象(例如玩家角色)。

  7. 在CinemachineComposer组件的“Screen X”和“Screen Y”字段中设置相机的初始位置。

  8. 在CinemachineComposer组件的“Dead Zone Width”和“Dead Zone Height”字段中设置相机在移动之前必须越过的边界宽度和高度。

  9. 创建一个名为“CameraInput”的C#脚本,并将其附加到Cinemachine虚拟相机对象上。

  10. 在“CameraInput”脚本中编写以下代码:

using UnityEngine;
using Cinemachine;

public class CameraInput : MonoBehaviour
{
    public float boundarySize = 0.1f;
    public float moveSpeed = 5f;

    private CinemachineComposer composer;
    private Transform cameraTransform;

    private void Start()
    {
        composer = GetComponent<CinemachineComposer>();
        cameraTransform = Camera.main.transform;
    }

    private void Update()
    {
        Vector3 mousePosition = Input.mousePosition;
        Vector3 cameraPosition = cameraTransform.position;

        float xBoundary = Screen.width * boundarySize;
        float yBoundary = Screen.height * boundarySize;

        if (mousePosition.x < xBoundary && cameraPosition.x > composer.m_ScreenX - composer.m_DeadZoneWidth)
        {
            cameraTransform.Translate(Vector3.left * moveSpeed * Time.deltaTime);
        }
        else if (mousePosition.x > Screen.width - xBoundary && cameraPosition.x < composer.m_ScreenX + composer.m_DeadZoneWidth)
        {
            cameraTransform.Translate(Vector3.right * moveSpeed * Time.deltaTime);
        }

        if (mousePosition.y < yBoundary && cameraPosition.y > composer.m_ScreenY - composer.m_DeadZoneHeight)
        {
            cameraTransform.Translate(Vector3.down * moveSpeed * Time.deltaTime);
        }
        else if (mousePosition.y > Screen.height - yBoundary && cameraPosition.y < composer.m_ScreenY + composer.m_DeadZoneHeight)
        {
            cameraTransform.Translate(Vector3.up * moveSpeed * Time.deltaTime);
        }
    }
}
  1. 在“CameraInput”脚本中,您可以调整“boundarySize”和“moveSpeed”变量的值来控制边界大小和相机移动速度。

  2. 运行游戏并测试相机移动。现在,当鼠标接近屏幕边缘时,相机将在限制范围内移动。

怎么让cinemachine在一定范围内随鼠标触碰边界移动

原文地址: https://www.cveoy.top/t/topic/b4p7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录