問題タブ [behavior-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1176 参照

c# - Unity - C# - NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません

編集

私の質問は異なります (私は思う..) 最後の画像では、GameObject を Communication Message と Communication Message に設定できるためです。しかし、再生すると、すぐになし (テキスト) となし (ボタン) にリセットされます。なぜこれが起こるのか、これを解決する方法がわかりません!


この質問が広く取り上げられていることは承知していますが、それでも解決できません。誰かが私に解決策を持っていることを願っています。

私が持っているもの

Unity のアセットであるBehavior Designerを使用しています。ビヘイビア ツリーを作成していますが、ビヘイビア ツリー参照を使用すると問題が発生しました。

まず、ビヘイビア ツリーを次のようにしました。

ビヘイビア ツリー - 検索ドア

玄関先を捜索します。見つかった場合は、それに向かって移動し、ゲームをプレイしている人間と通信します。

これは以前は機能していましたが、今回はこのビヘイビア ツリーを次のようにビヘイビア ツリー リファレンスに入れました。

ビヘイビア ツリー リファレンス

参照をダブルクリックすると、最初の画像が表示されます。しかし、それがうまくいかないのはこれです:

人間の指示

問題

これは、最初の図のヒューマン インストラクション ノードです。通信メッセージ、通信ボタンは搭載しません。対応するボタンをロードすると、シナリオの再生時にすぐにリセットされます。これは Behavior Tree Reference にこのビヘイビアーをロードしたときに発生し、元のツリー セルフからこれを再生したときには問題は発生しませんでした。

これを引き起こす可能性のあるアイデアと、これを解決する方法はありますか?

HumanInstructions のコード

0 投票する
1 に答える
258 参照

neural-network - インテリジェントなゲーム ボットのプログラミング

特定のゲームをプレイできるボットを作成することを目的としたプログラミング コンテストに参加しています。ゲームの目的は、一定のポイントを獲得することです。複数の飛行船を操作して移動し、島を占領し、宝物を運ぶドローンを操縦します。対戦相手は 1 人で、ターンは同時に行われ、時間制限があります。1回のターンで複数の船やドローンを動かすことができます。Python、Java、または C# でボットをプログラミングできます。正確な詳細は関係ありません。各船には毎ターン約 15 のオプション (移動と射撃) があり、全体として各ターンに約 10000 の異なるオプション (飛行船の移動と射撃のさまざまな構成) があります。単純であり、非常に巧妙なことは何もしていません(たとえば、敵の近くにいる場合は撃ちます)。ミニマックス アルゴリズムについて読んだことがありますが、ここ (または同様のもの) に実際に適用したいと思います。状態の値を伝えることができると想定できます。私の問題は、各ターンのオプションの量です。これにより、非常に深くなることができない膨大な分岐要因が作成されます。

質問 1: この問題に対するより適切で適用可能なアプローチはありますか? おそらく深層学習かそれに類するものでしょうか?質問 2: 分岐係数を最小限に抑える方法はありますか? alpha-beta や同様のアルゴリズムについて読んだことがありますが、何もうまくいかないようです。

どんな助けでも大歓迎です

0 投票する
1 に答える
390 参照

c# - ビヘイビア ツリー: リーフ ノードで「実行中」状態を返す方法/時期は?

Unity プロジェクト内で使用する単純なビヘイビア ツリー アルゴリズムを実装しました。私の誤解が原因かもしれません. 私の問題は次のとおりです。

リーフ ノードが完了するまでに長い時間がかかる場合 (たとえば、ゲーム ユニットが特定のパスをたどるアクションなど)、それはリーフ ノードが現在「実行中」の状態であることを意味します。ただし、状態を返すと、残りの関数を実行できなくなります。つまり、目的地に到達できません。

私の質問は次のとおりです。葉ノードが実行されていることをツリーに伝える適切な方法は何ですか?

ActionNode クラスで得たものは次のとおりです。

他のクラスを確認する必要がある場合は、すべてこの記事に基づいています。スレッドをきれいに保つためにリンクします。

アクションの例として、これを考慮してください。

私が疑問に思っているのは、WalkToTarget に長い時間がかかる場合、どうすれば「実行中」の状態を返すことができるかということです。

この件に関するさまざまな記事を読みましたが、これらの状態の背後にある正確な概念を把握できないようです。たとえば、Sequence または Selector ノードが実行されていることをどのように伝えることができるかを理解しています。

私の頭をよぎった唯一のアイデアは、残りのパスを敵クラスの変数内に保存し、ゲームの更新ティックごとにメソッドを呼び出すということですが、それはコーディングが不十分なように感じます。

葉ノードはいつでも「実行中」に戻るはずですか? もしそうなら、それはどのような場合に起こりますか?任意の例をいただければ幸いです。