質問編集履歴

5 誤字の誤字

vuvu

vuvu score 15

2018/06/28 10:24  投稿

【Unity】コルーチン内でコルーチンを連続して呼び出す【UniRx】
### 前提・実現したいこと
現在UniRxで敵ユニットのAI部分を作っています。ゲーム内容はシミュレーションRPGのようなターン制で、
敵のターンに移ると敵ユニットが順番に行動をする予定です。
使用側は以下のような形で敵をActionAIコルーチンで行動させて、終わり次第終了処理をしてから次の敵のAIを起動したいと考えています。
```C#
/* EnemyManager */
Observable.FromCoroutine(_ => enemis[i].ActionAI())
Observable.FromCoroutine(_ => enemies[i].ActionAI())
   .Subscribe(_ =>
   {
       // 敵行動終了時の処理
       // その後、次の敵行動へ
   });
```
### 発生している問題
敵AIは[移動]→[攻撃]という流れで行動させるつもりで、[移動]と[攻撃]は既に実装できました。
[移動][攻撃]はそれぞれアニメーションなどに合わせて終了を通知させたいのでコルーチンでの非同期処理にしました。
ですが、以下のようなコードでは[移動]の完了時にActionAiの終了通知が流れてしまい、一連のコルーチンの完了を通知できていません。(移動完了時点で次の敵が移動してしまう)
[攻撃]まで終了してからActionAIの終了を通知するにはどうすればいいでしょうか?
```C#
   public IEnumerator ActionAI()
   {
       // 移動
       yield return Observable.FromCoroutine(_ => ExecuteMoveAI())
           .Do(_ => Debug.Log("移動完了"))
           .ToYieldInstruction();
       // 攻撃
       yield return Observable.FromCoroutine(_ => ExecuteAttackAI())
           .Do(_ => Debug.Log("攻撃完了"))
           .ToYieldInstruction();
   }
```
###
UniRxもコルーチンについても無学なため、基本的な考え方から合っているかわかりません。
以上の問題について解決策、別の実装方などアイデアを頂ければ幸いです。よろしくお願いします。
### 補足情報
Unity Ver.2017.2.0f3
  • C#

    12561 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    8517 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    2826 questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

  • 非同期処理

    287 questions

    非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

4 誤字

vuvu

vuvu score 15

2018/06/28 10:23  投稿

【Unity】コルーチン内でコルーチンを連続して呼び出す【UniRx】
### 前提・実現したいこと
現在UniRxで敵ユニットのAI部分を作っています。ゲーム内容はシミュレーションRPGのようなターン制で、
敵のターンに移ると敵ユニットが順番に行動をする予定です。
使用側は以下のような形で敵をActionAIコルーチンで行動させて、終わり次第終了処理をしてから次の敵のAIを起動したいと考えています。
```C#
/* EnemyManager */
Observable.FromCoroutine(_ => enemys[i].ActionAI())
Observable.FromCoroutine(_ => enemis[i].ActionAI())
   .Subscribe(_ =>
   {
       // 敵行動終了時の処理
       // その後、次の敵行動へ
   });
```
### 発生している問題
敵AIは[移動]→[攻撃]という流れで行動させるつもりで、[移動]と[攻撃]は既に実装できました。
[移動][攻撃]はそれぞれアニメーションなどに合わせて終了を通知させたいのでコルーチンでの非同期処理にしました。
ですが、以下のようなコードでは[移動]の完了時にActionAiの終了通知が流れてしまい、一連のコルーチンの完了を通知できていません。(移動完了時点で次の敵が移動してしまう)
[攻撃]まで終了してからActionAIの終了を通知するにはどうすればいいでしょうか?
```C#
   public IEnumerator ActionAI()
   {
       // 移動
       yield return Observable.FromCoroutine(_ => ExecuteMoveAI())
           .Do(_ => Debug.Log("移動完了"))
           .ToYieldInstruction();
       // 攻撃
       yield return Observable.FromCoroutine(_ => ExecuteAttackAI())
           .Do(_ => Debug.Log("攻撃完了"))
           .ToYieldInstruction();
   }
```
###
UniRxもコルーチンについても無学なため、基本的な考え方から合っているかわかりません。
以上の問題について解決策、別の実装方などアイデアを頂ければ幸いです。よろしくお願いします。
### 補足情報
Unity Ver.2017.2.0f3
  • C#

    12561 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    8517 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    2826 questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

  • 非同期処理

    287 questions

    非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

3 タグの追加

vuvu

vuvu score 15

2018/06/27 17:58  投稿

