CS016-2-unity ecs

目錄

【23】射擊改進

【24】僵尸生成器

?編輯【25】隨機行走

【27】射擊光效


【23】射擊改進

a. 當距離目標太遠的時候,要繼續移動。而當距離目標到達攻擊距離之后,則停止移動。

上圖中的if:判斷自身和目標的距離是否大于攻擊距離,如果是,則將目標位置設置為targetLocalTransform.Position。

else語句,是說明小于等于攻擊距離,此時如何停止呢?直接更改目的位置為自身的位置。此時就可以停止移動了。

b. 旋轉控制

要確保在攻擊的時候,單位的朝向是朝著僵尸的。

根據當前單位的位置和目標攻擊的位置計算出朝向,然后將朝向單位化。

計算出旋轉的四元數,使用的函數是,quaternion.LookRotation函數。

最后用math.slerp差值出一個四元數作為最終的旋轉四元數。

【24】僵尸生成器

a. 要學會從面向對象的編程轉向面向數據的編程。

定義一個僵尸生成器的monobehavior:ZombieSpawnerAuthoring。需要將ZombieSpawnerAuthoring拖拽到場景的物體上,這里是ZombieSpawner。

b. 創建的實體,得先序列化到EntitiesReferencesAuthoring上,將其gameobject轉為zombiePrefabEntity。

然后通過SystemAPI.GetSingleton()拿到這個單例,訪問其中的zombiePrefabEntity。調用state.EntityManager.Instantiate方法,創建entity。創建出來之后設置其位置。

【25】隨機行走

a. 隨機種子,必須使用不同的種子才能得到不同的隨機數,最簡單的方法是使用實體的索引作為種子。

b. 在遍歷的時候,不能動態添加和刪除實體組件。比如你想動態的給實體添加組件隨機生成組件,不能通過下面的方式。而正確的做法是使用命令緩沖。

c. 使用命令緩沖動態的給實體添加組件,一定要明確系統是針對所有具有相同特征的所有實體,而不是單獨一個實體。當然也可以是一個單獨的實體,這個要為某個實體添加專屬的標簽。

【26】血條制作教程

【Unity】【DOTS】使用 DOTS 制作完整RTS游戲【26】血條制作教程_嗶哩嗶哩_bilibili

a. 血條的制作

父物體的bar的位置是:

子物體的bar的位置是:(0,0,0)

這里比較巧妙的是直接縮放父物體bar的縮放即可。父物體是往中間縮放,但是因為位置是(-0.5,0,0),導致子物體bar的縮放從右往左縮放。

b. 血條朝向攝像機

如下圖所示,我們拿到父物體bar的依賴實體,這里就是BaseUnit,也就是這句代碼;

LocalTransform parentLocalTransform = SystemAPI.GetComponent(healthBar.ValueRO.healthEntity);

