C# 坦克不会发射实例化的子弹
我开始在Unity3d中制作一个简单的游戏:一辆坦克向墙壁射击(见图) 一个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 () {
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的想法。