【Unity】 HTFramework框架(四十五)【进阶篇】指令系统-自定义指令

news2024/11/29 16:24:39

更新日期:2023年6月19日。
Github源码:[点我获取源码]
Gitee源码:[点我获取源码]

索引

  • 指令系统
    • 1.使用指令系统
    • 2.自定义指令
      • 1.新建类 MyInstruction
      • 2.标记 CustomInstruction 特性
      • 3.编写指令的逻辑
      • 4.执行自定义指令
      • 5.自定义指令的参数
      • 6.结尾

指令系统

1.使用指令系统

指令系统详解:【Unity】 HTFramework框架(四十四)【进阶篇】指令系统。

使用HTFramework指令系统,可以将一段指令代码即时编译并执行。

例如,我需要这样一个功能:

新建一个游戏物体,将它的位置设置到(100,100,100),并为其添加一个灯光(Light)组件,并设置其强度(intensity)为10.5。

使用指令代码实现:

#Define [Name] "New Light"
#Define [Light] "UnityEngine.Light"

#NewObj [Name]         //新建一个游戏物体,名为 New Light
#SetPosition [Name] Vector3(100,100,100) false     //设置物体的位置

#AddCom [Name] [Light]        //为物体 New Light 添加一个灯光组件
#SetProperty [Name] [Light] "intensity" 10.5      //设置灯光组件的属性 intensity 值为10.5

运行指令代码,运行结果如下:
在这里插入图片描述

2.自定义指令

