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、障碍物设置
     添加碰撞器,并设置为触发器
在这里插入图片描述
创建一个脚本,挂载到障碍物上

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

  • 1
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的参考代码实现随机生成障碍物实现移动: ```C# public class ObstacleGenerator : MonoBehaviour { public GameObject obstaclePrefab; public float minSpawnDelay = 1f; public float maxSpawnDelay = 3f; public float obstacleSpeed = 5f; private float timer = 0f; private float spawnDelay = 0f; void Start() { // 初始化生成时间 spawnDelay = Random.Range(minSpawnDelay, maxSpawnDelay); } void Update() { // 计时器 timer += Time.deltaTime; // 如果计时器超过生成时间,则生成障碍物 if (timer >= spawnDelay) { // 重置计时器和生成时间 timer = 0f; spawnDelay = Random.Range(minSpawnDelay, maxSpawnDelay); // 随机生成位置和旋转角度 Vector3 randomPos = transform.position + new Vector3(Random.Range(-5f, 5f), 0f, 0f); Quaternion randomRot = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f); // 创建障碍物 GameObject obstacle = Instantiate(obstaclePrefab, randomPos, randomRot); // 给障碍物添加刚体和向前的速度 Rigidbody rb = obstacle.GetComponent<Rigidbody>(); rb.velocity = Vector3.back * obstacleSpeed; } } } ``` 在这个代码中,我们使用了Unity的计时器来进行随机生成障碍物的计时,使用了Random.Range()函数来生成随机位置和旋转角度,使用了Instantiate()函数来创建障碍物,使用了Rigidbody和Transform.Translate()函数来使障碍物和玩家向前移动。当然,这只是一个简单的实现,你可以根据自己的需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值