我正在學習 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 關注
- 118 瀏覽
添加回答
舉報
0/150
提交
取消