【发布时间】:2021-05-25 19:46:42
【问题描述】:
我正在创建游戏,当玩家击中敌人时,血条应该是-1 out of 3。当我点击播放时,游戏正在运行,但是 ArgumentOutOfRangeException: Specified argument is out of the range of valid 的错误价值观。 参数名称:layer2 超出范围。层数必须在 0 到 31 的范围内仍然存在。谁能帮帮我。
代码如下:
public class PlayerControl : MonoBehaviour
{
public GameObject heart1, heart2, heart3;
public int playerHealth = 3;
int playerLayer, enemyLayer;
bool coroutineAllowed = true;
Color color;
Renderer rend;
// Start is called before the first frame update
void Start()
{
playerLayer = this.gameObject.layer;
enemyLayer = LayerMask.NameToLayer("Enemy");
Physics2D.IgnoreLayerCollision(playerLayer, enemyLayer, false);
heart1 = GameObject.Find("heart1");
heart2 = GameObject.Find("heart2");
heart3 = GameObject.Find("heart3");
heart1.gameObject.SetActive(true);
heart2.gameObject.SetActive(true);
heart3.gameObject.SetActive(true);
rend = GetComponent<Renderer>();
color = rend.material.color;
}
private void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag.Equals("Enemy"))
{
playerHealth -= 1;
switch (playerHealth)
{
case 2:
heart3.gameObject.SetActive(false);
if (coroutineAllowed)
StartCoroutine("Immortal");
break;
case 1:
heart2.gameObject.SetActive(false);
if (coroutineAllowed)
StartCoroutine("Immortal");
break;
case 0:
heart1.gameObject.SetActive(false);
if (coroutineAllowed) StartCoroutine("Immortal");
break;
}
}
if (playerHealth < 1)
{
gameOverText.SetActive(true);
restartButton.SetActive(true);
restartBox.SetActive(true);
Instantiate(blood, transform.position, Quaternion.identity);
gameObject.SetActive(false);
}
}
IEnumerator Immortal()
{
coroutineAllowed = false;
Physics2D.IgnoreLayerCollision(playerLayer, enemyLayer, true);
color.a = 0.5f;
rend.material.color = color;
yield return new WaitForSeconds(3f);
Physics2D.IgnoreLayerCollision(playerLayer, enemyLayer, false);
color.a = 1f;
rend.material.color = color;
coroutineAllowed = true;
}
}
【问题讨论】:
-
异常发生在哪一行?
-
嗨,它显示为附件,一切正常。我不知道为什么。 [链接] (linkpicture.com/view.php?img=LPic6080054718f15547900204)
-
目前我只是修复了 AnimationEvent has no function name specified 的错误。但我仍然得到 ArgumentOutOfRangeException: Specified argument was out of the range of valid values。参数名称:layer2 超出范围。层数必须在 0 到 31 的范围内。
-
请使用正确的标签。请注意,
unityscript是或更好地曾经是一种 JavaScript 风格,例如使用早期 Unity 版本的自定义语言,并且现在很长已弃用!你的代码看起来像c#。同样,仅仅因为您使用的是某个 IDE (visual studio) 并不意味着您的问题实际上与该 IDE 有关。