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

相关文章

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re