敌人的逻辑错误

时间:2014-08-13 00:00:30

标签: unity3d unityscript

我正在关注在Unity中制作游戏的教程,我遇到了JavaScript / UnityScript的一个特殊问题:

#pragma strict

var Health = 100;

function ApplyDamage (TheDamage : int)
{
    Health -= TheDamage;

    if(Health <= 0)
    {
        Dead();
   }
}

function Dead()
{
    Destroy (gameObject);
}

这是我的敌人游戏对象的剧本,但是,尽管我有一个混战系统的逻辑,你必须点击他两次他死了,它不起作用,每当我的玩家角色走进敌人时在没有点击的情况下自动销毁。

我也会在这里发布我的近战系统:

#pragma strict

var TheDamage : int = 50;
var Distance : float;
var MaxDistance : float = 1.5;

function Update () 
{
     if (Input.GetButtonDown("Fire1"))

         var hit : RaycastHit;
         if (Physics.Raycast (transform.position, transform.TransformDirection(Vector3.forward), hit))
         {
             Distance = hit.distance;
             if (Distance < MaxDistance)
             (
                  hit.transform.SendMessage("ApplyDamage", TheDamage, SendMessageOptions. DontRequireReceiver)     
             );

   }
}

任何人都可以帮我吗?这似乎是一个随机错误。

2 个答案:

答案 0 :(得分:1)

您为近战系统发布的代码缺少第一个if语句的大括号{},导致它仅在单击鼠标时执行var hit : RaycastHit;,并且每次执行身体的其余部分调用更新。

答案 1 :(得分:1)

您的代码有问题。您实际上并未正确使用if语句。这是因为您没有使用{}。我将在下面发布您的代码解释方式:

 if (Input.GetButtonDown("Fire1"))
 {
    var hit : RaycastHit;
 }

 if (Physics.Raycast (transform.position, transform.TransformDirection(Vector3.forward), hit))
 {
     Distance = hit.distance;
     if (Distance < MaxDistance)
     {
        hit.transform.SendMessage("ApplyDamage", TheDamage, SendMessageOptions. DontRequireReceiver);    
     }                 
 }

显然这不是你想要的。请记住,如果您不放置括号,那么只有在满足if条件时才会执行if之后的行,其余的将独立执行if。

解决方案

if (Input.GetButtonDown("Fire1"))
{
    var hit : RaycastHit;
    if (Physics.Raycast (transform.position, transform.TransformDirection(Vector3.forward), hit))
    {
        Distance = hit.distance;

        // Intentionally left the brackets out of this if to show you.
        if(Distance < MaxDistance) 
           hit.transform.SendMessage("ApplyDamage", TheDamage, SendMessageOptions. DontRequireReceiver);     
    }
}

所以我故意遗漏if内部的括号,向您展示如何在没有括号的情况下使用它。如果您不确定,只需添加括号,它将使您的代码更清晰,更容易理解,您将避免错误。