我正在学习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;
}
}问题
尽管这两种方法都如预期的那样工作,但我想知道每种方法是否都有任何优缺点。我应该用哪一种?
发布于 2019-06-17 15:51:03
正如您已经提到的,这两个示例都如预期的那样工作。
不过,我喜欢做的是将功能分配给负责执行“操作”的对象。在这种情况下,相机是‘跟踪’的东西。目前,它是跟踪球,但后来,如果你想让它跟随其他东西,它是否有意义,必须导航到你的球游戏对象,以改变这种行为?我不这么认为。
通过根据“责任”为对象分配功能,您通常会发现,从长远来看,您的代码最终是更加模块化的。
当然,这种实践对于游戏开发或软件开发来说都不是什么新鲜事。它补充了单一责任原则,并分享了它的许多品质。
但是,在一天结束时,如果您单独处理代码,那么您将从内到外了解代码基。所以这真的取决于你!
我还建议尽可能根据这些职责创建Components。因此,我将创建一个Camera组件,并将其附加到相机上,而不是一个通用的FollowTarget组件。在这样做的过程中,您将能够使用相同的Component使其他任意对象跟随游戏中的另一个任意对象。
学习愉快!
https://stackoverflow.com/questions/56634419
复制相似问题