Unity 通过权重做随机

我们可以通过Random.Range方法结合权重来实现随机选择。具体步骤如下:

  1. 首先,创建一个数组,其中包含你要选择的项目,并为每个项目分配一个权重值。

  2. 计算所有权重值的总和。

  3. 使用Random.Range生成一个介于0和总权重之间的随机数。

  4. 遍历数组,并将随机数逐渐减去每个项目的权重值,直到找到最后一个权重导致随机数变为负数的项目。

  5. 返回所选项目。

所以具体的代码为

using UnityEngine;public class WeightedRandom : MonoBehaviour
{// 定义一个包含游戏对象和权重的内部类[System.Serializable]public class WeightedObject{public GameObject gameObject; // 游戏对象public float weight; // 权重}public WeightedObject[] weightedObjects; // 存储带权重的游戏对象数组private float totalWeight; // 所有对象的总权重private void Start(){CalculateTotalWeight(); // 在启动时计算总权重}// 计算所有对象的总权重private void CalculateTotalWeight(){totalWeight = 0f;foreach (WeightedObject obj in weightedObjects){totalWeight += obj.weight;}}// 按照权重随机选择一个对象public GameObject GetRandomObjectByWeight(){float randomValue = Random.Range(0f, totalWeight); // 生成随机值foreach (WeightedObject obj in weightedObjects){randomValue -= obj.weight; // 减去对象的权重if (randomValue <= 0){return obj.gameObject; // 如果随机值小于等于0,返回该对象}}// 如果未找到对象,则返回数组中最后一个对象return weightedObjects[weightedObjects.Length - 1].gameObject;}
}

在这个示例中,WeightedObject类包含了游戏对象以及它们的权重。在Start方法中,计算了所有对象的总权重。然后,GetRandomObjectByWeight方法根据总权重随机选择一个对象,并返回选定的游戏对象。

使用方法:将 此脚本附加到Unity游戏对象上,并在Unity编辑器中将权重和游戏对象分配给WeightedObject数组。

测试:

场景树如下

脚本挂载

WeightedRandom 脚本里新增如下测试代码

    public void OnClickRandomObject(){Debug.LogError(this.GetRandomObjectByWeight());}

Button注册事件

随机结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618681.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

消除 BEV 空间中的跨模态冲突,实现 LiDAR 相机 3D 目标检测

Eliminating Cross-modal Conflicts in BEV Space for LiDAR-Camera 3D Object Detection 消除 BEV 空间中的跨模态冲突&#xff0c;实现 LiDAR 相机 3D 目标检测 摘要Introduction本文方法Single-Modal BEV Feature ExtractionSemantic-guided Flow-based AlignmentDissolved…

2024妈妈杯数学建模A 题思路分析-移动通信网络中 PCI 规划问题

# 1 赛题 A 题 移动通信网络中 PCI 规划问题 物理小区识别码(PCI)规划是移动通信网络中下行链路层上&#xff0c;对各覆盖 小区编号进行合理配置&#xff0c;以避免 PCI 冲突、 PCI 混淆以及 PCI 模 3 干扰等 现象。 PCI 规划对于减少物理层的小区间互相干扰(ICI)&#xff0c;增…

jvisualVM分析jvm内存使用快照dump

服务发生内存溢出&#xff0c;就需要查看服务器上Java服务的jvm堆内存使用情况&#xff0c;可以使用dump命令生成dump文件&#xff0c;然后下载到本地&#xff0c;然后使用jvisualVM工具打开&#xff0c;即可实现可视化分析。 生成dump文件常用的两种方式&#xff1a; 第一种…

软件测试基础知识点汇总

1、衡量一个优秀软件的维度 质量模型&#xff1a;功能性、性能、兼容性、易用性、可靠性、安全、可维护性、可移植性。 2、软件测试流程 需求评审、计划编写、用例设计、用例执行、缺陷管理、测试报告 3、用例设计编写格式 用例编号、用例标题、项目/模块、优先级、前置条…

赋能未来:AI技术革新中的创业契机

目录 前言 一、行业解决方案 1、行业参考说明 2、操作步骤建议 二、智能产品和服务 1、行业参考说明 2、操作步骤建议 三、教育和培训 1、行业参考说明 2、操作步骤建议 总结 前言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;越来越多的创业…

【前端面试3+1】16 TCP与UDP的区别、如何清除浮动、哪些原因造成阻塞页面渲染、【相同的树】

一、TCP与UDP的区别 TCP&#xff08;Transmission Control Protocol&#xff09;和UDP&#xff08;User Datagram Protocol&#xff09;是两种常用的网络传输协议&#xff0c;它们有以下几点区别&#xff1a; 1、连接性&#xff1a; TCP是面向连接的协议&#xff0c;通信双方在…

区间相关

判断两区间是否有交集&#xff1f; 线段元素有序&#xff08;比如按照x1排序:a ,b&#xff09;&#xff1a; a x 2 > b x 1 ax2 > bx1 ax2>bx1 无序&#xff1a; m i n ( a x 2 , b x 2 ) > m a x ( a x 1 , b x 1 ) min(ax2, bx2) > max(ax1, bx1) min(ax2,…

excel里如何的科学计数法的数字转换成数值?

比如下图&#xff0c;要想把它们转换成3250跟1780&#xff0c;有什么快捷的办法吗&#xff1f; 科学计数法在excel里的格式&#xff0c;与我们常规在数学上写的有差异。这个转换可以这样做&#xff1a; 1.转换后的效果&#xff1a; 2.问题分析 题目中所附截图&#xff0c;单元…

Python学习笔记24 - 学生信息管理系统

1. 需求分析 2. 系统设计 3. 系统开发必备 4. 主函数设计 5. 学生信息维护模块设计 a. 录入学生信息 b. 删除学生信息 c. 修改学生信息 d. 查询学生信息 e. 统计学生总人数 f. 显示所有学生信息 g. 排序模块设计 6. 项目打包

【Leetcode】1702. 修改后的最大二进制字符串

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个二进制字符串 b i n a r y binary binary &#xff0c;它仅有 0 0 0 或者 1 1 1 组成。你可以使用下面的操作任意次对它进行修改&#xff1a; 操作 1 &#xff1a;如果…

解决vue3更新chunk包后,点击页面报错

出现错误 解决思路 试了好多方法&#xff0c;跳了很多坑&#xff0c;router版本对不上&#xff0c;解决方案不实用。最后我直接捕获异常&#xff0c;刷新页面&#xff0c;解决最快最有效。 // vue-rotuer版本 "vue-router": "^4.0.3"解决方案 在router/…

Linux 文件页反向映射

0. 引言 操作系统中与匿名页相对的是文件页&#xff0c;文件页的反向映射对比匿名页的反向映射更为简单。如果还不清楚匿名页反向映射逻辑的&#xff0c;请移步 匿名页反向映射 1. 文件页反向映射数据结构 struct file&#xff1a; 用户进程每open()一次文件&#xff0c;则会生…