讓其做世界到本地變換:parentLocalTransform.InverseTransformRotation(quaternion.LookRotation(cameraForward, math.up());

然后將其賦值給localTransform.ValueRW.Rotation,這說明這個localTransform.ValueRW.Rotation是local的。所以上面的quaternion.LookRotation(cameraForward, math.up())其實得到是world的旋轉,故要將其轉為父親下的旋轉,也即是local的。

c. 血量改變時才出發計算,這個如何做呢?

得到健康組件Health,監聽health.onHealthChanged變量,如果其沒有變化則直接continue.

d. 健康組件的onHealthChanged的變量何時重置、何時設置。

重置在重置系統里面做,如下面的第二個紅色方框。第一個紅色方框指定這個重置系統在LateSimulateSystemGroup組中進行更新,并且是本組的最后更新。

同時保證血條系統也在LateSimulateSystemGroup組中更新。

e. 在滿血的時候,將血條隱藏掉。在掉血的情況下,將血條顯示出來。

f. 問題代碼,在開啟burst編譯的情況下,不能訪問托管的代碼。比如這里下面的代碼。臨時解決的方法是,關閉burst編譯。

后面有更優的解決方法。

【27】射擊光效

【Unity】【DOTS】使用 DOTS 制作完整RTS游戲【27】射擊光效_嗶哩嗶哩_bilibili

a. 在射擊的時候創建燈光。ShootLightSpawnerSystem負責顯示工作,監聽ShootAttack中的onShoot.isTriggered是否為true。如果是true則實例化燈光。

這里調用state.EntityManager.Instantiate方法實例化一個實體。

b. ShootAttack組件中的onShoot是一個結構體。里面封裝了是否發生了射擊,并同時記錄其射擊時的燈光產生位置。

c. 燈光是一個預制體,在EntitiesReferencesAuthoring腳本中直接拖拽燈光預制體到上面即可,在baker系統中負責將gameobject轉為entity。

d. 燈光的生命周期控制,燈光的生命周期需要一個timer控制。當timer小于0的時候,添加到刪除命令緩沖中去,系統自動完成刪除。

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

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

相關文章

新能源汽車制動系統建模全解析——從理論到工程應用

《純電動輕卡制動系統建模全解析:車速-阻力擬合、剎車力模型與旋轉質量轉換系數優化》 摘要 本文以純電動輕卡為研究對象,系統解析制動系統建模核心參數優化方法,涵蓋: 車速-阻力曲線擬合(MATLAB實現與模型驗證&…

函數專題1

函數的定義 函數的基本寫法如下所示: def function_name(parameter1, parameter2, ...):"""Docstring: 描述函數的功能、參數和返回值 (可選但強烈推薦)"""# 函數體: 實現功能的代碼# ...return value # 可選,用于返回結…

紅黑樹:數據世界的平衡守護者

在 C 算法的神秘森林里,紅黑樹是一棵充滿智慧的 “魔法樹”。它既不像普通二叉搜索樹那樣容易失衡,也不像 AVL 樹對平衡要求那么苛刻。作為 C 算法小白,今天就和大家一起深入探索紅黑樹的奧秘,看看它是如何成為數據世界的平衡守護…

【hot100-動態規劃-139.單詞拆分】

力扣139.單詞拆分 本題要求判斷給定的字符串 s 是否可以被空格拆分為一個或多個在字典 wordDict 中出現的單詞,且不要求字典中出現的單詞全部都使用,并且字典中的單詞可以重復使用,這是一個典型的動態規劃問題。 動態規劃思路 定義狀態: 定義一個布爾類型的數組 dp,其中…

ZFile與Cpolar技術結合實現遠程數據實時訪問與集中管理的可行性分析

文章目錄 前言1.關于ZFile2.本地部署ZFile3.ZFile本地訪問測試4.ZFile的配置5.cpolar內網穿透工具安裝6.創建遠程連接公網地址7.固定ZFile公網地址 前言 在信息爆炸的年代,每個現代人都在數字浪潮中扮演著獨特的角色。不論是商務精英、影像創作者還是學術達人&…

Vue2在子組件上使用v-model實現數據的雙向綁定、.sync修飾符

1、v-model 先看示例&#xff1a; //父組件<template><ChildComponent v-model"parentData" /> </template><script> import ChildComponent from ./ChildComponent.vue;export default {components: {ChildComponent},data() {return {pa…

自學嵌入式 day 18 - 數據結構 1

數據結構 相互之間存在一種或多種特定關系的數據元素的集合 1.特定關系&#xff1a; &#xff08;1&#xff09;邏輯結構&#xff1a; ①集合&#xff1a;所有在同一個集合中&#xff0c;關系平等。 ②線性關系&#xff1a;數據和數據之間是一對一的關系。&#xff08;數組…

《Java 大視界——Java 大數據在智能電網分布式能源協同調度中的應用與挑戰》

隨著風電、光伏等分布式能源大規模接入電網&#xff0c;傳統調度系統面臨數據規模激增、響應延遲顯著、多源異構數據融合困難等核心問題。本文聚焦Java生態下的大數據技術體系&#xff0c;深入探討其在智能電網實時監測、負荷預測、資源優化配置等場景中的落地實踐。通過分析Sp…

解密企業級大模型智能體Agentic AI 關鍵技術:MCP、A2A、Reasoning LLMs-MCP大模型上下文解析

解密企業級大模型智能體Agentic AI 關鍵技術&#xff1a;MCP、A2A、Reasoning LLMs-MCP大模型上下文解析 我們首先來看一下 整個MCP的一個基本的一個流程&#xff0c;他解決的一個問題。我們回到這里&#xff0c;他解決的一個問題是什么呢&#xff1f;他解決這個問題就是你的大…

25.5.15

沒有比水題更令人開心的事情了 典型的并查集題目&#xff0c;并查集分為并和查&#xff0c;并就是把有關系的父親根結點設為同一個&#xff0c;查就是在成功構造后對其進行查詢 查通過遞歸實現 if (x f[x])return x; return f[x] find(f[x]); 由于并查集的特點&#xff0…

低損耗高效能100G O Band DWDM 10km光模塊 | 支持密集波分復用

目錄 前言 一、產品概述 100G QSFP28 O Band DWDM 10km光模塊核心特點包括&#xff1a; 二、為何選擇O Band DWDM方案&#xff1f; 1.低色散損耗&#xff0c;傳輸更穩定 2.兼容性強 三、典型應用場景 1.數據中心互聯&#xff08;DCI&#xff09; 2.企業園區/智慧城市組網 3.電信…

CentOS 7 內核升級指南:解決兼容性問題并提升性能

點擊上方“程序猿技術大咖”&#xff0c;關注并選擇“設為星標” 回復“加群”獲取入群討論資格&#xff01; CentOS 7 默認搭載的 3.10.x 版本內核雖然穩定&#xff0c;但隨著硬件和軟件技術的快速發展&#xff0c;可能面臨以下問題&#xff1a; 硬件兼容性不足&#xff1a;新…

計算機視覺----基礎概念、卷積

一、概述 1.計算機視覺的定義 計算機視覺(Computer Vision)是一個跨學科的研究領域,主要涉及如何使計算機能夠通過處理和理解數字圖像或視頻來自動進行有意義的分析和決策。其目標是使計算機能夠從視覺數據中獲取高層次的理解,類似于人類的視覺處理能力。 具體來說,計算機…

2025認證杯數學建模第二階段C題:化工廠生產流程的預測和控制,思路+模型+代碼

2025認證杯數學建模第二階段思路模型代碼&#xff0c;詳細內容見文末名片 一、探秘化工世界&#xff1a;問題背景大揭秘 在 2025 年 “認證杯”數學中國數學建模網絡挑戰賽第二階段 C 題中&#xff0c;我們一頭扎進了神秘又復雜的化工廠生產流程預測與控制領域。想象一下&…

關于AI人工智能的知識圖譜簡介

人工智能是計算機科學的一個重要領域&#xff0c;旨在理解和構建智能行為。人工智能可以被劃分為多個子領域或分支&#xff0c;包括機器學習、深度學習、自然語言處理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;、計算機視覺&#xff08;Computer Vis…

巧妙利用redis防爆破

爆破&#xff0c;也就是通過海量的嘗試&#xff0c;最終確定密碼&#xff0c;人們設置密碼具有習慣性&#xff0c;好記、簡單、有象征等&#xff0c;也就有密碼字典一說&#xff0c;但是該字典也是巨量的&#xff0c;但是相對于各種字母符號等組合就顯得輕量非常多 在Java Spr…

Uniapp開發鴻蒙購物項目教程之樣式選擇器

大家好&#xff0c;今天依然為大家帶來鴻蒙跨平臺開發教程的分享&#xff0c;我們本系列的教程最終要做一個購物應用&#xff0c;通過這個項目為大家分享uniapp開發鴻蒙應用從配置開發環境到應用打包上架的完成過程。 昨天的文章實現了應用首頁的輪播圖&#xff0c;其中涉及到…

2、ubantu系統配置OpenSSH | 使用vscode或pycharm遠程連接

1、OpenSSH介紹 OpenSSH&#xff08;Open Secure Shell&#xff09;是一套基于SSH協議的開源工具&#xff0c;用于在計算機網絡中提供安全的加密通信。它被廣泛用于遠程系統管理、文件傳輸和網絡服務的安全隧道搭建&#xff0c;是保護網絡通信免受竊聽和攻擊的重要工具。 1.1…

Leetcode刷題 | Day63_圖論08_拓撲排序

一、學習任務 拓撲排序代碼隨想錄 二、具體題目 1.拓撲排序117. 軟件構建 【題目描述】 某個大型軟件項目的構建系統擁有 N 個文件&#xff0c;文件編號從 0 到 N - 1&#xff0c;在這些文件中&#xff0c;某些文件依賴于其他文件的內容&#xff0c;這意味著如果文件 A 依…

uniapp中vue3和pinia安裝依賴npm install失敗

目錄 一、問題描述 二、問題原因 三、問題解析及解決方案 一、問題描述 用uni-app開發小程序的時候&#xff0c;使用了vue3pinia,安裝依賴的時候發現vue和pinia的版本問題&#xff0c;安裝失敗&#xff0c; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve np…