我正在學(xué)習(xí) Unity3D,現(xiàn)在正在創(chuàng)建一個簡單的(無用的)游戲,如下所示。球從傾斜的地板上滾下,相機必須跟隨球,具有以下關(guān)系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; }}問題盡管這兩種方法都按預(yù)期工作,但我想知道每種方法是否有優(yōu)缺點。我應(yīng)該使用哪一個?
1 回答

梵蒂岡之花
TA貢獻(xiàn)1900條經(jīng)驗 獲得超5個贊
正如您已經(jīng)提到的,這兩個示例都按預(yù)期工作。
不過,我喜歡做的是將功能分配給負(fù)責(zé)執(zhí)行“操作”的對象。在這種情況下,相機正在“跟隨”某物。目前,它正在跟隨球,但以后如果您想讓它跟隨其他東西,是否必須導(dǎo)航到您的球類游戲?qū)ο笠愿脑撔袨槭欠裼幸饬x?我想不是。
通過根據(jù)“職責(zé)”為對象分配功能,您通常會發(fā)現(xiàn)從長遠(yuǎn)來看,您的代碼最終會更加模塊化。
當(dāng)然,這種做法對于游戲開發(fā)或軟件開發(fā)來說并不是什么新鮮事。它補充了單一職責(zé)原則并分享了它的許多特性。
但是,歸根結(jié)底,如果您是獨自編寫代碼,那么您就會對代碼庫了如指掌。所以這真的取決于你!
我還建議Components
盡可能根據(jù)這些職責(zé)進(jìn)行創(chuàng)建。因此,Camera
我不會創(chuàng)建一個通用組件,而是創(chuàng)建一個FollowTarget
組件并將其附加到相機上。這樣做時,您將能夠使用相同的功能Component
讓其他任意對象跟隨您游戲中的另一個任意對象。
快樂學(xué)習(xí)!
- 1 回答
- 0 關(guān)注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消