Unity寶箱隨機事件實現指南

目錄

前言

一、簡單的使用

新增ChestInteractableEvents,定義寶箱交互事件

新增Box

箱子掛載腳本,配置事件

運行效果

二、完善各種事件

1. 完善生成金幣事件

效果,金幣飛出

2. 完善生成敵人事件敵人

效果

3. 完善生成藥水事件

效果

最終效果


前言

如何在Unity中結合隨機功能和UnityEvent事件使用?下面通過一個具體示例來說明。

如果你對隨機數生成和UnityEvent事件系統感興趣,建議進一步深入學習。

(注:本文為學習筆記整理,希望能對你有所幫助)

下面開始具體講解:

一、簡單的使用

新增ChestInteractableEvents,定義寶箱交互事件
[System.Serializable]
public class ChestInteractableEvents
{[Header("寶箱事件名稱")]public string EventName;[Range(0f, 1f), Header("掉落幾率")]public float DropChance = 0.5f;[Header("寶箱交互事件")]public UnityEvent ChestInteractionEvent;
}
新增Box
public class Box : MonoBehaviour
{[Header("寶箱交互事件數組")][SerializeField] private ChestInteractableEvents[] _chestInteractionEvents;//測試執行private void Update(){if (Input.GetKeyDown(KeyCode.Space)){DetermineAndFireChestEvent();}}private void DetermineAndFireChestEvent(){// 計算總的掉落幾率float totalChance = 0f;foreach (ChestInteractableEvents interactableEvents in _chestInteractionEvents)totalChance += interactableEvents.DropChance;float rand = Random.Range(0f, totalChance); // 生成一個隨機數,范圍是0到總掉落幾率float cumulativeChance = 0f;foreach (ChestInteractableEvents interactableEvents in _chestInteractionEvents){cumulativeChance += interactableEvents.DropChance;if (rand < cumulativeChance){interactableEvents.ChestInteractionEvent.Invoke(); // 觸發寶箱交互事件return;}}}// 生成金幣public void SpawnCoins(){Debug.Log("生成了一個金幣");}// 生成敵人public void SpawnEnemies(){Debug.Log("生成了敵人");}// 生成生命藥水public void SpawnHealthPotion(){Debug.Log("生成了一個生命藥水");}
}
箱子掛載腳本,配置事件

image

運行效果

image

二、完善各種事件

