2017-07-30 5 views
0

私はこれを何時間もしてきましたが、まだ解決策を考え出していません。プレイヤーが最終ゴールに達すると、プレイヤーは終了位置に合って移動を停止したいと思います。 ![alt text] [1]終了レベルを達成し、プレーヤトランスフォームと最終目標を一致させます。 Unity

私はプレーヤーを最終目標の子にしているように見ましたが、何も動かすことができませんでした。

これは私のスクリプトです。

public float speed = 10; 
    public float turnSpeed = 10; 
    public float maxVelocityChange = 10; 
    public float gravity = 10; 
    public bool isAlive; 
    public Text Score; 
    public int CollectibleValue; 

    //sounds 
    private AudioSource source; 
    public AudioClip Spark; 



    private bool grounded; 
    private Rigidbody _rigidbody; 
    private Transform PlayerTransform; 



    // Use this for initialization 
    void Start() { 

     StartLevel(); 

     CollectibleValue = 0; 

    } 

    public void StartLevel(){ 

     PlayerTransform = GetComponent<Transform>(); 
     _rigidbody = GetComponent<Rigidbody>(); 
     _rigidbody.useGravity = false; 
     _rigidbody.freezeRotation = true; 


     isAlive = true; 

     source = GetComponent<AudioSource>(); 

    } 

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

     if (isAlive) { 
      PlayerTransform.Rotate (0, (Input.GetAxis ("Horizontal") * turnSpeed * Time.deltaTime), 0); 

      Vector3 targetVelocity = new Vector3 (0, 0, speed * Time.deltaTime); 
      targetVelocity = PlayerTransform.TransformDirection (targetVelocity); 
      targetVelocity = targetVelocity * speed; 

      Vector3 velocity = _rigidbody.velocity; 
      Vector3 velocityChange = targetVelocity - velocity; 
      velocityChange.x = Mathf.Clamp (velocityChange.x, -maxVelocityChange, maxVelocityChange); 
      velocityChange.z = Mathf.Clamp (velocityChange.z, -maxVelocityChange, maxVelocityChange); 
      velocityChange.y = 0; 
      _rigidbody.AddForce (velocityChange, ForceMode.VelocityChange); 


      _rigidbody.AddForce (new Vector3 (0, -gravity * _rigidbody.mass, 0)); 
     } 

     Score.text = CollectibleValue.ToString(); 
    } 





    void OnTriggerEnter(Collider Triggers) { 

     if (Triggers.tag == "Endgoal") { 

      isAlive = false; 
        // Here is where the player needs to stop and match the position of the end goal. 

     } 

検索した後、私は私がターゲットのためのパブリック変数変換を作り、このコード行を使用し、私が答えであることを思いました。

void OnTriggerEnter(Collider Triggers) { 

     if (Triggers.tag == "Endgoal") { 

      isAlive = false; 
      PlayerTransform.transform.Translate (target.transform.position); 

問題は、ターゲットが移動していない位置にプレーヤーが移動しても、プレーヤーがまだ前方に移動しているという問題です。 また、ブール 'isAlive'がfalseの場合、フォワードムーブはまだ行われていますか?

答えて

1

Translateはないに与えられたベクトル、によってGameObject与えられたベクトルを移動させます。 See the documentation.

transform.positionに設定すると、GameObjectを特定の位置に移動できます。あなたの質問のisAlive一部についてあなたのケース

void OnTriggerEnter(Collider Triggers) 
{ 
    if (Triggers.tag == "Endgoal") 
    { 
     isAlive = false; 
     PlayerTransform.transform.position = target.transform.position; 
    } 
} 

では、あなたはすでにあなたが力を加えることを停止する場合でもので、それはまだ動いている物体に力/速度を追加しました。移動を停止したいときは、速度をゼロに設定します。

_rigidbody.velocity = Vector3.zero; 
_rigidbody.angularVelocity = Vector3.zero; 
関連する問題