ArgumentOutOfRangeException:指定的参数超出了有效值的范围.c#



我正在创建游戏,当玩家击中敌人时,健康条应该为-3中的-1。当我单击播放时,游戏正在运行,但ArgumentOutOfRangeException的错误:指定的参数超出了有效值的范围。参数名称: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;
}
}

来自LayerMask.NameToLayer

给定层名,返回由Tags and Layers管理器中的Builtin或User layer定义的层索引。

如果未找到,则返回-1

听起来您没有配置任何名为Enemy的层,因此enemyLayer将具有值-1,这不是Physics2D.IgnoreLayerCollision允许的参数。

相关内容

最新更新