1. 完善生成金幣事件
[Header("生成金幣")]
[SerializeField] private Rigidbody2D _coinToSpawn; // 要生成的金幣剛體
[SerializeField] private int _numberofCoinsTospawn = 100; // 要生成的金幣數量
[SerializeField] private float _explosionForce = 10f; // 金幣爆炸力度
[SerializeField, Range(0f, 0.5f)] private float _explosionArc = 0.5f; // 金幣爆炸角度范圍
[SerializeField] private bool _delayBetweenspawns = false; // 是否延遲生成金幣
[SerializeField] private Transform _spawnTransform; // 生成金幣的位置/// <summary>
/// 生成金幣
/// </summary>
public void SpawnCoins()
{if (!_delayBetweenspawns){// 直接生成金幣for (int i = 0; i < _numberofCoinsTospawn; i++){Rigidbody2D coinRB = Instantiate(_coinToSpawn, _spawnTransform.position, Quaternion.identity);Explosion(coinRB);}}else{// 延遲生成金幣StartCoroutine(SpawnCoinsWithDelay());}
}/// <summary>
/// 延遲生成金幣
/// </summary>
/// <returns></returns>
private IEnumerator SpawnCoinsWithDelay()
{for (int i = 0; i < _numberofCoinsTospawn; i++){Rigidbody2D coinRB = Instantiate(_coinToSpawn, _spawnTransform.position, Quaternion.identity);Explosion(coinRB);yield return null;}
}/// <summary>
/// 金幣爆炸效果
/// </summary>
/// <param name="rb"></param>
private void Explosion(Rigidbody2D rb)
{Vector2 randDir = new Vector2(Random.Range(-_explosionArc, _explosionArc), 1f);Vector2 force = randDir.normalized * _explosionForce;rb.AddForce(force, ForceMode2D.Impulse);
}
效果,金幣飛出

image

2. 完善生成敵人事件敵人
[Header("生成敵人")]
[SerializeField] private GameObject[] _enemiesToSpawn; // 要生成的敵人數組
[SerializeField] private GameObject _enemySpawnParticles; // 敵人生成時的粒子效果
[SerializeField] private int _numofEnemiesToSpawn = 3; // 要生成的敵人數量
[SerializeField, Range(0f, 15f)] private float _enemySpawnoffset = 2f; // 敵人生成的偏移距離/// <summary>
/// 生成敵人
/// </summary>
public void SpawnEnemies()
{for (int i = 0; i < _numofEnemiesToSpawn; i++){int randIndex = Random.Range(0, _enemiesToSpawn.Length);float randX = Random.Range(-_enemySpawnoffset, _enemySpawnoffset);float randY = Random.Range(-_enemySpawnoffset, _enemySpawnoffset);Vector2 spawnPos = ((Vector2)_spawnTransform.position + new Vector2(randX, randY)).normalized;GameObject enemy = Instantiate(_enemiesToSpawn[randIndex], spawnPos, Quaternion.identity);//生成粒子效果GameObject enemySpawnParticles = Instantiate(_enemySpawnParticles, spawnPos, Quaternion.identity);//粒子效果和敵人大小一致enemySpawnParticles.transform.localScale = enemy.transform.localScale;}
}
效果

image

3. 完善生成藥水事件
[Header("生成生命藥水")]
[SerializeField] private Rigidbody2D _healthPotionToSpawn; // 要生成的生命藥水剛體
[SerializeField] private float _upwardForce = 5f; // 生命藥水向上的力度/// <summary>
/// 生成生命藥水
/// </summary>
public void SpawnHealthPotion()
{Rigidbody2D rb = Instantiate(_healthPotionToSpawn, _spawnTransform.position, Quaternion.identity);Vector2 force = Vector2.up * _upwardForce;rb.AddForce(force, ForceMode2D.Impulse);
}
效果

image

最終效果

image

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95506.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從單機到分布式:用飛算JavaAI構建可擴展的TCP多人聊天系統

1. 引言&#xff1a;飛算JavaAI與實時通信技術的融合 1.1 為什么需要TCP多人聊天室&#xff1f; 在即時通訊領域&#xff0c;基于TCP協議的聊天室是理解網絡編程核心概念的經典案例&#xff0c;其技術價值體現在&#xff1a; 底層協議控制&#xff1a;直接操作Socket實現可靠數…

用 mock 把 ES 單元測試@elastic/elasticsearch-mock 上手

一、為什么“單元測 ES”這么別扭&#xff1f; 測試 ES 代碼時&#xff0c;最直覺的做法是連真集群做集成測試&#xff08;Docker 起個 ES&#xff09;&#xff0c;但&#xff1a; 啟動 & 數據裝填慢&#xff0c;不利于并行&#xff1b;網絡/磁盤抖動影響穩定性&#xff1b…

《嵌入式Linux應用編程(三):Linux文件IO系統調用深度解析》

今日學習內容1. 文件IO與標準IO核心對比特性標準IO文件IO實現層C標準庫Linux內核系統調用緩沖機制全緩沖/行緩沖無緩沖&#xff08;實時讀寫&#xff09;操作對象FILE*流指針整型文件描述符&#xff08;fd&#xff09;移植性跨平臺兼容Linux特有典型應用場景普通文件操作硬件設…

數據結構之順序表相關算法題

目錄一、移除元素二、刪除有序數組中的重復項三、合并兩個有序數組總結一、移除元素 移除元素 - 力扣 思路一&#xff1a;就是創建一個臨時數組&#xff0c;對原數組進行遍歷&#xff0c;找出與val不同的數據放到新數組里&#xff0c;然后再將tmp中的數據導回原數組 這個思…

百勝軟件×華為云聯合賦能,“超級國民品牌”海瀾之家新零售加速前行

報道顯示&#xff0c;早在2012年海瀾之家就開始布局數字化征程&#xff0c;并于近年對公司全流程信息化進行綜合重構升級優化&#xff0c;在采銷協同、業財一體等方面突破原有架構&#xff0c;通過信息化架構的增強為業務發展提供支撐。作為新零售重要組成部分的海瀾電商信息化…

“Zen 5”: The AMD High-Performance 4nm x86-64 Microprocessor Core

Codenamed “Zen 5,” AMD’s next-generation, energy-efficient high-performance x86 core targets a wide array of client, server, and embedded markets. Fabricated in TSMC’s 4nm FinFET process, the 55mm2 core complex (CCX), shown in Fig. 2.1.1., contains 8.6…

Linux數據庫:【表的約束】【表的基本查詢】

目錄 一.表的約束 1.1空屬性 not null 1.2默認值 default ?空屬性和默認值一起使用&#xff1f; 1.3列描述 comment 1.4 zerofill 1.5 主鍵 1.6 自增長 1.7 唯一鍵 1.8 外鍵 二. 表的基本查詢 2.1 Create 2.1.1單行數據 全列插入 2.1.2多行數據 指定列插入 2…

AJAX RSS Reader

AJAX RSS Reader 引言 隨著互聯網的快速發展,信息量的爆炸式增長,用戶對信息獲取的便捷性和實時性提出了更高的要求。RSS(Really Simple Syndication)作為一種信息聚合技術,已經廣泛應用于新聞、博客、論壇等網絡平臺。AJAX(Asynchronous JavaScript and XML)技術則提…

從實驗室到落地:飛算JavaAI水位監測系統的工程化實踐

一、飛算JavaAI平臺簡介飛算JavaAI是國內領先的軟件開發智能平臺&#xff0c;通過AI技術賦能軟件開發全流程&#xff0c;幫助開發者實現"一人一項目&#xff0c;十人抵百人"的高效開發模式。平臺核心優勢包括&#xff1a; 智能代碼生成&#xff1a;基于自然語言描述自…

前端Vite介紹(現代化前端構建工具,由尤雨溪開發,旨在顯著提升開發體驗和構建效率)ES模塊(ESM)、與傳統Webpack對比、Rollup打包

文章目錄**1. 核心特性**- **極速啟動**&#xff1a;- **按需編譯與熱模塊替換&#xff08;HMR&#xff09;**&#xff1a;- **開箱即用**&#xff1a;- **生產環境優化**&#xff1a;- **插件系統**&#xff1a;**2. 工作原理****開發模式**- **基于 ESM 的按需加載**&#xf…

python sqlite3模塊

十分想念順店雜可。。。Python 的sqlite3模塊是標準庫中用于操作SQLite 數據庫的工具。SQLite 是一款輕量級嵌入式數據庫&#xff08;無需獨立服務器&#xff0c;數據存儲在單一文件中&#xff09;&#xff0c;適合小型應用、本地數據存儲或原型開發。sqlite3模塊提供了完整的 …

用 Python 繪制企業年度財務可視化報告 —— 從 Excel 到 9 種圖表全覆蓋

用 Python 繪制企業年度財務可視化報告 —— 從 Excel 到 9 種圖表全覆蓋在企業經營分析中&#xff0c;光看一堆財務數字很難直觀發現規律和問題。 如果能將這些數據轉化為可視化圖表&#xff0c;不僅更美觀&#xff0c;還能幫助管理層快速做出決策。今天&#xff0c;我就用 Py…

一次 Unity ? Android 基于 RSA?OAEP 的互通踩坑記

這篇分享&#xff0c;記錄我如何從“Base64 報錯/平臺不支持/解密失敗”一路定位到“填充算法不一致”的根因&#xff0c;并給出兩條穩定落地方案。同時整理了調試手冊、代碼片段和上線前自檢清單&#xff0c;方便你復用。 背景 Unity 端用公鑰加密一段緊湊 JSON&#xff08;i…

Go語言GC機制:高效并發回收解析

Go 語言的垃圾回收&#xff08;Garbage Collection&#xff0c;簡稱 GC&#xff09;是其自動內存管理的核心機制&#xff0c;旨在自動識別并回收不再被使用的內存&#xff0c;避免內存泄漏&#xff0c;減輕開發者的手動內存管理負擔。Go 的 GC 算法經歷了多次迭代優化&#xff…

imx6ull-驅動開發篇23——Linux 內核定時器實驗

目錄 實驗程序編寫 修改設備樹文件 定時器驅動程序 timer.c 測試 timerApp.c Makefile 文件 運行測試 實驗程序編寫 本講實驗&#xff0c;我們使用正點原子I.MX6U-ALPHA 開發板&#xff0c;通過linux內核定時器周期性的點亮和熄滅開發板上的 LED 燈&#xff0c; LED 燈…

IPTV系統:開啟視聽與管理的全新篇章

在當今數字化飛速發展的時代&#xff0c;IPTV系統正以前所未有的姿態&#xff0c;重塑著我們的視聽體驗與管理模式。它不僅僅是一套技術系統&#xff0c;更是連接信息、溝通情感、提升效率的橋梁&#xff0c;為各個領域帶來了全新的變革與發展機遇。從電視直播的角度來看&#…

PyTorch筆記9----------Cifar10圖像分類

1.圖像分類網絡模型框架解讀 分類網絡的基本結構 數據加載模塊&#xff1a;對訓練數據加載數據重組&#xff1a;組合成網絡需要的形式&#xff0c;例如預處理、增強、各種網絡處理、loss函數計算優化器 數據加載模塊 使用公開數據集&#xff1a;torchvision.datasets使用自定義…

飛凌OK3568開發板QT應用程序編譯流程

飛凌OK3568開發板QT應用程序編譯流程開發環境&#xff1a;ubuntu20.04&#xff08;主機&#xff09;、飛凌OK3568開發板一般在linux系統下開發用于ARM開發板的QT應用程序時&#xff0c;直接在主機上開發然后進行交叉編譯即可&#xff0c;但有時候ARM開發板的廠家提供的SDK中可能…

飛算JavaAI合并項目實戰:7天完成3年遺留系統重構

引言 企業數字化進程中&#xff0c;遺留系統改造始終是CIO面臨的頭號難題。某電商平臺的實踐數據顯示&#xff1a;3年以上的Java項目平均存在47%的冗余代碼&#xff0c;63%的架構設計不符合當前業務需求&#xff0c;進行系統性重構需要投入相當于原開發量200%的資源。傳統&quo…

衛星速度增量和比沖及推力之間的關系

一、定義1.1.比沖&#xff08;Isp&#xff09;&#xff1a;比沖是衡量發動機性能的重要指標&#xff0c;反映了單位重量推進劑在發動機中產生的沖量&#xff0c;單位為米/秒&#xff08;m/s&#xff09;&#xff0c;代表燃料燃燒時噴流速度。這個單位與速度單位“米/秒”相同&a…