Velocity และ AddForce() ไม่ทำงานใน Unity

ในเกม FPS ของฉัน ฉันกำลังพยายามทำให้ผู้เล่นขว้างระเบิดมือ ฉันรู้ว่ามีคำถามที่คล้ายกันเช่นนี้ แต่โพสต์เก่าและคำตอบไม่ได้ช่วยฉันเลย เมื่อฉันพยายามขว้างระเบิดมือโดยใช้วิธี AddForce() ระเบิดมือนั้นเพิ่งจะเกิดตรงหน้าผู้เล่น เหมือนกับที่ไม่เคยเรียกวิธี AddForce() เลย สิ่งเดียวกันนี้เกิดขึ้นเมื่อฉันตั้งค่าความเร็วเป็นค่า ดูเหมือนว่าระเบิดจะไม่ขยับเลย! ฉันได้ทำให้แน่ใจว่า:

  • ระเบิดมือไม่ใช่จลนศาสตร์
  • มันไม่ทำงานทั้งเปิดและปิดแรงโน้มถ่วง
  • ไม่มีการหยุดตำแหน่ง/การหมุน
  • มีร่างกายที่แข็งกระด้างติดอยู่
  • ไม่มีตัวควบคุมอักขระติดอยู่กับระเบิดมือ
  • มวลมีเพียงหนึ่งเดียว

รหัสของฉันอยู่ด้านล่าง:

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 ();
        }

}


}

สารวัตร:

สารวัตร


person Aaron Ge    schedule 16.04.2016    source แหล่งที่มา


คำตอบ (1)


คุณไม่ควรเก็บ RigidBody Component ของ tempGrenade ไว้ใน rb แทนที่จะเป็น RigidBody ของ Grenade ใช่ไหม ฉันอยากจะแนะนำให้ใช้ RigidBody ของ tempGrenade แล้วแก้ไข rb.velocity

ชอบ:

rb = tempGrenade.GetComponent<Rigidbody> ();

แก้ไข: แก้ไขบรรทัดของโค้ดโดยการลบฟิลด์ความเร็ว

person Dayman75    schedule 16.04.2016
comment
ตลกดี บรรทัดด้านบนไม่ควรทำงานเพราะมันพยายามกำหนดการอ้างอิงไปยังส่วนประกอบของ Rigidbody ให้กับสนามความเร็ว (ซึ่งก็คือ Vector3 ที่ฉันเชื่อว่า) แต่ตราบใดที่ OP ใช้งานได้ฉันก็เดาว่า ... :D - person yes; 19.04.2016
comment
ฉันคิดว่าผู้ถามแก้ไขแล้ว ไม่เช่นนั้นจะทำให้เกิดข้อความแสดงข้อผิดพลาด - person Dayman75; 19.04.2016