游戏乐悠悠网游开发网
标题:
虚幻引擎脚本内部机制的那点猫腻
[打印本页]
作者:
tianyalanzi
时间:
2012-2-25 21:15
标题:
虚幻引擎脚本内部机制的那点猫腻
和很多引擎不同, 虚幻引擎没有采用Lua或其他现成的脚本语言来进行自己的脚本编程. 和很多牛人一样, 虚幻引擎的作者Tim Sweeney自己写了个脚本引擎, 也就是Unreal Script.
最近搜客上比较沉寂, 就多花了点时间看代码了, 今天的重心是脚本内部机制, 想到哪写到哪, 加上本人水平很菜,大家凑和看看吧,望高人看了不要见笑。
话说整个脚本引擎最核心的类是哪个, 看来看去看上了这个可疑的 FFrame. 进去看看:
struct FFrame : public FOutputDevice
{
// Variables.
UStruct* Node;
UObject* Object;
BYTE* Code;
BYTE* Locals;
INT LineNum;
/** Previous frame on the stack */
FFrame* PreviousFrame;
复制代码
很有看头嘛。
(隐藏剩下的部分只是想看看有多少人感兴趣, 没有别的意思, 呵呵)
本帖隐藏的内容
这个BYTE* Code顾名思义就是指向编译好的字节码序列的指针喽。随便找个最简单的方法看看:
先假设我在UnrealScript里设了个int常量,对应的字节码是0x1D 即 EX_IntConst,那么对于的c++方法就是UObject::execIntConst。
这个映射关系是通过IMPLEMENT_FUNCTION这个宏来实现的。
IMPLEMENT_FUNCTION( UObject, EX_IntConst, execIntConst );
看看IMPLEMENT_FUNCTION:
#define IMPLEMENT_FUNCTION(cls,num,func) \
extern "C" Native int##cls##func = (Native)&cls::func; \
static BYTE cls##func##Temp = GRegisterNative( num, int##cls##func );
复制代码
作者:
haibin0606
时间:
2012-6-14 09:55
好东西。看看了
作者:
uououo
时间:
2012-11-13 21:28
好东西。看
3D1
作者:
今生有缘
时间:
2012-11-19 10:27
特好奇。看看了
作者:
ekko
时间:
2014-7-5 21:31
好东西。看看了
欢迎光临 游戏乐悠悠网游开发网 (http://bbs.yxlyy.club/)
Powered by Discuz! X3.2