unity权重随机绑定事件

一、背景介绍

 

在许多游戏开发中,我们经常需要实现一些随机事件,并且希望这些事件的发生概率可以根据我们的需求进行调整。例如,在角色扮演游戏中,玩家升级时可能会随机获得不同属性的提升,而不同属性的提升概率可能不同。为了实现这种基于权重的随机选择功能,我们可以使用本文介绍的脚本。

二、代码功能概述

 

WeightRandomTemp 脚本主要实现了以下几个功能:

 

  1. 加权随机事件选择:根据每个事件的权重,从一组事件中随机选择一个事件。
  2. 事件去重:确保为多个按钮绑定事件时,每个按钮绑定的事件不同。
  3. 事件绑定:将选中的事件与按钮的点击事件绑定,当按钮被点击时,执行相应的事件处理逻辑。
  4. 玩家属性更新:根据选中的事件,更新玩家的属性值。

 代码总览:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[System.Serializable]
public class WeightedRandomevent
{
    [Header("属性名")]
    public string propertyName;
    [Header("该属性权重")]
    public float weight;
    [Header("该属性最小值")]
    public float minValue;
    [Header("该属性最大值")]
    public float maxValue;
}
[System.Serializable]
public class PlayerValue
{
    public float maxHealth;

}
public class WeightRandomTemp : MonoBehaviour
{
    public PlayerValue playerValue = new PlayerValue();
    public List<WeightedRandomevent> weighteds = new List<WeightedRandomevent>();
    public Button btn1;
    public Button btn2;
    public void RandomValue()
    {
        // 为 btn1 选择一个随机事件
        WeightedRandomevent selectedEvent1 = GetWeightedRandomEvent();
        ButtonAddLis(selectedEvent1, btn1);

        // 为 btn2 选择一个随机事件
        WeightedRandomevent selectedEvent2;
        do
        {
            selectedEvent2 = GetWeightedRandomEvent();
        } while (selectedEvent2 != null && selectedEvent2.propertyName == selectedEvent1.propertyName);

        ButtonAddLis(selectedEvent2, btn2);
        foreach (var weightedEvent in weighteds)
        {
            UpdatePlayerValue(weightedEvent);
        }
    }
    public void ButtonAddLis(WeightedRandomevent weightEvent,Button btn)
    {
        if (weigh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值