我正在学习 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
让其他任意对象跟随您游戏中的另一个任意对象。
快乐学习!
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消