当让相机跟随一个球时,应该由哪一个来控制相机的位置?球还是相机本身?

我正在学习 Unity3D,现在正在创建一个简单的(无用的)游戏,如下所示。

在此处输入图像描述

球从倾斜的地板上滚下,相机必须跟随球,具有以下关系

  • x相机=x

  • y相机 =y球 + 3

  • z相机 = z- 10

有两种可能的方式来控制相机位置。

球控制相机

在这种情况下,我将以下脚本附加到球上。

public class Ball : MonoBehaviour

{

    [SerializeField]

    private Transform cameraTransform;


    void Start() { }


    void Update()

    {

        Vector3 newCameraPos = new Vector3

        {

            x = transform.position.x,

            y = transform.position.y + 3f,

            z = transform.position.z - 10f

        };

        cameraTransform.position = newCameraPos;

    }

}

相机自己控制

在这种情况下,我将以下脚本附加到相机。


public class Camera : MonoBehaviour

{


    [SerializeField]

    private Transform ballTransform;


    void Start() { }



    void Update()

    {

        Vector3 newCameraPos = new Vector3

        {

            x = ballTransform.position.x,

            y = ballTransform.position.y + 3f,

            z = ballTransform.position.z - 10f

        };

        this.transform.position = newCameraPos;

    }

}

问题

尽管这两种方法都按预期工作,但我想知道每种方法是否有优缺点。我应该使用哪一个?


蓝山帝景
浏览 100回答 1
1回答

梵蒂冈之花

正如您已经提到的,这两个示例都按预期工作。不过,我喜欢做的是将功能分配给负责执行“操作”的对象。在这种情况下,相机正在“跟随”某物。目前,它正在跟随球,但以后如果您想让它跟随其他东西,是否必须导航到您的球类游戏对象以更改该行为是否有意义?我想不是。通过根据“职责”为对象分配功能,您通常会发现从长远来看,您的代码最终会更加模块化。当然,这种做法对于游戏开发或软件开发来说并不是什么新鲜事。它补充了单一职责原则并分享了它的许多特性。但是,归根结底,如果您是独自编写代码,那么您就会对代码库了如指掌。所以这真的取决于你!我还建议Components尽可能根据这些职责进行创建。因此,Camera我不会创建一个通用组件,而是创建一个FollowTarget组件并将其附加到相机上。这样做时,您将能够使用相同的功能Component让其他任意对象跟随您游戏中的另一个任意对象。快乐学习!
打开App,查看更多内容
随时随地看视频慕课网APP