2014年5月31日土曜日

ARFantasy制作過程50



第二章の
実機での通しテスト
各パラメータ調整は全章完了するまでは大まかで
なるべくARシナリオは変えずにアプリ側からできるようにする


人気ブログランキングへ
にほんブログ村 デザインブログランキング

2014年5月30日金曜日

ARFantasy制作過程49(追加モンスター)



すでに作ったことのあるモデルをつなげて
テクスチャをベイクしたけど違和感がありすぎる
ライオン部分以外は全部作り直し
下半身は山羊で
一旦山羊の全身作ってから
しかしリグは流用したいのでできれば骨格は合わせる


人気ブログランキングへ
にほんブログ村 デザインブログランキング

2014年5月29日木曜日

ARFantasy制作過程48


ボスキャラのいる砦追加
最初に作る章は第二章
第二章のマップには
村、妖精の村、風車小屋、ボスキャラの砦
を配置

かなり後付なストーリーとしては
小人の薬で妖精の村に入れ
妖精の村で手に入れた団扇で風車を動かせる
風車を動かすとリンゴがもらえ
ボスキャラにリンゴを渡すか
ボスキャラと戦うと妖精を救出できる
村には鎧と盾と槍があり拾うことができる
(鎧は6種、盾は6種、武器は10種作ったが
ローカル版ではあまり増やせない
ネット版では増やせるけど作る手間を考えると微妙か)
村では道具屋で矢や回復アイテムを買える
宿屋の店員に話しかけて金を払い鍵をもらい部屋に入りベッドに話しかけると
味方のパラメータが回復

といった感じにした

村のキャラクターは現実の時間が6時から18時までは起きていて
それ以外の時間は話しかけるまで寝ているアニメーションを再生するようにした

時刻受け渡しは
Xcode側では
NSDate *dateTime=[NSDate date];
NSDateFormatter *fmt=[[NSDateFormatter alloc]init];
[fmt setDateFormat:@"yyyMMddHHmm"];
NSArray* argText=[NSArray arrayWithObjects:[fmt stringFromDate:dateTime],nil];
のような感じで現在時刻を取得して
(そのままでGMTでなく各地域の時刻が取得できる)
D'Fusion側ではSETTIMEというコマンドを定義しておき
[mPlayer enqueCommand:@"SETTIME"args:argText]
といった感じで呼び出す

操作中のキャラクターの良心に応じて反応が変わるようにした


