UE3脚本UnrealScript UC语法点滴

2024-06-24 14:08

本文主要是介绍UE3脚本UnrealScript UC语法点滴,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

持续更新

目录

类定义修饰符 

1.dependson(CLASSNAME)

2.config(ININAME)

3.native

4.notplaceable

5.inherits(CLASSNAME1[,CLASSNAME2,...])

类对象实例创建

类默认属性设置

变量

1.声明

var

local

2.修饰符

config 

3.array 类型变量 以及 迭代函数 foreach使用  

4.String 类型和 Name 类型

函数

1.声明

1)function关键字

2)event

2.修饰符

final 

native

其他

1.宏


 

UDK仅仅依赖于使用UnrealScript UC脚本来来写游戏逻辑
授权用户可以结合使用UrealScript和native C++代码


在游戏中可以看到和交互的都叫 Actors对象,都继承自Actor类

Actor使用的辅助类,比如Component,均继承自基础的Object类。

一个uc脚本只定义一个类。

类定义修饰符 

定义类的时候会对类进行各种修饰。下面介绍一些常用的。

详细请看 官方文档链接 

1.dependson(CLASSNAME)

class 类名
    dependson(CLASSNAME1[,CLASSNAME2,...])

规定编译顺序, 先编译 CLASSNAME1, CLASSNAME2, 然后再编译 CLASSNAMEX。
CLASSNAMEX 中肯定要用到 CLASSNAME1 CLASSNAME2 中的东西。

2.config(ININAME)

class 类名
    config(MyConfig)

1.

表示 任何在 类名中 声明为 Config or GlobalConfig  的变量 都会写入到 XXXMyConfig 配置文件中。
应该注意只把需要保存的变量声明为 Config or GlobalConfig
在游戏退出的时候会保存,以及主动调用SaveConfig函数的时候会保存这些变量,供下次初始化。

2.

子类会继承父类的config,你也可以重写另外一个ININAME。

3.

默认的ININame如下一些,默认存在的ini配置文件:
    Engine
    Editor
    Game
    Input
前面说过,真正的配置文件都是 XXXEngine.ini XXXEditor.ini。。。

配置文件相关的介绍请戳这里。

3.native

native 有表示与C++交互的类,此类可以声明 native函数,实现native接口。

native 类必须继承自native的类。

native类会 在编译脚本的时候 会在一个名字为 “包名Classes”  的C++头文件中 自动创建相关联的类。

如果定义的类在Engine的包内,那么自动创建的关联类就定义在 EngineClasses.h中。

 

4.notplaceable

不可放置类,编辑器相关。

 

5.inherits(CLASSNAME1[,CLASSNAME2,...])

用于表示多重继承,指定除了 extends 以为其他的基类。

CLASSNAME1,CLASSNAME2只能是native类。

不支持来自两个UObject派生类的多重继承。


类对象实例创建

https://api.unrealengine.com/udk/Three/UnrealScriptFunctions.html#Creating%20objects

如果是 Actor 就用 Spawn函数 (Actor.uc 中的函数)
如果不是 Actor 就用 new 操作符号


 


类默认属性设置

https://api.unrealengine.com/udk/Three/UnrealScriptDefaultProperties.html

定义在uc文件的最后:

  defaultproperties{}

相当于构造函数,在创建类实例的时候,会进行设置一些默认值。

默认设置块中的语法有一些限制,比如不能写语句,=两边不能有空格等等

具体事例看文档,需要用到再看。

 


变量

https://api.unrealengine.com/udk/Three/UnrealScriptVariables.html

1.声明

var

用来声明类中的变量,相当于c++的成员变量,这里叫做实例变量

实例变量必须声明在类函数的声明之前。

 

local

用来声明函数体内的变量,即局部变量

同样,局部变量必须声明在函数中函数体的实现之前。

 

2.修饰符

config 

之前说过的config 声明了这个以后就是可配置的了 会保存到 ini文件中。并且不能再 default properties 初始化。

 

3.array 类型变量 以及 迭代函数 foreach使用  

class TestArray
    

var array<类型A> arraysItems


function doSth()
{
        local 类型A iteratorItem;
        
        foreach arraysItems(iteratorItem)
        {
            `log("Array iterator test #1:"@iteratorItem);
        }
}

 

4.String 类型和 Name 类型

String constants must be enclosed in double quotes, for example: "MyString"
Name constants must be enclosed in single quotes, for example 'MyName'


函数

https://api.unrealengine.com/udk/Three/UnrealScriptFunctions.html

1.声明

1)function关键字

 

2)event

当此函数需要被 native C++ 调用的的时候 用 event 关键字来代替 function 关键字。 

event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal );

nativeC++调用的时候 函数名为  eventTouch  

 

2.修饰符

final 

禁止此子类被子类重写,放在 function 前面。

final function bool ConfigView( vector Delta );

native

实现在C++,可以在uc中调用,比如内置的actor的move函数

native final function bool Move( vector Delta );

 补充:native函数与Native C++函数实现的关联

即怎么就通过uc的native XXX 函数 最后执行到了某个类中的execXXX函数了

在启动的时候加载包 LaunchEngineLoop.cpp 中的 LoadPackageList函数

最终调用到 UFunction.Bind 函数进行对每一个类中的 native 函数的绑定,具体:

1. 拼uc中的native函数在C++中对应的函数名,规则: 前缀+ 类名 + exec + 函数名
其中前缀可能是U 或者 A
A:此类是继承自 AActor 
U:继承自UObject

拼出这个函数名以后就可以在 GNativeLoopupFuncs 这种表中找到一个入口,指向具体实现了。


2. 而GNativeLoopupFuncs 相当于一张二级表
一级表 相当于 key = uc类名, value = 此类中的对应C++中的native函数指针表  value也相当于一个表。

最终在 Native FindNative(FName ClassName, ANSICHAR* NativeName) 中
通过 uc类名和C++中的native函数名 找到实现。
 

3.其中 GNativeLoopupFuncs 的构建代码是自动生成的 在 包名Classes.h 头文件中。
详情查看 
GNativeLoopupFuncs.Set 函数
以及
MAP_NATIVE 宏


其他

1.宏

https://api.unrealengine.com/udk/Three/UnrealScriptPreprocessor.html

`var 的意思是 var 是一个宏
宏的语法 `define 
定义    `define   hello   "Hello, World!"
使用    `hello 就是 "Hello, World!"    

宏是作用域在文件范围内。在文件中定义了以后的行中可见。

如果想要宏在一个包的所有类中均可用,就在工程目录下建立一个 Globals.uci
i.e. Development\Src\MyProject\Globals.uci
 

 

这篇关于UE3脚本UnrealScript UC语法点滴的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090368

相关文章

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

python写个唤醒睡眠电脑的脚本

《python写个唤醒睡眠电脑的脚本》这篇文章主要为大家详细介绍了如何使用python写个唤醒睡眠电脑的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 环境:win10python3.12问题描述:怎么用python写个唤醒睡眠电脑的脚本?解决方案:1.唤醒处于睡眠状

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1