【问题标题】:Tank does not shoot instantiated bullet坦克不射击实例化子弹
【发布时间】:2016-01-21 03:14:47
【问题描述】:

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

GameObject 连接到坦克的炮塔,GameObject 附加以下脚本:

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

当我按下 Fire1 按钮时,子弹不会射出。我在bulletRB.addForce() 之后放置(用于测试)Debug.Log("BULLET SHOOT")。显示消息,因此脚本到达了这一点。我的代码有什么问题?

【问题讨论】:

  • 首先,你看到场景层次结构中的子弹了吗?在项目符号上放置一个测试脚本,并在 Awake 中添加一个 Debug 以查看它是否真的被创建了。您可以在 OnDestroy 中放置另一个调试以查看它是否被破坏。您正在坦克位置制造子弹,也许它正在击中某些东西并在它离开现场之前自行摧毁。我建议在枪口末端放置一个游戏对象并将其连接到坦克上。您可以使用它的 transform.forward 作为子弹方向。
  • 这里是因为我想看坦克射击墙壁
  • @fafase - 你的回答没问题。Tkx

标签: c# unity3d


【解决方案1】:

根据 Unity Answers 上的this somewhat similar question,您可能应该实例化子弹预制件/实例的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),可能与炮塔的方向不匹配)。

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

【讨论】:

  • 我用这种简单的方式解决了这个问题:我将射击脚本附加到一个 GObj,大炮的孩子。 Tkx 的想法。
【解决方案2】:

力只能应用于主动刚体。 如果游戏对象处于非活动状态,则 AddForce 无效。

默认唤醒刚体。如果力大小为零,则不会唤醒刚体。

以上描述摘自Unity

因此,我建议先检查 GameObject 是否处于活动状态。

您可以通过以下方式对其进行测试:

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

【讨论】:

    猜你喜欢
    • 2022-08-03
    • 2014-01-22
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多