各キャラのセリフはD'Fusion側で決め撃たずに
Xcode側に書いておきそれを章の番号とセリフ番号で呼び出すようにした
(ARシナリオを更新しなくてもセリフの修正をできるようにするため
D'Fusion側から章番号とセリフ番号を引数にXcode側の関数を呼び出し
Xcode側から引数に応じたセリフを代入した文字列を引数にして
D'Fusion側で定義したコマンドを実行するという方法
受け渡す文字列は改行もバックスラッシュnでできる


迷い点修正点
リンゴは現在ボスキャラに会話するか
アイテムマーカーを近づけるかすると使用できる
小人の薬はアイテムマーカーを写すと現在選択中のキャラに使用される
(戦闘中に敵キャラを選択して使うと敵が一定時間小さくなる)
といったようにしたがアイテムマーカーを写すという使用方法をどう伝えるか
そもそもアイテムマーカーを写して使用するのがよいか

謎解き的な解き方をするとプレイヤーの良心がプラスされ
ボスキャラを倒してクリアーするとボスキャラの良心分だけプレイヤーの良心がマイナスされる
ようにしたが
中途半端な気もする
というかもう少しストーリー分岐とかとの関連性を一般的に取り扱いたい
戦闘や街中での行動が操作するキャラの良心を変化させ
その良心によってキャラクターの反応が変わり選択肢が変わる
といった部分を
ARとはほぼ無関係なのでやや蛇足な感じもする

キャラクター操作方法は
戦闘中はキャラクター相対座標で十字キーで前進後退左右へ旋回
マップと街では
カメラ上の十字キーのカメラの画面上に設定した中心からのずれの方向のベクトルを現実の空間上
にあるととらえたときのトラッキングオブジェクトからの座標で計算し
キャラクターはそのベクトルのマーカーの平面への射影の方向を向くようにした
つまりカメラとマーカーがどのような位置関係にあっても
現実の十字キーの方向を向くようにした
これが比較的わかりやすい操作だったが
戦闘では後ずさりしながら攻撃したり防御したりできるようにしたかったので
キャラクター相対座標での操作にしてある
しかしこの操作法の違いをどう伝えるか?
とりあえず画面上の十字キーに重ねて操作方法を図示するか


覚書
PCでは見つからず実機で見つかるタイプのバグがある
親子関係のある3Dオブジェクトで
親オブジェクトを先に削除してもPCでは動くことがありデバッグし辛い
しかし何度か同じ動作をするとPCでも落ちることがある


方針
全章共通のセーブデータを決めて
完全にバグを取り除いて
なるべくアセットの差し替えとストーリーの変更を簡単にできるように整備してから
3つコピーし
このタイプで4つの章を作る
その後
主人公が馬やドラゴンに載っているタイプの章を4章作り
その後
各キャラが一人で探索するダンジョンを4つ
これは各キャラを残したまま1章作りそれのコピーを削って
船や潜水艦や馬車や空飛ぶ船などの乗り物を操縦する章を4つ
オープニングとエンディングを作りこみ
最後に余裕があればチュートリアルモードをつける



人気ブログランキングへ
にほんブログ村 デザインブログランキング

2014年5月28日水曜日

ARFantasy制作過程47


団扇のようなアイテムを手に入れて
アイテムマーカーを写すとパーティクルで風が表示されて
風向きに応じて風車が回転するようにした

風車は以前別アプリ向けに作ったものを流用
風車のクラウンギアが中央のギアを回して
中央のギアが左右の石臼を回すというアニメーション

アイテムマーカーの子オブジェクトに風向きというエンティティを追加して
アイテムマーカーの中心と風向きの差のベクトルを
本体マーカーからの座標で計算して
その向きの風車小屋の羽の向きへの射影が
風車小屋のアニメーションのスピードになるように設定した

中で人が歩き回るアニメーションも追加
ストーリーの中では風車を動かすとお礼にアイテムをもらえるという風に使う

人気ブログランキングへ
にほんブログ村 デザインブログランキング

2014年5月27日火曜日

ARFantasy制作過程46



小人の薬を手に入れるとプレイヤーの操作するキャラが小人化し
妖精の村に入れるようになるというシーンを作成

小人化の表現は主人公のエンティティを徐々に1/6のスケールに変化させ
中心に持っていきつつ
トラッキングオブジェクト全体を徐々に6倍に拡大するというもの

一定時間たつと薬の効果が切れて
徐々に主人公は6倍になり背景は1/6になる

衝突範囲は各建物のエンティティの位置を中心にしたときの
全体の親オブジェクトであるworldというエンティティからの座標で設定している
(ここは分かりにくいやり方をしてしまった
エンティティを平行移動するときは問題ないが
拡大や回転をすると
それに合わせて衝突領域を拡大や回転させるようにはしていない


今後の修正点迷い点など
衝突判定や会話判定にはプレイヤーのエンティティからの距離を使っているので
プレイヤーのエンティティが縮小されれば自然に会話や衝突できる範囲も縮小される
通常の大きさの時はほとんど衝突なしになり衝突判定は気にならないが
村のキャラクターたちの
プレイヤーのエンティティからの距離は小さくなってしまうので
通常の大きさの時は反応しないようにする

拡大縮小中に選択中のキャラを変えるとそのキャラが拡大してしまう
これはキャラ変更をできなくするか
キャラが変更されても薬使用中のキャラに効果が出るようにするか?
後者の方がいい気もするけど
各キャラに薬使用中のプロパティを追加する必要があるがそれほどのことか
戦闘で使われる魔法効果のプロパティを流用するか
処理はほとんど重くはならないが他の章では使われない部分を追加することになる
(この辺も初めにもっと練っておくべきだった)
それと全体の拡大縮小や平行移動はどうするか
これは選択中のキャラ中心にもっていくか
そして背景の拡大縮小も各キャラの拡大縮小がされている最中だけするようにするか
それとも背景の拡大率は選択中のキャラの大きさに応じて変化するようにするか
ピンチジェスチャで変更できるというのも分かりにくいのかも
しかし操作中のキャラを見失わないことが重要か

小人の薬の使い方が分かりにくいので手に入れると自動的に使うようにもして
かつアイテムマーカーで表示される薬をキャラクターに近づけるとアニメーションが再生
されて近づけられたキャラクターに効果が表れる
という二通りの使い方をできるようにする


人気ブログランキングへ
にほんブログ村 デザインブログランキング

2014年5月26日月曜日

ARFantasy制作過程45(背景)


扉の部分は詳細なモデルを先に作って
それを用いてテクスチャとノーマルを作成

その他の写真をもとに作った繰り返しテクスチャについては
矩形にマルチレゾリューションとディスプレイスを適用
ディスプレイスのテクスチャにそのテクスチャを適用
ディスプレイスをアプライしてスカルプト
マルチレゾリューションのプレビューを0にして
BakeFromMultiresでベイク

この部分はやや手抜き
ディスプレイスで偶然凹凸が思い通りになったけど
テクスチャは参照するだけにして初めからスカルプトした方がいいかも


人気ブログランキングへ
にほんブログ村 デザインブログランキング

2014年5月25日日曜日

ARFantasy制作過程44(街シーン)


宿屋の店員に話しかけられてYESと答えると
鍵が借りられて
奥の部屋に入れるようになり
ベッドの前で話すボタンを押すと宿泊できる

道具屋では
買い物ができる

話すボタンを押すと
TALKというコマンドを実行するようにして
プレイヤーの付近のオブジェクトのtalkメソッドを実行
会話でプレイヤーが選択する場合はUIを変化させてYES,NOボタンの表示
グローバル変数のtalkingObjにそのオブジェクトを代入
以下話すボタンをタップしたりYES, NOボタンをタップする
たびにtalkingObjのtalkメソッドが実行される
人物に限らず背景のオブジェクトにもtalkメソッドを定義して
単なる背景の場合は揺らしたり単純なアニメーションの再生をして
効果音を鳴らすようにした

街データについては大まかには
data={{街部品1のクラス名、初期値},
{街部品2のクラス名、初期値},...
}
という形にして街データのコンストラクタで街部品(建物など)のコンストラクタを
for i,v in ipairs(data) do
   townParts[i]=v[1].new(v[2])
end
といった感じで呼び出すようにした
各街部品の部品(建物の内装、外装、扉、小物など)についても同様


覚書
3Dオブジェクトとアニメーションをメンバーに含むクラスのデストラクタでは
まず先にアニメーションをnil
次に3DオブジェクトをdeleteObject
してからnilという順番で


修正、迷い点
動きはプレイヤー相対座標で十字キーの操作にしたがこれはおそらく不採用
マップモードと同様の方がいいかも

壁越しに話せてしまう点はなんとかしたい

仲間のキャラを街ではどうするか?
操作可能にするなら意味があるようにしたいが蛇足な気もする
しかしステータスは見れた方がいい気もする
選択は可能で操作は不可能でステータスは見れるようにするか

後で修正が容易になるよう会話のセリフをアプリ側で変更できるようにした方がいいか

その他細かい3Dモデルと音声の修正
看板のテクスチャ
花壇追加
壁の変更


人気ブログランキングへ
にほんブログ村 デザインブログランキング