連載テラリウム徹底攻略ガイド 第7回 ダンスによる動物間コミュニケーション |
|
|
今回は動物同士の通信にチャレンジしてみる。
テラリウムサロン
テラリウムに関するご質問やご意見はこちらへ |
コミュニケーションの基本
テラリウムでは、生殖時に自分の子供へDNAを渡す以外に、動物同士でコミュニケーションを行う方法は用意されていない。動物間で会話するなどの専用の機能は用意されていない(すでに発表されている次バージョンの「Terrarium V 1.1」ではこの機能が用意されているようだが)。
しかし戦略上は、動物同士で連携ができたら、より強い生物を作成できそうだということは容易に想像できる(実際、テラリウムサロンでも話題に上ったことがある)。そして現バージョンのTerrariumでも、ほかの機能を利用することで生物間でのコミュニケーションを実装することは可能だ。先にご紹介した会議室の発言にもあるように、ボディ・ランゲージを使うのである。つまり生物のある行動に意味を持たせ、その意味を伝播させる。
ではここで少し、実際に生物が行うことができる行動を確認してみよう。
- 攻撃(BeginAttacking)
- 防御(BeginDefending)
- 摂食(BeginEating)
- 繁殖(BeginReproducing)
- 移動(BeginMoving)
これらを利用して、コミュニケーションを行う手段を探すわけだ。このうち今回は、移動(BeginMoving)を利用したコミュニケーションについて考えていく。これは、移動座標や移動方向、スピードという最も複雑なデータが必要な行動だからである。逆にいえば、移動という行動には、複雑なデータ(情報)を含めることができる余地が大きい。
移動をコミュニケーション手段に使うとして、次に考える必要があるのは、「発信、受信側それぞれで設定または取得できる情報」である。「送信側で何かを、ある方法で行った場合、それがどのように受信側で取得できるのか」、これが分からなければ、意味のあるコミュニケーションはできないからだ。では、それを確認していこう。
移動時に設定できる情報
まず、生物の移動時に設定できる情報を確認してみよう。具体的にはBeginMovingメソッドに渡す引数である。
- BeginMoving(MovementVector);
このメソッドでは、MovementVectorクラスの参照のみを必要としている。そしてMovementVectorクラスに含まれる情報は次の2つである。
- Destination(目的地)
- Speed(スピード)
つまり、これらが移動時に指定できる情報であり、情報を発信する側が設定できるすべてである。
移動している相手から取得できる情報
次に受信側を考えてみよう。あるターゲットから取得できる情報で移動に関係したものをリストアップすると次のようになる。
まず、自分の周りの情報を取得するメソッドとしては次のものがある。
- Scan()
- LookFor(OrganismState)
- RefreshState(string)
これらから取得できるのはOrganismStateオブジェクトであるが、このクラスは、AnimalStateクラスとPlantStateクラスの基底クラスであり、実際はその派生クラスのオブジェクトから取得できる情報が、ほかの生物から取得できる情報のすべてだ。
今回の場合は移動を利用するので、AnimalStateクラスのみ考えればよい。その中から移動に関係あるものを抜き出すと次のようになる。
- ActualDirection(移動角度)
- Speed(スピード)
- CurrentMoveToAction(現在のMoveToActionオブジェクト)
また、MoveToActionクラスはプロパティとしてMovementVectorクラスを持っており、これは先ほど述べたように、
- Destination(目的地)
- Speed(スピード)
といった情報を持っている。
以上で、移動を利用してコミュニケーションをとる場合に必要な情報が、大体そろった。これらのメソッドやプロパティなどをうまく使って、生物間での情報交換を実現すればよい。
ただ、1つだけ注意しなくてはならないことがある。今回はコミュニケーションに「移動」を使用している。従って今回の方法では、「移動」に関する制約は、そのままコミュニケーションの制約になるということだ。
例えば、相手の移動情報を取得できるのは、視界の中に相手がいる場合に限られる。つまり、このコミュニケーションは視界の中の動物としか行うことができない。またそのほかにも、偽装や視界の広さを決定するパラメータの影響を受けるなど、移動に関する制約はすべて受けてしまう。これから実装について説明するが、あらかじめこの点は頭の中に入れておいていただきたい。
それでは、相手から取得できる情報ごとにコミュニケーション機能を実装していこう。相手から取得できる情報というのは、先ほど挙げた、
- ActualDirection
- Speed
- CurrentMoveToAction
である。ただし、Speedはほかと組み合わせることもできるし、最大値が生物ごとに違う(パラメータによって変わる)。また、最大のSpeedで移動すると体力をかなり消費する、Speedが速いとすぐに視界の外に出てしまうなど、それ単体でのコミュニケーションには向かないと考え、今回は考慮しないことにした。よって、これから説明するのは
- ActualDirection
- CurrentMoveToAction
を利用したコミュニケーションである。
INDEX | ||
[連載]テラリウム徹底攻略ガイド | ||
第7回 ダンスによる動物間コミュニケーション | ||
コミュニケーションの基本 | ||
ActualDirectionを使ったコミュニケーション | ||
Destinationを使ったコミュニケーション | ||
コミュニケーションの利用 | ||
「連載 テラリウム徹底攻略ガイド」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|