簡體   English   中英

使用MovePosition的Unity 3D剛體2D運動

[英]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,其設置如下:

  • 質量= 1
  • 線性阻力= 0
  • 角阻力= 0
  • 重力比例= 0
  • 固定角度=真
  • 運動學=假
  • 插值=無
  • 睡眠模式=開始喚醒
  • 碰撞檢測=離散

但是,當我按箭頭鍵時,屏幕上顯示的精靈不會移動。 我錯過了什么?

試圖在if情況下添加Debug.Log() ,它確實進入了情況。 並沒有發生錯誤。

注意: speedX = new Vector2(1,0); speedY = new Vector2(0,1);

從游戲的角度來看,您正在嘗試移動一個不存在的對象。 通過從資產庫中拖動cursorcursor分配預制件,就像分配藍圖一樣。 告訴預制件移動就像喊着汽車的藍圖以加速:)

有兩種通用解決方案。

1)保存參考

實例化預制件並保存生成的引用以操縱新對象。 如果您主要對使用剛體感興趣,可以將其直接轉換為Rigidbody2D 僅當您的預制變量為相同類型時,才能進行強制轉換,否則將引發異常。 這樣可以確保您的預制件始終包含Rigidbody2D或者甚至不能在編輯器中分配它。

public Rigidbody2D cursorPrefab; // your prefab assigned by the Unity Editor

Rigidbody2D cursorClone = (Rigidbody2D) Instantiate(cursorPrefab);
cursorClone.MovePosition (cursorClone.position - speedX);

2)將腳本分配給預制

根據您的游戲和想要實現的目標,您還可以將腳本直接添加到預制中。 這樣,它的每個實例都可以控制自己。

void Update () {
  if (Input.GetKeyDown ("left")) {
    rigidbody2D.MovePosition (rigidbody2D.position - speedX);
  } else { //...}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM