UDN
Search public documentation:
UnrealScriptInterfacesJP
English Translation
中国翻译
한국어
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
中国翻译
한국어
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
UE3 ホーム > UnrealScript > UnrealScript インターフェース
UnrealScript インターフェース
概要
インターフェースの作成
interface InterfaceName [extends ParentInterface] [classSpecifiers]; // interface bodyそして、オプションでインターフェースに拡張インターフェースを持たせることも可能です。ベースインターフェースを指定しない場合、Core.Interface から暗黙的に継承します。 また、クラス指定子も利用できます。以下に示すものは、インターフェースに有効なクラス指定子です。
- native
- これはインターフェースをネイティブにする働きを持ち、C++ インターフェースの宣言を作成します。Native 型で宣言されたインターフェースは、native クラスによる実行のみ可能です。ネイティブ クラスに関するその他の制限も、ネイティブ インターフェースと同じです。ネイティブ キーワードには、native 型による宣言をエクスポートするファイルの名称を付加することができます。例えば、
native(MyInterface)
のようにします。また、ファイル名にinherit
を使うと、親インターフェースのファイル名を継承させることができます。 - dependson(Class)
- これは機能性を追加するものではなく、コンパイラのヒントとしてのみ利用します。
cpptext
のブロックを入れることも可能です。これは、ネイティブ インターフェースの宣言と共にエクスポートされます。
インターフェースの実装
class MyClass extends Object implements(InterfaceName)このクラスは、すべての関数をインターフェースで宣言された関数として宣言する必要があります。Native キーワードを除き、クラス内の関数宣言をインターフェース内の宣言と一致させなければなりません。インターフェースでネイティブ宣言された関数は、そのインターフェースを実装するクラス内ではネイティブである必要はなく、これは逆の場合にも当てはまります。 クラスで複数のインターフェースを実装するには次の構文を使用します。
class MyClass extends Object implements(FirstInterface, SecondInterface)
インターフェースの使用
var InterfaceName InterfaceReference; function DoSomething() { InterfaceReference.callInterfaceFunction(); } function DoSomethingElse(Object anObject) { if (InterfaceReference(anObject) != none) { // ... } }C++ では、ネイティブのインターフェース変数を TScriptInterface として表し、UnTemplate.h で宣言します。この struct は、同じオブジェクトへの 2 つのポインター (UObject ポインタとインターフェースタイプのポインタ) を格納します。 UObject 関数
GetInterfaceAddress
を使用して、UObject インスタンスが特定のインターフェースを実装するかどうかを調べ、実装する場合はそのポインタを取得します。以下に例を示します。
UObject* pObj; IInterfaceName* Interface = (IInterfaceName*)pObj->GetInterfaceAddress(IInterfaceName::UClassType::StaticClass()); // (if pObj が IInterfaceName を実装しない場合、Interface は NULL)
制限事項
- Native インターフェース (native キーワードを使って宣言されたインターフェースクラス) は native クラスのみで実装できます。
- 共通のベースクラスを持つ複数のインターフェースクラスの実装はサポートされていません。実装を試みると不正な vtable オフセットが生じる可能性があります。そのため、クラスの継承関係を使って論理グループを形成するより、インターフェースクラスをフラットな階層にまとめる方法が推奨されています。
- デリゲートは、インターフェイスで定義することができますが、インターフェイスの参照を通じて、呼び出したり、新たな値を割り当てたりすることはできません。その場合、インターフェイスを実装しているオブジェクトにキャストする必要があります。