2015-09-15 60 views
0

這個代碼適用於電梯型平臺,一旦玩家站在平臺上,它就會通過向其施加力量來「取得」玩家。儘管有部隊應用,但沒有任何運動

事情是,當力量被創造時,剛體(玩家)在電梯移動時不會移動。代碼是用C#編寫的,使用Unity 5.在代碼中,玩家被分配公共'rb',並且包含一個剛體。 動畫是一個簡單的動畫剪輯,可以將電梯向上移動。有任何想法嗎?預先感謝您的時間和答案。

電梯是Kinematic,玩家不是。

using UnityEngine; 
using System.Collections; 

/*This script activates when the player steps on the elevator, as it takes them up a floor.*/ 

public class ElevatorMovementScript : MonoBehaviour 
{ 
    private bool elevatorUp = false; 
    public Animation anim; 
    public int elevatorDelay = 5; 
    public int force = 800; 
    public Rigidbody rb; 

    // Use this for initialization 
    void Start() 
    { 
     anim = GetComponent<Animation>(); 
    } 
    // Update is called once per frame 
    void Update() 
    { 

    } 
    /*Checks if the player has stepped onto the elevator. If the player has, it waits five seconds, and then pushes the player up.*/ 
    void OnTriggerStay(Collider other) 
    { 
     if (other.gameObject.tag == "Player" && !elevatorUp) 
     { 
      Invoke("AnimationPlay",elevatorDelay); 
      elevatorUp = true; 
     } 
    } 
    /*Plays the animation of the player going up. Used for the 'Invoke' method.*/ 
    void AnimationPlay() 
    {   
     rb.AddForce(transform.up * force); 
     Debug.Log (transform.up * force); 
     anim.Play ("Up"); 
    } 
} 
+0

你試過改變'force'的值嗎?在很多情況下,如果剛體不移動,這是由於力量太低的事實造成的。 –

+0

如果它確實是一個移動平臺,那麼您應該使用運動學剛體而不是施加力。它會使平臺像一個平臺一樣行事。 – 31eee384

+0

@VenkatatAxiomStudios - 我將部隊設置爲500人,然後達到500萬人沒有影響。 – user3280790

回答

0

看起來這個劇本是您電梯的遊戲對象,在這種情況下,該行:

rb.AddForce(transform.up * force); 

會嘗試將壓力施加到電梯,而不是球員。你必須跟蹤玩家的剛體,或以某種方式在AnimationPlay上按需求獲得。

你說

玩家被賦予公衆「RB」

rb = GetComponent<Rigidbody>();會忽略這一點,並使用連接到ElevatorMovementScript連接到遊戲物體的剛體。

+0

我提交問題後不久就把那部分拿出來了,因爲我看到它將組件更改爲電梯。它現在不能解決問題,但這是我朝着正確方向邁出的一步。謝謝您的意見。 – user3280790

+0

@ user3280790你可以用當前的代碼和遊戲對象信息編輯問題嗎? (哪些gameobjects具有哪些組件,哪些rigidbodies是運動的等) – 31eee384

+0

完成。感謝您的持續幫助。 – user3280790

相關問題