Unity代码实现角色碰到障碍物,损失血量或死亡

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、障碍物设置
     添加碰撞器,并设置为触发器
Unity代码实现角色碰到障碍物,损失血量或死亡_第1张图片
创建一个脚本,挂载到障碍物上

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

你可能感兴趣的:(Unity3D游戏制作基础知识,unity,游戏引擎)