2016-09-27 38 views
0

我正在製作一款遊戲,其中角色在人與鳥之間切換。當他是人類時,他可以推桶。當他是一隻鳥時,我想增加槍管的重量,這樣就很難推動。我目前在玩家和槍管上都有BoxCollider2D和RigidBody2D。沒有觸發器設置。當玩家觸摸它時,如何改變物體的質量?

這是我在桶上的腳本。

private GrimScript script; 
private Rigidbody2D rb; 
public float normalMass = 10f; 
public float heavyMass = 100f; 

// Use this for initialization 
void Awake() 
{ 
    script = GameObject.FindGameObjectWithTag("Player").GetComponent<GrimScript>(); 
    rb = gameObject.GetComponent<Rigidbody2D>();  
} 

// Update is called once per frame 
void Update() 
{ 

} 

void OnCollisionEnter2D(Collision2D other) 
{ 
    if (other.gameObject.CompareTag("Player") && script.amIRaven) 
    { 
     rb.mass = heavyMass; 
    } 
    else 
    { 
     rb.mass = normalMass; 
    } 
} 
+0

爲什麼不減少玩家的質量/力量?這看起來更準確,並且不必調整可能推送的所有內容的質量。 – Carcigenicate

回答

-1

UE4開發人員在這裏。如果我要在UE4中完成這項任務。 Id有一個觸發語句來檢查玩家是否是人形或鳥形,然後根據用戶的具體形式,將質量變量設置爲給定的數量,只需改變角色的速度,這又會移動物品比較慢。

從塞爾達傳說的角度來看,當Link走進一個盒子時,他的動畫(取決於遊戲)要麼放慢速度,要麼只是繼續向對象方向緩慢地移動,

有被考慮,如您計劃如何移動的項目,相當多的變量無論您是物理拿起它,只是在地板上滑動等

--edit 1--

在重新閱讀您的文章後,我意識到您似乎正在以非常線性的方向移動一個桶,在這種情況下,類似塞爾達的方法會更容易。簡單地改變步行速度,同時改變動畫或保持相同。如果有更簡單的方法來處理某些事物,我覺得像物理雜亂無法超越您的編程經驗。

+0

我沒想過只是改變玩家的速度。如果可以,我會盡力的。現在我收到的錯誤是「NullReferenceExeception:對象引用未設置爲對象的實例」 我想知道如果我上面的代碼可以工作,但也許我有一個語法問題。如果我消除了檢查amiraven和改變質量的部分,只需添加Destroy(gameObject),它至少可以識別碰撞。 –

0

問題實際上是我參考了附在播放器上的腳本(GrimScript)。碰撞和大衆工作的參考很好。我讓玩家gameobject成爲一個公共變量,然後訪問該變量的組件。

public class BarrelPush : MonoBehaviour { 

public GameObject thePlayer; 
private GrimScript script; 
private Rigidbody2D rb; 
public float normalMass = 10f; 
public float heavyMass = 100f; 

// Use this for initialization 
void Awake() { 
    //script = gameObject.FindGameObjectWithTag("Player").GetComponent<GrimScript>(); 
    script = thePlayer.GetComponent<GrimScript>(); 
    rb = gameObject.GetComponent<Rigidbody2D>(); 

} 

void OnCollisionEnter2D(Collision2D other) { 

    if (other.gameObject.CompareTag("Player") && script.amIRaven) 
    { 
     rb.mass = heavyMass; 
    } else 
    { 
     rb.mass = normalMass; 
      } 
} 

} 
相關問題