2015-09-15 10 views
0

Этот код предназначен для платформы лифтового типа, где, когда игрок стоит на нем, он «захватывает» игрока, добавляя к нему силу.Несмотря на то, что Force Applied, No Movement

Дело в том, что при создании силы жесткое тело (игрок) не перемещается при движении лифта. Код был написан на C#, используя Unity 5. В коде игроку присваивается общедоступный «rb» и содержит жесткое тело. Анимация - это простой анимационный клип, который перемещает лифт вверх. Есть идеи? Спасибо за ваше время и ответы заранее.

Лифт - Кинематический, Игрок - нет.

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, а затем до 5 000 000 это не повлияло. – user3280790

ответ

0

Похоже, что этот сценарий на игровом объекте вашего лифта, в этом случае эта строка:

rb.AddForce(transform.up * force); 

Постараюсь применить силу к лифту, а не игрока. Вы должны следить за жестким лицом игрока или каким-то образом получать его по запросу в AnimationPlay.

Вы сказали, что

игроку присваивается публичный «» радиоканал

rb = GetComponent<Rigidbody>(); Но будет игнорировать это и использовать Rigidbody прикрепленную к GameObject, что ElevatorMovementScript присоединен.

+0

Я принял эту часть вскоре после того, как я представил вопрос, так как увидел, что он заменил компонент на лифт. Сейчас это не решает проблему, но для меня это шаг в правильном направлении. Спасибо за ваш вклад. – user3280790

+0

@ user3280790 Не могли бы вы отредактировать вопрос с текущим кодом и информацией о игровом объекте? (Какие игровые объекты имеют какие компоненты, какие жесткие тела кинематичны и т. Д.) – 31eee384

+0

Выполнено. Спасибо за вашу дальнейшую помощь. – user3280790