指令系统当前支持十几种指令关键字(也即是指令类型),实际上用他们只能进行一些简单的程序修补工作,虽然指令系统的定位便是如此,咱比不上强大的Lua(人家虚拟机、解释器自成一体),高大上的ILRuntime(随时随地C#写代码,高端优雅上档次),但咱也有优点:简单、小巧、门槛低,人家是大型解决方案,咱的定位就是小型解决方案!

So!为了提升扩展性和灵活性,自定义指令应运而生,接下来,按程序界不成文的老规矩,先写一个Hello World来证明它的存在吧。

1.新建类 MyInstruction

首先,新建一个类MyInstruction,并继承至HT.Framework.SentenceCustom,后者为自定义指令唯一可继承基类

/// <summary>
/// 我的新建指令
/// </summary>
public class MyInstruction : SentenceCustom
{
    public override void Execute()
    {
        
    }
}

2.标记 CustomInstruction 特性

然后,为MyInstruction类标记一个CustomInstruction特性,该特性表明此类为自定义指令类,并为其定义指令关键字(比如此处,我便成功定义了一个自定义指令关键字#Debug):

/// <summary>
/// 我的新建指令
/// </summary>
[CustomInstruction("#Debug")]
public class MyInstruction : SentenceCustom
{
    public override void Execute()
    {
        
    }
}

注意:自定义指令的关键字必须是#开头,不能包含空格。

3.编写指令的逻辑

前面两步只是完成了自定义指令的定义,在覆写的Execute方法中,就是编写此自定义指令的执行逻辑的地方(比如此处,打印一个Hello World):

/// <summary>
/// 我的新建指令
/// </summary>
[CustomInstruction("#Debug")]
public class MyInstruction : SentenceCustom
{
    public override void Execute()
    {
        Log.Info($"Hello World!Args: {Args}");
    }
}

4.执行自定义指令

此时,我们便可以编写#Debug类型的指令,并执行指令了:

#Debug "null" "你好世界"

执行上条指令的结果:
在这里插入图片描述

5.自定义指令的参数

补充一下,你可能纳闷#Debug的后面为什么跟了一个"null",那是因为目前自定义指令后面必须跟2个string类型的参数:

参数1:指向的游戏物体路径,尽量是场景中存在的物体,SentenceCustom(自定义指令基类)中的Target属性便引用向该物体,当然,此处传入一个"null",因为我们的Hello World不需要用到游戏物体。
参数2:一个string值SentenceCustom(自定义指令基类)中的Args属性便可以取出该值。

也即是说,即便不需要用到第一个参数,但这里也得传一个string参数进去,否则就会编译错误(错误日志后面会跟上对应的行号):

#Debug "你好世界"

在这里插入图片描述
如下这样也不行,需记住,string类型必须使用""包裹:

#Debug null "你好世界"

在这里插入图片描述

6.结尾

到此,自定义指令Hello World便编写完成了,很简单、很小巧、门槛很低吧?请记住他的定位,小型解决方案!(要是大刀阔斧整个程序都用指令系统来做那就违背初心了)针对一些小型的线上、线下项目,即时修补程序还是有用武之地的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C进阶 - 数组和指针

Declare an array manually VS malloc or calloc an array 用英文是因为有些东西得用他们的语言才能表达不失真 栈和堆 In C, a heap is a region of memory that is dynamically allocated during runtime. It is used to store variables and data structures that have a …

学习HCIP的day.14

目录 STP生成树协议 生成树协议 一、802.1D 1、根网桥 2、根端口 3、指定端口 4、非指定端口 5、接口状态 802.1D的收敛时间 802.1D算法的缺点 以上cost值的解释 二、PVST 三、PVST 四、快速生成树 五、MSTP/MST/802.1S STP生成树协议 网络三层架构…

南京企业所得税高怎么办?

南京企业所得税高怎么办&#xff1f; 《税筹顾问》专注于园区招商&#xff0c;您的贴身节税小能手&#xff0c;合理合规节税&#xff01; 众所周知&#xff0c;企业所得税是按利润来计算的&#xff0c;按照不同的利润阶梯计算适用的税率也会有所不同&#xff0c;那么当企业利润…

launch文件的编写及ROS配置文件的详细介绍

launch文件的编写及ROS配置文件的详细介绍 1 launch文件介绍及简单应用1.1 launch文件介绍1.2 launch文件简单应用 2 package.xml文件介绍及配置3 CMakeLists.txt文件介绍及配置 1 launch文件介绍及简单应用 1.1 launch文件介绍 根据ROS的架构和通信机制来看&#xff0c;ROS的…

讯飞星火大模型详细内测体验:它能否应对这些挑战?

名人说&#xff1a;一花独放不是春&#xff0c;百花齐放花满园。——《增广贤文》 作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、简要介绍二、分类问题测试0️⃣自我介绍1️⃣语言理解2️⃣知识问答3️⃣逻辑推…

Vue中如何进行文件转换与格式转换

Vue中如何进行文件转换与格式转换 在Web应用程序中&#xff0c;经常需要进行文件转换和格式转换。例如&#xff0c;将PDF文件转换为图像文件、将音频文件转换为不同的格式或将视频文件转换为不同的分辨率和编解码格式。Vue作为一种流行的前端框架&#xff0c;提供了许多实用工…

网络管理与维护(二)网络用户设置管理

网络用户设置管理 2.1 用户帐户安全管理 用户账户的分类 管理员帐户。拥有管理本台计算机的所有权限和权利。系统内置的Administrator用户帐户 和Administrators组帐户的成员就属于管理员帐户 标准帐户。通常分配给最终用户使用&#xff0c;适用于日常工作&#xff0c;对操作…

GeoServer中地图可视化提升利器之SLD知识简介

目录 前言 一、SLD简介 1、介绍 2、SLD的版本 3、SLD的Schema说明 二、SLD中相关知识解析 1、Scheme简要说明 2、一个SLD实例 总结 前言 在互联网上有很多精美的地图&#xff0c;在地图从shp或者gdb等矢量文件&#xff0c;经过设计人员的加工&#xff0c;配色&#xff0…

【论文阅读】Graph-less Collaborative Filtering

【论文阅读】Graph-less Collaborative Filtering 文章目录 【论文阅读】Graph-less Collaborative Filtering1. 来源2. 介绍3. 模型解读3.1 协同过滤3.2 模型3.2.1 对比知识精馏 3.2.2 自适应对比正则化3.2.3 SimRec的参数学习 4. 实验5. 总结 1. 来源 2023WWW CCFA原文地址co…

【Linux】linux | 服务响应慢、问题排查 | 带宽问题导致 | 网速

一、说明 1、项目使用云服务器&#xff0c;服务器配置&#xff1a;5M带宽、4核、32G&#xff0c;1T&#xff0c;CentOS7 2、CPU、内存、磁盘IO都没有达到瓶颈&#xff0c;猜测是带宽问题 3、应用比较多&#xff0c;应用中间件&#xff0c;十几个差不多 4、同时在线人数30 5、已…

“暗网议会”如今已成为现实

图片来源:Marcin Balcerzak 最近&#xff0c;“暗网议会”已经成为了网络犯罪分子试图证明自己影响力的最新流行语&#xff0c;安全内部人士对这个词也很感兴趣。 上周五&#xff0c;臭名昭著的亲俄黑客组织Killnet在其电报威胁帖子中使用了这个词语。随后&#xff0c;twitte…

d2l_第五章学习_Multilayer Perceptrons多层感知机

x.1 Hidden Layers 线性模型的基本假设是单调&#xff0c;即任何特征的增大都会导致模型的输出增大&#xff08;权重正时&#xff0c;负值时亦&#xff09;。但是现实中很多的关系并不仅仅是简单的线性关系&#xff0c;这个时候就需要引入非线性关系&#xff0c;而非线性关系由…

Verilog基础之七、译码器实现

目录 一、前言 二、工程实现 2.1 工程代码 2.2 仿真结果 2.3 参考 一、前言 ​译码器的实现为编码器的逆过程&#xff0c;以3-8译码器为例&#xff0c;真值表如下。 二、工程实现 ​实现同时使用for循环和case两种方式。 2.1 工程代码 module Decoder(in,out,out_case )…

【菜单折叠效果】这菜单效果千万别让领导看了,一不小心就升职加薪(附源码)

【写在前面】 上周想着冲一波粉丝量&#xff08;周冲700&#xff09;&#xff0c;但是事与愿违&#xff0c;没办法我只能不断的督促自己多分享&#xff0c;多总结了&#xff0c;那么今天晚上我就好好整理了一篇常见后台管理系统的菜单收缩动态效果&#xff0c;主要是用于后台管…

基于深度学习的高精度打电话检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度打电话检测识别系统可用于日常生活中或野外来检测与定位打电话目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的打电话目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检…

Web3通过ganache运行起一个本地虚拟区块链

通过文章 Web3开发准备工作 手把手带你创建自己的 MetaMask 账号大家简单的对网络 有了个比较模糊的概念 不同的网络连接这不同的区块链 那么 我们就要搞清楚 我们切换不同的网络 我们的数字资产是不一样的 在这里 我们需要先安装一个插件工具 ganache 我们先在本地创建一个文…

大学面试三分钟自我介绍七篇

大学面试三分钟自我介绍篇1 尊敬的领导&#xff1a; 您好! 首先对占用您的宝贵时间深表歉意。我叫__&#xff0c;是一名于__年7月毕业的全日制本科大学生。所学专业&#xff1a;中文系汉语言文学。 经过长期努力拼搏&#xff0c;今天我怀着满腔热血站在了人生的又一个起点。在这…

VMware14虚拟机安装Ubuntu16.04 LTS

VMware14虚拟机安装Ubuntu16.04 LTS 一、基本介绍二、vmware下安装ubuntu系统2.1 下载ubuntu客户端镜像2.2 安装及配置2.2.1 安装2.2.2 配置 三、ubuntu系统使用 回到目录   回到末尾 一、基本介绍 对于ubuntu而言&#xff0c;就是linux操作系统的具体&#xff0c;而linux对…

西安石油大学2023年第三届里奇杯编程大赛(初赛)

官方题解地址1v7w &#xff08;郭毅佬&#xff01;&#xff09;&#xff1a;https://www.cnblogs.com/1v7w/p/17437203.html A 签到 描述 你说得对&#xff0c;但是 “ 里奇杯 ” 是西安石油大学计算机协会举办的程序设计竞赛&#xff0c;比赛旨在激发同学们学习程序设计的热…