前提
unityで下の図にあるように、青い四角が壁の四角に近づくと、壁の一つ一つの色が赤に変わるように実装しています。
(ml-agentでの実装を行っております)
実現したいこと
実現したい事は以下の2点です。
①色が変わったその一回だけアクションを実行させたい
②壁のすべての色を変えた時にアクションが実行されるようにコードを書きたい
発生している問題①
一つ一つの壁のGameObjectは以下のコードによって取得しています。
wall_Objects = GameObject.FindGameObjectsWithTag("Wall");
以下のコードでは、赤の壁であれば毎ステップアクションが実行(報酬を得る)ことになってしまいます。
そうではなく、壁が白から赤になった時だけアクションが実行されるようにしたいです。
上の画像でいうと、すべとの壁を赤にするまで10回だけアクションを実行させるということです。
public override void OnActionReceived(ActionBuffers actionBuffers) { for (int i = 0; i < wall_Objects.Length; i++) { if (wall_Objects[i].GetComponent<Renderer>().material.color == Color.red) { SetReward(0.01f); } } }
発生している問題②
全ての壁を赤にしたときに実行するようなコードを書きたいです。
以下のように、すべてが赤という条件の時、報酬を与えたいです。
if () { SetReward(1f); EndEpisode(); }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。