一、背景介绍
在许多游戏开发中,我们经常需要实现一些随机事件,并且希望这些事件的发生概率可以根据我们的需求进行调整。例如,在角色扮演游戏中,玩家升级时可能会随机获得不同属性的提升,而不同属性的提升概率可能不同。为了实现这种基于权重的随机选择功能,我们可以使用本文介绍的脚本。
二、代码功能概述
WeightRandomTemp 脚本主要实现了以下几个功能:
- 加权随机事件选择:根据每个事件的权重,从一组事件中随机选择一个事件。
- 事件去重:确保为多个按钮绑定事件时,每个按钮绑定的事件不同。
- 事件绑定:将选中的事件与按钮的点击事件绑定,当按钮被点击时,执行相应的事件处理逻辑。
- 玩家属性更新:根据选中的事件,更新玩家的属性值。
代码总览:
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

1532

被折叠的 条评论
为什么被折叠?



