在我的Unity3D游戏中,我有不明飞行物的敌人飞来飞去,并产生一些小鬼等。我想让它们比小仆人更难杀死所以在他们的主要剧本中我放了一些健康功能。我做到这一点,当玩家在不明飞行物上射击足够多次时,不明飞行物将被摧毁。 (而不是拍摄一次,然后噗!它消失了。) 这是第一人称射击游戏,由于某种原因,它不起作用。更糟糕的是,如果它持续足够长的时间,游戏崩溃并变成灰色屏幕。我查看了一些脚本论坛,但还没有找到答案。我可能在某个地方误用了一个变量(一个在C#中工作而不在javascript中),因为我不太清楚为什么它不起作用。
var UFOspeed : float = 0.2f; //the speed of it's flight
var UFOmovement = true;
var UFOmovement2 = false;
var UFOhealth = 10; //this is the amount of health I added. I'm unsure if in JS you have to put .0f at the end of numbers unless if it's a float.
function Start()
{
UFOmove();
}
function Update () //this update just changes the direction of the movement of the UFO
{
if(UFOmovement == true && UFOmovement2 == false)
{
this.transform.position.x += UFOspeed;
}
if(UFOmovement == true && UFOmovement2 == true)
{
this.transform.position.z += UFOspeed;
}
if(UFOmovement == false && UFOmovement2 == true)
{
this.transform.position.x -= UFOspeed;
}
if(UFOmovement == false && UFOmovement2 == false)
{
this.transform.position.z -= UFOspeed;
}
}
function UFOmove () //UFO movement
{
for(i=1;i>0;i++)
{
yield WaitForSeconds(1);
UFOmovement2 = true;
yield WaitForSeconds(1);
UFOmovement = false;
yield WaitForSeconds(1);
UFOmovement2 = false;
yield WaitForSeconds(1);
UFOmovement = true;
}
}
//This is where I have the bullet collision
function OnCollisionEnter(collision : Collision) {
if (collision.gameObject.tag == "Bullet") //if the tagged object is Bullet
{
UFOhealth = UFOhealth - 1; //takes away from the health I put above
}
if (UFOhealth <=0)
{
Destroy(collision.gameObject, 3.0);
}
}
感谢您的帮助!
答案 0 :(得分:1)
我从未使用过unity3d,但是看看你的代码,我可以看到几个主要问题(在我看来)。
在OnCollisionEnter
功能中,您正在检查碰撞是否与子弹有关。如果是,那么你从UFO健康中扣除1。到目前为止一切都很好。
然而,你正在检查健康状况是否已降至0 - 如果是,你正在摧毁子弹。相反,我建议无论不明飞行物的健康状况如何(即每次击中子弹被摧毁后)都需要销毁子弹。此外,如果UFO运行状况已降至0,则需要销毁实际的UFO对象。所以你的代码会变成这样:
function OnCollisionEnter(collision : Collision) {
if (collision.gameObject.tag == "Bullet") //if the tagged object is Bullet
{
UFOhealth = UFOhealth - 1; //takes away from the health I put above
Destroy(collision.gameObject);
}
if (UFOhealth <=0)
{
Destroy(UFOobject, 3.0);
}
}
请注意,这不适用于复制粘贴,只是为了让您了解我认为您的错误所在。