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
Unity3d 降低敌人生命值脚本_Unity3d_Unityscript - Fatal编程技术网

Unity3d 降低敌人生命值脚本

Unity3d 降低敌人生命值脚本,unity3d,unityscript,Unity3d,Unityscript,在我的Unity3D游戏中,我有飞碟敌人,他们四处飞来飞去,生出小爪牙等等。我想让他们比小爪牙更难被杀死,所以在他们的主要剧本中我加入了一些健康功能。我这样做是为了当玩家向不明飞行物射击足够多次时,不明飞行物就会被摧毁。(而不是拍一次,然后噗!它不见了。) 这是一个第一人称射击,由于某种原因,它不起作用。更糟糕的是,如果游戏持续足够长的时间,游戏就会崩溃,变成灰色屏幕。我在一些脚本论坛上看过,还没有找到答案。我可能在某个地方误用了一个变量(一个在C#中工作而在javascript中不工作的变量)

在我的Unity3D游戏中,我有飞碟敌人,他们四处飞来飞去,生出小爪牙等等。我想让他们比小爪牙更难被杀死,所以在他们的主要剧本中我加入了一些健康功能。我这样做是为了当玩家向不明飞行物射击足够多次时,不明飞行物就会被摧毁。(而不是拍一次,然后噗!它不见了。) 这是一个第一人称射击,由于某种原因,它不起作用。更糟糕的是,如果游戏持续足够长的时间,游戏就会崩溃,变成灰色屏幕。我在一些脚本论坛上看过,还没有找到答案。我可能在某个地方误用了一个变量(一个在C#中工作而在javascript中不工作的变量),因为我不太确定它为什么不工作

var-UFOspeed:float=0.2f//它的飞行速度
var UFOmovement=真;
var UFOmovement2=假;
var UFOhealth=10//这是我增加的健康量。我不确定在JS中是否必须将.0f放在数字的末尾,除非它是一个浮点数。
函数Start()
{
UFOmove();
}
函数Update()//这个更新只是改变了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;
}
}
函数UFOmove()//UFO移动
{
对于(i=1;i>0;i++)
{
收益等待秒(1);
UFOmovement2=真;
收益等待秒(1);
UFOmovement=假;
收益等待秒(1);
UFOmovement2=假;
收益等待秒(1);
UFOmovement=true;
}
}
//这就是我被子弹击中的地方
函数onCollisionCenter(碰撞:碰撞){
if(collision.gameObject.tag==“Bullet”)//如果标记的对象是Bullet
{
UFOhealth=UFOhealth-1;//剥夺了我上面提到的健康
}

如果(UFOhealth我从未使用过unity3d,但是查看您的代码,我可以看到几个主要问题(在我看来)

在你的
OnCollisionCenter
函数中,你正在检查碰撞是否与子弹相撞。如果是,那么你将从UFO生命值中扣除1。到目前为止还不错

然而,你正在检查生命值是否降到0,如果是,你正在销毁子弹。相反,我建议,无论UFO的生命值如何,都需要销毁子弹(即每次击中后,子弹都会被销毁)。此外,如果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);
    }
}
函数onCollisionCenter(冲突:冲突){
if(collision.gameObject.tag==“Bullet”)//如果标记的对象是Bullet
{
UFOhealth=UFOhealth-1;//剥夺了我上面提到的健康
破坏(碰撞,游戏对象);
}

如果(UFOhealth)你说得对!我错过了。在JS中我会写Destroy(this.gameObject,3.0);来摧毁UFO。不幸的是,UFO在命中1次后仍然会自动删除。至少游戏不再崩溃(这可能是某个地方的语法错误)但希望我自己能弄明白这一点。建议销毁子弹真是个好主意,谢谢!