我开始在Unity3d中制作一个简单的游戏:在墙上拍摄的坦克(见图)。
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")
。将显示该消息,因此脚本已达到此点。我的代码出了什么问题?
答案 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
}