2

良い一日!Unreal Engine 4を使用するのは初めてで、ブループリントがどのように機能するかについていくつか質問があります。私の理解では、すべてのブループリントは クラスのように機能します。つまり、1 つのブループリントは、OOP プログラミング言語の 1 つのクラスに似ています。

私の仮定が正しいか間違っているかについて教えてください。間違っている場合は、別の方法/視点で私が望むものを達成するのを手伝ってくれるかもしれません. 私は喜んで学び、提案を受け入れます。

ある時点で、ブループリントは実際には個々のクラスであるという私の理解が正しければ、私が作成したいデザインのどこに行き、どのように実装するかについてご案内いただければ幸いです。これはプログラマーの観点からのものです (PHP OOP プログラミング)。アプローチを許してください。私はPHPを使用して、クラスをどのように機能させたいかを論理的に表現しているだけです。さらに、atm は私が知っている唯一の OOP プログラミングです。


  1. 私はという名前のクラスを作成したい: Itemsclass Item {}

  2. このクラスはアイテム関連のすべてを処理するため、多くのプロパティ/変数を指定する必要があります。(以下は単なる例です。ここでも例として PHP を使用しています。)

    class Item {

        var $id;
        var $name;
        var $description;
        var $type;
        var $subType;
        var $mesh;
        var $materials; 
    

    }

3.)構成引数として 2 つの変数を使用して、このクラスを開始したいと考えています。( itemIDitemTypeが必要です)。これは、これら 2 つの変数を使用して、データ テーブルで既に使用可能な項目のデータを取得するためです。テーブル内のこれらのデータを使用して、クラスのプロパティ/変数を設定します。(私が言ったことが正しいかどうかはわかりません。とにかく私の主張を理解していただければ幸いです。)

   class Item {

        var $id;
        var $name;
        var $description;
        var $type;
        var $subType;
        var $mesh;
        var $materials; 

        function _construct($cons_itemID, $cons_itemType) {

               /*-- Start getting the item Data here based on what item and type provided. Then, push that data into the class properties/variables. We will use individual methods/functions to fill other properties/variables later. --*/

        }
}

4.) 基本的に、この設計では、アイテム ID をクラスに簡単に渡し、ポインタを使用してアイテムの名前、説明、メッシュ、マテリアルなどを取得できます。

例:

$weapon = new Item('10001','Weapon');
$weaponMesh = $weapon->getMesh();

$armor = new Item('12345','Armor');
$armorName = $armor->getName();

私は青写真を使ってこの方法やそれに似たものを達成するのに苦労しています。私は C++ を避けようとしているわけではありません。C++ を学びたいと思っていますが、今は時間の自由がありません。

私がそれを機能させるために試みたいくつかのこと:

  • キャスト/クラスへのキャスト (しかし、ターゲット オブジェクトがどうなるかどのようにクラスに入力引数を追加するのかを理解できませんでした。使用できる入力はありません。)
  • Spawn Actor (これは非常に有望です。これについてはさらに掘り下げる必要があります)
  • ブループリント マクロ? ブループリント インターフェイス? (私はただ迷っています。)

助けたり答えたりするすべての人のために。ありがとうございました!

〜クリス

4

1 に答える 1

2

私が知る限り、はい、各ブループリントはクラスとして表示できると想定できます。(さらに、UE 4.12 以降 (UE 4.11 では、その機能は実験的とマークされていると思います)、Compile blueprintsProject settings -> Packagingで確認できます。これにより、各ブループリントのネイティブ クラスが作成されます。)

オブジェクト( C++ ではUObject ) に基づいて、ブループリントまたは C++ クラスのいずれかを作成できます。次に、すべてのプロパティ (UE エディターの用語では変数) を指定できます。BP には小さな利点があります。いくつかのプロパティをスポーン時に可視としてマークできます(それらは Public かつ Visible でなければなりません)。したがって、そのクラスの新しいインスタンスを作成するときに、そのプロパティに明示的に値を渡すことができます。また、BPコンストラクトイベントでは、そのプロパティが正しく入力されるため、指定されたIDTypeに基づいて別のプロパティ値を設定できます。

C++ クラスでは、 FObjectInitializerとは異なる引数を持つことはできないため、コンストラクターが実行されるときにその値が間に合いません。しかし、同じ機能を実現するのはそれほど難しくありません。例はhttps://answers.unrealengine.com/questions/156055/passing-arguments-to-constructors-in-ue4.htmlにあります。

あなたが試したことのリストについて何か:

  • スポーン アクター - シーンにその BP を含める場合にのみ、アクターから派生させます。アクターはゲームの更新とレンダリングの対象となるため、データ コンテナーとしてのみアクターを使用することは非常に間違っています。
  • BPマクロはBP関数と同じですが、関数は関数と同じように呼び出され (関数呼び出し規則によって必要なアクションを実行します)、マクロはそのマクロを呼び出している場所でその実装を置き換えます。ここでもっと疲れる説明。
  • 私があなたのコードを実装する場合、私が言ったようにそれを行い、そのクラスをいくつかのコンポーネントのプロパティとして持ち、そのコンポーネントはシーンに配置されるいくつかのアクターにアタッチされます。
于 2016-07-03T17:08:38.743 に答える