タイトル画像

タイマーの作り方【BGE】

2015.02.17(22:39) 30

 Blender のゲームエンジンで、python なしでタイマーを作る方法です。
一秒ずつカウントアップしていって、60秒で1分に繰り上がるものです。
少しややこしいですが繰り返す処理なので、仕組みが解かると他に応用が利くかもしれません。

【作り方】
 モード(エンジン)を Blender Game に切り替えてから操作します。

1. [00:00] というタイムカウンターを作る。
timer_01.png

 1-1.テキストオブジェクトを用意します。
  Shift+A でテキストオブジェクトを追加します。
  テキストオブジェクトは初期状態では「Text」という文字ですが、Tab キーでエディットモードに入ると好きな文字を打てるようになります。
  元の文字は消して、半角数字の0を入力してください。

 1-2.カウンターの形にする。
  テキストオブジェクトをコピーし、画像のように配置してください。

2.プロパティを設定し、ロジックブリックを組む。
timer_02.png

  2-1.一番右のオブジェクトから設定します。
   画面構成を Game Logic に変更し、一番下の位(右端)の0を選択します。

  2-2.テキスト専用のプロパティを作ります。
   [+ Add Text Game Property ]ボタンをクリックして、型を Integer にセットします。

  2-3.センサーの設定をします。
   Delay センサーを追加し、Delay: と Duration: の値に、それぞれ 24 と打ちます。
   そして Repeat にチェックを入れてください。

  2-4.アクチュエイターを設定します。
   間に And コントローラーを挟んで、Property アクチュエイターを追加します。
   Mode: は Add に設定し、Property: 欄には Text を、Value: には 1 と入力します。

 これでカウントアップの仕組みが出来ました。
この状態でゲームモードを実行すると、カウントアップし始めますが、繰り上がりのときに元々用意してあった左隣の10の位を無視して、自動的に次の位の表示が新たに出てきてしまい、カウンターの表示がおかしくなります。

3.次は繰り上がりの設定をします。

 3-1.もう一つロジックブリックを組みます。
  Always センサーを追加して、TRUE のスイッチを ON にしてください。

 3-2.コントローラーを設定します。
  Expression コントローラーを追加し、値に「Text >=10」と入力します。

 3-3.アクチュエイターを設定します。
  Property アクチュエイターを追加し、Mode: は Assign 、Property: は Text 、Value: は 0 に設定します。

  次にその直下に、message アクチュエイターを追加し、To: (送り先)に Text.001(十の位の数字のオブジェクトの名前)を指定し、Subject: に a と入れておきます。(送る内容は何でも良い。)
  Body: の項目は触らず無設定にしておきます。

 3-4.今作ったものを繋ぎます。
  Always センサーと Expression コントローラ-、さらにそれに Property アクチュエイターと Message アクチュエイターを繋ぎます。

 これで10 までカウントすると、次の位のオブジェクト Text.001 に、a というメッセージが送られるように設定されました。
次は Text.001 の設定を作り、このメッセージ a を受け取ったときの反応を作ります。

4.Text.001 の設定をします。
 10の位のテキストオブジェクトの名前が Text.001 となっていることを確認して始めてください。
timer_03.png

 4-1.Text Game Property を追加します。
  このオブジェクトも最初のオブジェクトと同様に、Text Game Property を追加します。
  型も同じく Integer としてください。

 4-2.センサーを設定します。
  Message センサーを追加し、TRUE のスイッチを ON にします。
  そして Subject: の欄に、先程つくった a を入力します。

 4-3.アクチュエイターを設定します。
  Property アクチュエイターを追加し、Mode: を add 、Property: 欄に Text 、Value: 欄に 1 と入力します。
 4-4.コントローラーを設定します。
  Message センサーと Property アクチュエイターを繋ぐと、勝手に間に And コントローラーが挟まるので、そのようにしてください。

 これでちゃんと繰り上がるようになりました。(実行すると、繰り上がる瞬間に変なの映りますが……。)
ただ、この位も9までカウントすると表示がおかしくなるので、次の設定でさらに繰り上がってもらいます。

5.またも繰り上がりの設定をします。
 数値入力以外 3 の作業と同じなので簡略化した表記にします。

 5-1.もう一つロジックブリックを組みます。

  【センサー】Always
  設定:TRUE スイッチ ON

  【コントローラー】Expression
  値:Text >=6
  ※60進法なのでここは 6 になります。

  【アクチュエイター】Property
  Mode: Assign
  Property: Text
  Value: 0

  【アクチュエイター(二つ目)】Message
  To: Text.002
  Subject: b

 これらを繋いで、Text.001 の設定は終わりです。

6.次は Text.002 を同様の設定にします。
 先に[+ Add Text Game Property ]ボタンをクリックして、型を Integer にセットしておきます。
timer_04.png

 6-1.一つ目のロジックブリック。

  【センサー】Message
  設定:TRUE スイッチ ON
  Subject: b

  【コントローラー】And

  【アクチュエイター】Property
  Mode: Add
  Property: Text
  Value: 1

 6-2.二つ目のロジックブリック。

  【センサー】Always
  設定:TRUE スイッチ ON

  【コントローラー】Expression
  値:Text >=10

  【アクチュエイター】Property
  Mode: Assign
  Property: Text
  Value: 0

  【アクチュエイター(二つ目)】Message
  To: Text.003
  Subject: c

  これで Text.002 の設定は終わりです。

7.次は最後の位 Text.003 を設定します。
 ここでも忘れずに最初に[+ Add Text Game Property ]ボタンをクリックして、型を Integer にセットしておきます。
timer_05.png

 7-1.最後は1つしかロジックブリックがありません。
  (繰り上がりの設定無しだからです。)

  【センサー】Message
  設定:TRUE スイッチ ON
  Subject: c

  【コントローラー】And

  【アクチュエイター】Property
  Mode: Add
  Property: Text
  Value: 1

 お疲れ様でした。以上ですべての設定は終わりです。
このタイマー(カウンター)は、改良すれば日付とかも表現できそうですが、ただ増えていくだけのシンプルなものなので、途中から始まったり一時停止して再開したり、早送りや巻き戻しをしたりというのは難しいかと思います。

参考文献:Blender Tutorial: BGE easy timer(no pyton)
関連記事
スポンサーサイト


超エキサイティン! フンストンの3DCG至難の書


<<鋼体シミュレーション(Rigid Body) | ホームへ | 【企画】嵐山ステージ(途中)>>
コメント
コメントの投稿













管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://funstone.blog.fc2.com/tb.php/30-7d92912b
この記事にトラックバックする(FC2ブログユーザー)