我正在关注在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)
);
}
}
任何人都可以帮我吗?这似乎是一个随机错误。
答案 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
内部的括号,向您展示如何在没有括号的情况下使用它。如果您不确定,只需添加括号,它将使您的代码更清晰,更容易理解,您将避免错误。