Velocity dan AddForce() tidak berfungsi di Unity

Di Game FPS saya, saya mencoba membuat pemain saya melempar granat. Saya tahu ada pertanyaan serupa seperti ini, tetapi postingannya sudah lama dan jawabannya tidak membantu saya sama sekali. Ketika saya mencoba melempar granat menggunakan metode AddForce(), granat tersebut hanya muncul tepat di depan pemain, seperti metode AddForce() tidak pernah dipanggil. Hal yang sama terjadi ketika saya mengatur kecepatannya ke suatu nilai. Sepertinya granatnya tidak bergerak sama sekali! Saya telah memastikan bahwa:

  • Granat BUKAN Kinematik
  • Itu tidak bekerja dengan gravitasi hidup dan mati
  • Tidak ada Posisi/Rotasi yang dibekukan
  • Ada tubuh kaku yang menempel
  • Tidak ada pengontrol karakter yang terpasang pada granat
  • Massanya hanya satu

Kode saya di bawah:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;



public class Script : MonoBehaviour {
    [SerializeField] GameObject grenade;
    public int throwForce = 30;
    Vector3 spawnPosition;

// Use this for initialization
void Start () {
        instantiateVariables ();
}   
    void instantiateVariables(){



    }
    void throwGrenade(){

        print (spawnPosition);
        GameObject tempGrenade = (GameObject)   Instantiate (grenade, spawnPosition, transform.rotation);
    Vector3 direction = new Vector3(transform.forward.x, transform.forward.y, transform.forward.z );

        Rigidbody rb = grenade.GetComponent<Rigidbody> ();          
    if (rb  != null){
    rb.velocity = direction.normalized * 10f;
        Destroy (tempGrenade, 10);
    }
    else {
        Debug.LogError ("There is no rigid body on your cube!");
    }

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


    spawnPosition = transform.forward + transform.position;
    print (spawnPosition);
        if (Input.GetMouseButtonDown (1)) {
            throwGrenade ();
        }

}


}

Inspektur:

Inspektur


person Aaron Ge    schedule 16.04.2016    source sumber


Jawaban (1)


Bukankah sebaiknya Anda menyimpan Komponen rigidBody tempGrenade di rb daripada di rigidBody granat? Saya akan merekomendasikan menggunakan rigidBody tempGrenade dan kemudian memodifikasi rb.velocity.

Menyukai:

rb = tempGrenade.GetComponent<Rigidbody> ();

EDIT: Memperbaiki baris kode dengan menghilangkan bidang kecepatan

person Dayman75    schedule 16.04.2016
comment
cukup lucu, baris di atas seharusnya tidak berfungsi karena mencoba menetapkan referensi ke komponen benda tegar ke bidang kecepatan (yang menurut saya merupakan Vector3). tapi selama OP berhasil menurutku... :D - person yes; 19.04.2016
comment
Saya kira penanya memperbaikinya, jika tidak maka akan memunculkan pesan kesalahan. - person Dayman75; 19.04.2016