mitsuyoshi-yamazaki / ALifeGameJam2019

ALife Art "BlindPainter"
https://mitsuyoshi-yamazaki.github.io/ALifeGameJam2019/
MIT License
9 stars 3 forks source link

リファクタ #26

Closed mitsuyoshi-yamazaki closed 4 years ago

mitsuyoshi-yamazaki commented 5 years ago

今後さらに複雑な生物/世界を実装するにあたって、生物と世界のレイヤーを分離してインターフェースを定義する

「ここからここまでが内部状態をもつ生命である」という部分を定義しているのがこのインターフェースにおける抽象化

// TS忘れたのでSwift

protocol World<T: Rule> {
  // 世界全ての状態
  // Objects がどれだけあるかもここに含まれる
  var state: T.State { get }

  // 世界開闢からの時刻
  var t: Int { get }

  // rule が型でなくインスタンスであるのは、各種パラメータを変更できるようにするため
  // 例:重力加速度を0.5m/s^2とする
  var rule: T { get } 

  // t+1 の世界の状態に進める:state が更新される
  func next()

  // state の状態を描画
  func draw()
}

protocol Rule {
  // このルールにおける状態
  associatedType State

  // 重量、サイズ等 物理演算に必要な属性
  associatedType Property

  // t+1 の状態を算出
  func next(state: State) -> State
}

protocol Object<T: Rule> {
  // 重量、サイズ等 物理演算に必要な属性
  var property: T.Property { get } 
}

class Life: Object {
}

ayu-mushi commented 4 years ago

責任範囲の分離というのは、「同じ物理法則でも違う生物が居る場合に対応する」「一方を変更した時に他方でしなければならない変更を最小化する(カプセル化など)」といった目的で行われるものと考えていいですか

mitsuyoshi-yamazaki commented 4 years ago

そうです

実際の生き物は大部分が物理法則にロックインするはずなのであくまで理想の話ですが

mitsuyoshi-yamazaki commented 4 years ago

memo

mitsuyoshi-yamazaki commented 4 years ago

memo

これで生物と物理法則を分離できるが、生物の演算処理は世界のルールに乗っていない

mitsuyoshi-yamazaki commented 4 years ago

生物と世界のレイヤーを分離

この辺を真面目にやっていくと行き着く「ゲーム世界を簡単に構築できる」というアイデアはゲームエンジンになるので、人工生命世界をどう実装するのがうまいかある程度見えたらUnityあたりで書き直して"人工生命ゲームエンジン"を作りたい

Unityはエディタ自身を書き換えてゲームシステムに合わせたゲームエンジンを作ることができるのが強み 一方であくまでゲームなので、ゲーム時間は実時間と一致する想定であるし、イベントドリブンなところがある

ayu-mushi commented 4 years ago

ところでエディタ自身を書き換えるというのはどういう機能ですか

Unityはエディタ自身を書き換えてゲームシステムに合わせたゲームエンジンを作ることができるのが強み

mitsuyoshi-yamazaki commented 4 years ago

UnityをつかってUnityに新規のエディタを追加することができるんです 例えば、標準で入っていない経路探索アルゴリズムを使いたいときに、それを使えるようにする新規のエディタを書いてUnityに組み込む、とか

そしてそのようなエディタもAssetのひとつなので、Asset Storeで公開することができる 利用する人は必要な機能をもつエディタを組み込んでいって、ゲームを作るのに十分な機能をもつ統合開発環境を作る

ゲームに必要となる機能は様々なので、そうやってエディタの方をカスタマイズできるようにしてあります

ayu-mushi commented 4 years ago

そんな機能があったのですね。

mitsuyoshi-yamazaki commented 4 years ago

done