为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
蓝山帝景 2023-04-16 09:52:03
我正在学习 Unity3D,现在正在创建一个简单的(无用的)游戏,如下所示。球从倾斜的地板上滚下,相机必须跟随球,具有以下关系x相机=x球y相机 =y球 + 3z相机 = 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;    }}问题尽管这两种方法都按预期工作,但我想知道每种方法是否有优缺点。我应该使用哪一个?
查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

正如您已经提到的,这两个示例都按预期工作。

不过,我喜欢做的是将功能分配给负责执行“操作”的对象。在这种情况下,相机正在“跟随”某物。目前,它正在跟随球,但以后如果您想让它跟随其他东西,是否必须导航到您的球类游戏对象以更改该行为是否有意义?我想不是。

通过根据“职责”为对象分配功能,您通常会发现从长远来看,您的代码最终会更加模块化。

当然,这种做法对于游戏开发或软件开发来说并不是什么新鲜事。它补充了单一职责原则并分享了它的许多特性。

但是,归根结底,如果您是独自编写代码,那么您就会对代码库了如指掌。所以这真的取决于你!

我还建议Components尽可能根据这些职责进行创建。因此,Camera我不会创建一个通用组件,而是创建一个FollowTarget组件并将其附加到相机上。这样做时,您将能够使用相同的功能Component让其他任意对象跟随您游戏中的另一个任意对象。

快乐学习!


查看完整回答
反对 回复 2023-04-16
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信