【Unity】コルーチン内でコルーチンを連続して呼び出す【UniRx】
### 前提・実現したいこと
現在UniRxで敵ユニットのAI部分を作っています。ゲーム内容はシミュレーションRPGのようなターン制で、
敵のターンに移ると敵ユニットが順番に行動をする予定です。
使用側は以下のような形で敵をActionAIコルーチンで行動させて、終わり次第終了処理をしてから次の敵のAIを起動したいと考えています。
```C#
/* EnemyManager */
Observable.FromCoroutine(_ => enemys[i].ActionAI())
.Subscribe(_ =>
{
// 敵行動終了時の処理
// その後、次の敵行動へ
});
```
### 発生している問題
敵AIは[移動]→[攻撃]という流れで行動させるつもりで、[移動]と[攻撃]は既に実装できました。
[移動][攻撃]はそれぞれアニメーションなどに合わせて終了を通知させたいのでコルーチンでの非同期処理にしました。
ですが、以下のようなコードでは[移動]の完了時にActionAiの終了通知が流れてしまい、一連のコルーチンの完了を通知できていません。(移動完了時点で次の敵が移動してしまう)
[攻撃]まで終了してからActionAIの終了を通知するにはどうすればいいでしょうか?
```C#
public IEnumerator ActionAI()
{
// 移動
yield return Observable.FromCoroutine(_ => ExecuteMoveAI())
.Do(_ => Debug.Log("移動完了"))
.ToYieldInstruction();
// 攻撃
yield return Observable.FromCoroutine(_ => ExecuteAttackAI())
.Do(_ => Debug.Log("攻撃完了"))
.ToYieldInstruction();
}
```
###
UniRxもコルーチンについても無学なため、基本的な考え方から合っているかわかりません。
以上の問題について解決策、別の実装方などアイデアを頂ければ幸いです。よろしくお願いします。
### 補足情報
Unity Ver.2017.2.0f3
  • C#

    12561 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    8517 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    2826 questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

  • 非同期処理

    287 questions

    非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

  • Unity2D

    2080 questions

2 タグの追加

vuvu

vuvu score 15

2018/06/27 16:40  投稿

【Unity】コルーチン内でコルーチンを連続して呼び出す【UniRx】
### 前提・実現したいこと
現在UniRxで敵ユニットのAI部分を作っています。ゲーム内容はシミュレーションRPGのようなターン制で、
敵のターンに移ると敵ユニットが順番に行動をする予定です。
使用側は以下のような形で敵をActionAIコルーチンで行動させて、終わり次第終了処理をしてから次の敵のAIを起動したいと考えています。
```C#
/* EnemyManager */
Observable.FromCoroutine(_ => enemys[i].ActionAI())
.Subscribe(_ =>
{
// 敵行動終了時の処理
// その後、次の敵行動へ
});
```
### 発生している問題
敵AIは[移動]→[攻撃]という流れで行動させるつもりで、[移動]と[攻撃]は既に実装できました。
[移動][攻撃]はそれぞれアニメーションなどに合わせて終了を通知させたいのでコルーチンでの非同期処理にしました。
ですが、以下のようなコードでは[移動]の完了時にActionAiの終了通知が流れてしまい、一連のコルーチンの完了を通知できていません。(移動完了時点で次の敵が移動してしまう)
[攻撃]まで終了してからActionAIの終了を通知するにはどうすればいいでしょうか?
```C#
public IEnumerator ActionAI()
{
// 移動
yield return Observable.FromCoroutine(_ => ExecuteMoveAI())
.Do(_ => Debug.Log("移動完了"))
.ToYieldInstruction();
// 攻撃
yield return Observable.FromCoroutine(_ => ExecuteAttackAI())
.Do(_ => Debug.Log("攻撃完了"))
.ToYieldInstruction();
}
```
###
UniRxもコルーチンについても無学なため、基本的な考え方から合っているかわかりません。
以上の問題について解決策、別の実装方などアイデアを頂ければ幸いです。よろしくお願いします。
### 補足情報
Unity Ver.2017.2.0f3
  • C#

    12561 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    8517 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • 非同期処理

    287 questions

    非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

  • Unity3D

    2826 questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

  • Unity2D

    2080 questions

1 質問部分の補足

vuvu

vuvu score 15

2018/06/27 16:37  投稿

【Unity】コルーチン内でコルーチンを連続して呼び出す【UniRx】
### 前提・実現したいこと
現在UniRxで敵ユニットのAI部分を作っています。ゲーム内容はシミュレーションRPGのようなターン制で、
敵のターンに移ると敵ユニットが順番に行動をする予定です。
使用側は以下のような形で敵をActionAIコルーチンで行動させて、終わり次第終了処理をしてから次の敵のAIを起動したいと考えています。
```C#
/* EnemyManager */
Observable.FromCoroutine(_ => enemys[i].ActionAI())
   .Subscribe(_ =>
   {
       // 敵行動終了時の処理
       // その後、次の敵行動へ
   });
```
### 発生している問題
敵AIは[移動]→[攻撃]という流れで行動させるつもりで、[移動]と[攻撃]は既に実装できました。
[移動][攻撃]はそれぞれアニメーションなどに合わせて終了を通知させたいのでコルーチンでの非同期処理にしました。
ですが、以下のようなコードでは[移動]の完了時にActionAiの終了通知が流れてしまい、一連のコルーチンの完了を通知できていません。(移動完了時点で次の敵が移動してしまう)
[攻撃]まで終了してからActionAIの終了を通知するにはどうすればいいでしょうか?  
```C#
   public IEnumerator ActionAI()
   {
       // 移動
       yield return Observable.FromCoroutine(_ => ExecuteMoveAI())
           .Do(_ => Debug.Log("移動完了"))
           .ToYieldInstruction();
       // 攻撃
       yield return Observable.FromCoroutine(_ => ExecuteAttackAI())
           .Do(_ => Debug.Log("攻撃完了"))
           .ToYieldInstruction();
   }
```
###
UniRxもコルーチンについても無学なため、基本的な考え方から合っているかわかりません。
以上の問題について解決策、別の実装方などアイデアを頂ければ幸いです。よろしくお願いします。
### 補足情報
Unity Ver.2017.2.0f3
  • C#

    12561 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    8517 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • 非同期処理

    287 questions

    非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る