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
 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UnrealScript语言参考 介绍  快速链接  本文档的目的  UnrealScript的设计目标  虚幻引擎3UnrealScript的新功能  代码结构示例  Unreal虚拟机  对象层次 o 变量 变量型  内置型  集合数据型  Unreal型  变量修饰符  可编辑性  数组 Structs  修饰符  枚举  常量  Object和actor引用变量  引用变量 表达式  赋值  在之间转换对象引用 函数  声明函数  函数参数修饰符  函数重载  高级函数修饰符 控制结构 循环结构  循环  Do循环  While 循环  Continue  Break 选择结构  If-Then-Else语句  Case语句  Goto 语言功能  内置的操作符和它们的优先级 通用函数  创建对象  整型函数  浮点型数据函数  字符串函数  Vector函数  计时器函数  调试函数  UnrealScript处理器 UnrealScript工具和使用  Script Profiler(脚本分析器)  脚本调试器  虚幻开发环境(UDE) 高级的语言功能  计时器 状态  状态概述  状态标签和Latent函数  状态继承和范围规则 高级的状态编程  状态栈  Replication(复制)  Iteration(迭代)(ForEach)  函数调用限制符  在一个变量访问静态函数 变量的默认值  访问变量的默认值  通过一个的引用来访问变量的默认值 使用defaultproperties(默认属性)语句块指定默认值  语法  Struct默认值 动态数组  长度变量  迭代动态数组  接口  函数Delegates  Native 元数据支持  元数据概要  使用多个元数据说明  提供的元数据说明 高级技术问题  UnrealScript的实现  UnrealScript的二进制兼容问题  技术注意事项  UnrealScript编程策略

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值