Traumachicken

12/18/2011

BehaviorTreeで頭の悪いアイテムを作る

OrthelloのチュートリアルにBehaviorTreeをぶっこんでみた。




スコアアイテムなのにプレイヤーが前にくると
突っ込んでくるという斬新なAIだ。




ツリーはこんな感じになる。
ツリーにする意味が無い。


12/17/2011

Nuclear Dawnの夜明け

終末無料だ!




核して世界は滅びた。。。
資源が無い、戦争!





Savageのシューター版と言ったところ。
チームで一人がコマンダーやります。
ヘタクソだと投票で降ろされます。
それが民主主義。





「釣れますか?」
「いいえ、事件は現場で起きています。」






とりあえずスナイパー。
チマチマチマチマチマチマチマチマチマチマチマチマ






アサルトクラスならステルスクロークをサーモビジョンで看破できます。
でないと背中を刺されます。






ロケーションも豊富です。
3つぐらいやりました。






いずれ東京メトロもこうなります。






いずれ有楽町線もこうなります。






屋内にとどまり、ビデオげーむをします。


12/14/2011

Unity AndroidのBuilding DEX Failed!エラー応急対処法

  1. adb使ってるやつをkill(unity、eclipse、etc) 
  2. タスクマネージャでプロセスadb.exeをkill 
  3. とりえあえずUnityだけを再起動してbuild

12/03/2011

Behavior Treesのセレクター

  • Sequence
    • 左から右にトラバーサル。
    • ChildがFailureを返したらFailureを返して終了。
    • ChildがSuccessを返したら次のChildをトラバーサル。
    • ChildがRunningを返したらRunningを返して終了。
    • 次のトラバーサルはRunningを返したChildから開始。
    • だからChildがRunningを返し続けたらそいつだけ回る。
  • Priority Selector
    • 設定された優先順位通りにトラバーサルする。
    • ChildがRunningを返してもそのChildより優先順位が高いChildは常にトラバーサルする。
    • 例)2番目のChildがRunningを返しても1番目からトラバーサルする。3番目はしない?
    • 意味分からん。
    • SelectTopPriorityのID変えると変わる。
  • Selector
    • 左から右に1回に一個トラバーサル。
    • ChildがSuccessを返したらSuccessを返して終了。
    • ChildがFailureを返したらRunningを返して終了。次のトラバーサルは次のChildから開始。
    • ChildがRunningを返したらRunningを返して終了。
    • 次のトラバーサルはRunningを返したChildから開始。
    • 最後のChildがFailureを返したら最初に戻る。
  • http://aigamedev.com/insider/presentations/behavior-trees/

12/01/2011

Unity: Behavior TreesのライブラリBehave

Unity用Behavior TreesのライブラリBehave
サイトは

Behavior Treesの説明は

使い方はCollectionを作って
中にTreeを作ると
エディタでツリーをいじれる

ツリーはBuild libraryボタンを押して吐き出せば
スクリプトから使えるようになる




スクリプトはこんな感じ

using UnityEngine;
using System.Collections;
using Behave.Runtime;
using Tree = Behave.Runtime.Tree;

public class NewBehaviourScript : MonoBehaviour, IAgent
{
 Tree m_Tree;
 // Use this for initialization
 IEnumerator Start () {
  m_Tree = BLNewBehaveLibrary0.InstantiateTree (
   BLNewBehaveLibrary0.TreeType.NewCollection1_NewTree2 ,
   this
  );
  
  while (Application.isPlaying && m_Tree != null)
  {
   Debug.Log( m_Tree.Frequency );
   //~ yield return new WaitForSeconds( 1.0f / m_Tree.Frequency );
   yield return new WaitForSeconds( 1.0f / 1 );
   AIUpdate();
  }
 }
 
 void AIUpdate ()
 {
  Debug.Log( "update" );
  // one action been ticked.
  m_Tree.Tick();
 }
 
 public BehaveResult Tick (Tree sender, bool init)
 {
  Debug.Log ( "got ticked" );
  Debug.Log (
   (BLNewBehaveLibrary0.IsAction (sender.ActiveID) ? "action" : "decorator" )
  );
  
  return BehaveResult.Success;
 }
 
 public void Reset (Tree sender)
 {
 
 }
 
 public int SelectTopPriority (Tree sender, params int[] IDs)
 {
  return IDs[0];
 }
 
 public BehaveResult TickFirstAction (Tree sender)
 {
  Debug.Log("First!");
  return BehaveResult.Success;
 }
}