如何在unrealscript中打印Vector2D

时间:2013-05-25 18:40:25

标签: unrealscript

我有这个功能:

function AddImpulse(Vector2D impulse)
{
    `log("ADD IMPULSE: " $ impulse);
}

麻烦的是我收到错误“正确的类型与'$'不兼容。看来,虽然内置的矢量类会自动强制转换为字符串,但Vector2D类只是一个内置的结构而没有任何运算符重载或自动转换。

我编写了一个帮助这种情况的运算符重载,但除非我在对象类中放置重载声明(我认为不应该这样做)我必须在每个类中声明它使用它:

static final operator(40) string $ (string A, Vector2D B)
{
    return A $ string(B.x) $ ", " $ string(B.y);
}

有没有办法可以这样做,所以我不需要每次都这样做:

`log("ADD IMPULSE: " $ impulse.x $ "," $ impulse.Y);

虽然对于Vector2D来说这并不坏,但是对于更大的结构或类来说,这会变得很麻烦。

1 个答案:

答案 0 :(得分:1)

遗憾的是,您在UnrealScript中对泛型编程的选择是有限的。一个选项可能是将运算符重载放在包含文件中,并使用`include宏将其包含在需要它的每个类中。

如果这不起作用,另一个选项可能是使用宏来调用特殊类中的静态函数来处理struct to string转换。

首先在代码包的根文件夹中创建一个Globals.uci文件。 Globals.uci是一个特殊文件,编译器会自动将其包含在与其关联的包中的所有UncrealScript文件中。如果您的包名为MyPackage,则Globals.uci将进入Development / Src / MyPackage / Globals.uci。它应该在您的包的Classes文件夹旁边。

将你的宏放在Globals.uci:

`define toString(type,name) class'MyStructConversions'.static.`{type}ToString(`{name},"`{name}")

将转换功能放在MyStructConversions.uc中:

class MyStructConversions;

static function string Vector2DToString (const out Vector2D A, string varname)
{
    return varname $ ": (" $ A.X $ ", " $ A.Y $ ")";
}

现在,当你从包中的任何地方调用`toString(Vector2D, impulse)时,宏将在编译时被替换为Vector2DToString函数的调用。然后,您可以通过向MyStructConversions.uc添加适当的定义来支持更多结构类型,并且toString宏将与它们无缝地协作。

UnrealScript preprocessor上的文档包含有关`include和其他宏的更多信息。查看Development / Src / Core中的Globals.uci以获取一些有用的示例。