Unity代码实现角色碰到障碍物,损失血量或死亡
1、角色设置
在PlayerController脚本中(挂载在角色上)
public class PlayerControler : MonoBehaviour
{
private Rigidbody2D rbody;
private CapsuleCollider2D cCollider;
private int maxHealth=4;
public int MyMaxHealth
{
get { return maxHealth; }
}
private int currentHealth;
public int MyCurrentHealth
{
get { return currentHealth; }
}
void Start()
{
currentHealth = 4;
rbody = GetComponent<Rigidbody2D>();
}
public void ReduceHealth(int health)
{
currentHealth = Mathf.Clamp(currentHealth - health, 0, maxHealth);
//Mathf.Clamp(表达式,最小值,最大值);这会将结果限制在最大值和最小值之间
}
//该函数用于当当前血量为0时,销毁角色自身,并切换场景,可根据游戏需要自行设计
public void death()
{
if (currentHealth == 0)
{
Destroy(gameObject);
SceneManager.LoadScene("Menu");
}
}
}
maxHealth:最大血量,用于约束角色血量不超过最大血量
currentHealth:当前血量,用于记录角色血量变化
在Start函数中设置当前血量为最大血量
编写一个减少血量的函数,参数为碰到障碍与减少的血量,和死亡判断函数
(函数一定要设为public,因为在别的脚本需要调用)
2、障碍物设置
添加碰撞器,并设置为触发器
创建一个脚本,挂载到障碍物上文章来源:https://www.toymoban.com/news/detail-519373.html
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class testshroom : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D other)
{
// Debug.Log("进去");
//下面是判断与障碍碰撞的是不是主角,如果是则调用PlayerController中减少血量的函数
PlayerControler pc = other.GetComponent<PlayerControler>();
if (pc!=null)
{
// Debug.Log("碰到我啦");
pc.ReduceHealth(5);
if (pc.MyCurrentHealth == 0)//判断血量是否为零,为零则死亡
{
pc.death();
}
//障碍物被碰撞后会销毁
Destroy(gameObject);
}
}
}
如有问题,欢迎讨论 o(@)o文章来源地址https://www.toymoban.com/news/detail-519373.html
到了这里,关于Unity代码实现角色碰到障碍物,损失血量或死亡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!