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.mzph.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…