坦克不射击实例化的子弹

时间:2016-01-20 18:28:24

标签: c# unity3d

我开始在Unity3d中制作一个简单的游戏:在墙上拍摄的坦克(见图)。

enter image description here

GameObject附在坦克的炮塔上,并附加了以下脚本{<1}}:

GameObject

当我按下Fire1按钮时,子弹不会射击。我在using UnityEngine; using System.Collections; public class Shooter : MonoBehaviour { public Rigidbody bullet; public float power = 1500f; void Update () { if (Input.GetButtonDown ("Fire1")) { Rigidbody bulletRB = Instantiate (bullet, transform.position, transform.rotation) as Rigidbody; Vector3 fwd = transform.TransformDirection(Vector3.forward); bulletRB.AddForce(fwd*power); } } } 之后放了{测试'Debug.Log("BULLET SHOOT")。将显示该消息,因此脚本已达到此点。我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

基于Unity Answers上的this somewhat similar question,您可能应该实例化bullet预制件/实例的GameObject,而不是直接实例化Rigidbody。然后,访问该新子弹的Rigidbody组件并添加力量。

您调整后的Update()方法将如下所示:

void Update () {
    if (Input.GetButtonDown ("Fire1")) {
        GameObject newBullet = Instantiate (bullet.gameObject, transform.position, transform.rotation) as GameObject;

        RigidBody bulletRB = newBullet.GetComponent<Rigidbody>();
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        bulletRB.AddForce(fwd*power);
    }
}

您可能想要改变的另一件事是使用transform.forward(也就是炮塔的前向矢量)而不是Vector3.forward(全局前向矢量Vector3(0, 0, 1),它可能与炮塔)。

希望这有帮助!如果您有任何问题,请告诉我。

答案 1 :(得分:0)

力只能应用于活动的刚体。 如果GameObject处于非活动状态,则AddForce无效。

默认唤醒Rigidbody。如果力的大小为零,那么刚体就不会被唤醒。

以上说明摘自Unity

因此,我建议先检查GameObject是否有效。

您可以通过执行以下操作来测试它:

if (newBullet.activeInHierarchy === true)
{
  //active
}else{
  //inactive
}