【问题标题】:Enemy logic errors敌人逻辑错误
【发布时间】:2014-08-13 00:00:30
【问题描述】:

我正在学习使用 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)     
             );

   }
}

谁能帮我解决这个问题?这似乎是一个随机错误。

【问题讨论】:

    标签: unity3d unityscript


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您的代码有问题。您实际上没有正确使用 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 内部的括号,以向您展示如何在没有括号的情况下使用它。如果您不确定,只需添加括号,这将使您的代码更清晰,更易于理解,并且您将避免错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 2013-12-23
        • 2023-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多