【问题标题】:How can I access the component of an instantiated object in Unity?如何在 Unity 中访问实例化对象的组件?
【发布时间】:2020-08-25 08:26:46
【问题描述】:

好的,这就是正在发生的事情 我有这个带有“ApplyForce”方法的“Bullet”脚本,附加到 Bullet 预制件

public void ApplyForce (Vector2 direction)
{
    const float magnitude = 5f;
    GetComponent<Rigidbody2D>().AddForce(magnitude * direction, ForceMode2D.Impulse);
}

还有一个“Ship”脚本,该脚本将实例化一个 Bullet 并尝试访问其“Bullet”组件,然后访问“ApplyForce”方法以在船面向的同一方向上施加力

    // check for shooting input (left ctrl key) and fire
    if (Input.GetKeyDown(KeyCode.LeftControl))
    {
        GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);
        bullet.GetComponent<Bullet>().ApplyForce(thrustDirection);
    }

问题是,它不起作用。它发送此错误:

NullReferenceException:对象引用未设置为对象的实例 Ship.Update () (在 Assets/scripts/Ship.cs:56)

我知道我的问题是如何正确访问新实例化的游戏对象,但我找不到合适的方法来做到这一点。所以在这里我请求你的帮助。

对于任何可能激怒您的新手错误,我深表歉意,因为我对编码/编程还很陌生,并且对此几乎没有经验

【问题讨论】:

  • 基本的 C# 方式是bullet.ApplyForce(thrustDirection);,它在 Unity 中的工作方式应该相同。

标签: c# unity3d


【解决方案1】:

好吧,伙计们,我发现了问题:我真是个白痴! :D

我忘记将 Bullet 脚本附加到 Bullet 预制件中

【讨论】:

    【解决方案2】:

    第 56 行是哪一行?您可以尝试的一种常见方法是:

    bullet.GetComponentInChildren<Bullet>().ApplyForce(thrustDirection);
    

    如果这仍然不起作用,即第 56 行,请确保“thrustDirection”变量不为空。

    【讨论】:

    • 试过了,没用 :/ 并且推力方向不为空,如果是船就不会移动(它确实)如果我提供了整个两个脚本,你愿意吗?跨度>
    • 是的,这是第 56 行
    • 确保分享整个脚本以及您的预制件和附加组件的屏幕截图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多