Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 坦克不会发射实例化的子弹_C#_Unity3d - Fatal编程技术网

C# 坦克不会发射实例化的子弹

C# 坦克不会发射实例化的子弹,c#,unity3d,C#,Unity3d,我开始在Unity3d中制作一个简单的游戏:一辆坦克向墙壁射击(见图) 一个GameObject被连接到坦克的炮塔上,下面的脚本被连接到这个GameObject: using UnityEngine; using System.Collections; public class Shooter : MonoBehaviour { public Rigidbody bullet; public float power = 1500f; void Update () {

我开始在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(“子弹射击”)
(用于测试)。将显示该消息,因此脚本已到达此点。我的代码有什么问题?

基于Unity的答案,您可能应该实例化bullet Prefact/实例的
游戏对象,而不是直接实例化它的
刚体。然后,访问新项目符号的
刚体
组件并添加力

调整后的
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);
    }
}
void更新(){
if(Input.GetButtonDown(“Fire1”)){
GameObject newBullet=实例化(bullet.GameObject、transform.position、transform.rotation)为GameObject;
刚体bulletRB=newBullet.GetComponent();
Vector3 fwd=变换.变换方向(Vector3.前进);
bulletRB.附加力(fwd*功率);
}
}
您可能需要更改的另一件事是使用
transform.forward
(也称为转台的前向向量)而不是
Vector3.forward
(全局前向向量
Vector3(0,0,1)
,这可能与转台的方向不匹配)

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

基于Unity的答案,您可能应该实例化bullet Prefact/实例的
游戏对象,而不是直接实例化其
刚体。然后,访问新项目符号的
刚体
组件并添加力

调整后的
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);
    }
}
void更新(){
if(Input.GetButtonDown(“Fire1”)){
GameObject newBullet=实例化(bullet.GameObject、transform.position、transform.rotation)为GameObject;
刚体bulletRB=newBullet.GetComponent();
Vector3 fwd=变换.变换方向(Vector3.前进);
bulletRB.附加力(fwd*功率);
}
}
您可能需要更改的另一件事是使用
transform.forward
(也称为转台的前向向量)而不是
Vector3.forward
(全局前向向量
Vector3(0,0,1)
,这可能与转台的方向不匹配)


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

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

默认情况下唤醒刚体。如果力的大小为零,那么刚体将不会被唤醒

以上描述摘自

因此,我建议先检查游戏对象是否处于活动状态。

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

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

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

默认情况下唤醒刚体。如果力的大小为零,那么刚体将不会被唤醒

以上描述摘自

因此,我建议先检查游戏对象是否处于活动状态。

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

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

首先,你在场景层次中看到子弹了吗?在项目符号上放置一个测试脚本,并在唤醒状态下进行调试,以查看它是否真正被创建。您可以在OnDestroy中放置另一个调试,以查看它是否被销毁。你是在坦克位置制造子弹,也许它击中了什么东西,并在离开现场之前摧毁了自己。我建议在枪口末端放置一个游戏物体,并将其连接到坦克上。你可以用它的transform.forward来表示子弹的方向。这里是因为我想看到一辆坦克朝一个目标射击wall@fafase-你的答案是可以的。首先,你看到场景层次结构中的项目符号了吗?在项目符号上放置一个测试脚本,并在唤醒状态下进行调试,以查看它是否真正被创建。您可以在OnDestroy中放置另一个调试,以查看它是否被销毁。你是在坦克位置制造子弹,也许它击中了什么东西,并在离开现场之前摧毁了自己。我建议在枪口末端放置一个游戏物体,并将其连接到坦克上。你可以用它的transform.forward来表示子弹的方向。这里是因为我想看到一辆坦克朝一个目标射击wall@fafase-你的回答没问题。TkxI用一种简单的方式解决了这个问题:我把射击脚本附加到了加农炮的孩子GObj身上。Tkx的想法。我解决它的方法很简单:我附加了射击脚本到一个戈布,加农炮的孩子。Tkx的想法。