[英]Unity 3D Rigidbody 2D movement using MovePosition
在2D模式下,我將腳本附加到Sprite。 Update()
部分如下:
void Update () {
if (Input.GetKeyDown ("left")) {
cursor.rigidbody2D.MovePosition (cursor.rigidbody2D.position - speedX);
} else if (Input.GetKeyDown ("right")) {
cursor.rigidbody2D.MovePosition (cursor.rigidbody2D.position + speedX);
} else if (Input.GetKeyDown ("up")) {
cursor.rigidbody2D.MovePosition (cursor.rigidbody2D.position + speedY);
} else if (Input.GetKeyDown ("down")) {
cursor.rigidbody2D.MovePosition (cursor.rigidbody2D.position - speedY);
}
}
其中cursor
是在Inspector中鏈接的Prefab。 cursor
預制只有2個組件,Sprite Renderer(用於定義圖像)和Rigidbody 2D,其設置如下:
但是,當我按箭頭鍵時,屏幕上顯示的精靈不會移動。 我錯過了什么?
試圖在if
情況下添加Debug.Log()
,它確實進入了情況。 並沒有發生錯誤。
注意: speedX = new Vector2(1,0);
和speedY = new Vector2(0,1);
從游戲的角度來看,您正在嘗試移動一個不存在的對象。 通過從資產庫中拖動cursor
為cursor
分配預制件,就像分配藍圖一樣。 告訴預制件移動就像喊着汽車的藍圖以加速:)
有兩種通用解決方案。
實例化預制件並保存生成的引用以操縱新對象。 如果您主要對使用剛體感興趣,可以將其直接轉換為Rigidbody2D
。 僅當您的預制變量為相同類型時,才能進行強制轉換,否則將引發異常。 這樣可以確保您的預制件始終包含Rigidbody2D
或者甚至不能在編輯器中分配它。
public Rigidbody2D cursorPrefab; // your prefab assigned by the Unity Editor
Rigidbody2D cursorClone = (Rigidbody2D) Instantiate(cursorPrefab);
cursorClone.MovePosition (cursorClone.position - speedX);
根據您的游戲和想要實現的目標,您還可以將腳本直接添加到預制中。 這樣,它的每個實例都可以控制自己。
void Update () {
if (Input.GetKeyDown ("left")) {
rigidbody2D.MovePosition (rigidbody2D.position - speedX);
} else { //...}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.