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

相关文章

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

centos6一键安装vsftpd脚本

centos6一键安装vsftpd脚本 手动安装vsftpd参考教程:Centos下安装Vsftpd的图文教程 vsftpd脚本功能: 1.安装 (命令执行:sh xxx.sh)2.添加ftp用户 (命令执行:sh xxx.sh add)3.卸载vsftpd (命令执行:sh xxx.sh uninstall) 测试环境:centos6 x64 centos6 x86(测试centos7以

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

Java基础回顾系列-第一天-基本语法

基本语法 Java基础回顾系列-第一天-基本语法基础常识人机交互方式常用的DOS命令什么是计算机语言(编程语言) Java语言简介Java程序运行机制Java虚拟机(Java Virtual Machine)垃圾收集机制(Garbage Collection) Java语言的特点面向对象健壮性跨平台性 编写第一个Java程序什么是JDK, JRE下载及安装 JDK配置环境变量 pathHe