ParameterContainerのGetComponentについて

Forum rules
Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
  • Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。
  • Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。

Post a reply

Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: ParameterContainerのGetComponentについて

Re: ParameterContainerのGetComponentについて

by caitsithware » 2019/09/24 23:02

ひとまず解決できそうということで良かったです。
Shirasu wrote: 2019/09/24 14:28 各ユニットが攻撃相手のパラメータ(かメソッド)をGetしたがるという状態のことを言っていました。
攻撃&ダメージ処理に関しては、
「攻撃する側とダメージ受ける側のどちらがなんのステータスを持っていて、そのステータスをどう受け渡すのがスマートか」
という問題のようですね。

余談として、あくまで私の考えですが、
  • 攻撃する側が持つ攻撃力等のステータスのみをダメージ受ける側のTakeDamageメソッドに受け渡し
  • 受ける側は受け取った攻撃力等と自身の防御力等を考慮してダメージ値計算、ライフを減らす
という形式が良いと思います。
この利点としては、相手がなんのパラメータを持っているか直接見に行く必要がなく、TakeDamageメソッド呼び出しで受け渡すステータスさえあれば、ユニットによる攻撃以外にも地形ダメージだろうとなんだろうと応用が利く(攻撃側もTakeDamage呼び出しだけで済むのでスッキリ)
という点です。

あくまで一例なので、ご参考までに。
(ダメージ処理以外でも相手のパラメータ知りたい場面もあるかとは思いますが、ここではひとますダメージ処理に限った話にしています)

Re: ParameterContainerのGetComponentについて

by Shirasu » 2019/09/24 14:28

早速のお返事ありがとうございます。

確認しました所、たしかにArborFSMの内部Containerが参照されていました。Unity側の仕様だったのですね。

後半の質問については、余談ですが、例えばリアルタイムストラテジーゲームのように多数のユニットが現れ消える状況で、各ユニットが攻撃相手のパラメータ(かメソッド)をGetしたがるという状態のことを言っていました。どうしても敵ユニットが時間と共に別物(不定)になるので。

ともあれ、ParameterContainerを子オブジェクトに避難するというのは盲点でした。これで間違いなくGetComponentできるので、後半の疑問は解決いたしました。

迅速丁寧なご対応をいただき、ありがとうございました。大変勉強になりました。

Re: ParameterContainerのGetComponentについて

by caitsithware » 2019/09/24 13:04

Shirasu wrote: 2019/09/24 11:37 Containerだけを他のスクリプトでGetComponentしようとしましたが、正しくGetできませんでした。
いくつか確認していただきたい点があります。
  • 正しくGetできないというのは、「GetComponentの戻り値がnullになっていた」ということでしょうか?
  • nullでない場合、GetComponentで取得したいParameterContainerと同じGameObjectにあるというArborFSMに内部パラメータ(ArborEditorウィンドウのサイドパネルでのパラメータ)を設定していて、その内部ParameterContainerが取得されてしまっていますか?
上記2点により、もし内部ParameterContainerが取得されていましたら仕様となります。
(ArborFSMはInspectorからは不可視のParameterContainerを持っており、Unityは不可視かどうかにかかわらずGetComponentするという仕様)

この場合、本来取得したいというParameterContainerを子オブジェクトに移動するなどして、1オブジェクト内に1コンポーネントにして確実に取得できるようにするなどの対応が必要です。

もしnullの場合は、GetComponentするGameObjectが間違っている可能性がありますので、今一度Get周りをご確認ください。
Shirasu wrote: 2019/09/24 11:37 また、不定のオブジェクトのパラメータが知りたい(GetComponentせざるを得ない)という状況において、パラメータを外部スクリプトに任せる以外の解決策はありませんか?
不定のオブジェクトからGetComponentせざるを得ない状況というのは具体的にはどのような状況でしょうか?
公開に支障がない範囲で具体的な内容を教えていただければより詳しい解決策が見つかるかもしれません。

ParameterContainerのGetComponentについて

by Shirasu » 2019/09/24 11:37

viewtopic.php?f=6&t=2568 : FSMの演算ノードGet Parameterでコンテナを選択すると編集不可になる
viewtopic.php?f=3&t=155 : 外部スクリプトからのParameterContainerの操作

上記トピックに関連した質問です。

Arbor3.6.3, Unity2019.2.6f1で開発中のプロジェクトにおいて、複数のArborFSMと一つのParameterContainerを持つオブジェクトの、Containerだけを他のスクリプトでGetComponentしようとしましたが、正しくGetできませんでした。

ParameterContainerの位置を全てのFSMより上にしてもGetできず、ArborFSMを全て消すと正しくGetできました。
ミニマムなプロジェクトで再現しようとしましたが、どうしても正しくGetできてしまいました。

この正しくGetできない現象は仕様でしょうか、なにか環境の問題でしょうか?
また、不定のオブジェクトのパラメータが知りたい(GetComponentせざるを得ない)という状況において、パラメータを外部スクリプトに任せる以外の解決策はありませんか?

Unity初心者ゆえ至らぬ点があるかもしれませんが、ご教示いただけますと幸いです。

Top