Google

2011年9月30日金曜日

モノビヘイビア

昨日の記事の続き。

エンジニア側からすれば、昨日紹介したクラス制御が仕事のメイン。
つまりMonoBehaviour派生クラスの実装が作業の中心となります。

しかしGUI型ツールの宿命というべきか、要所要所でGUIを触るという作業が必ず入ります。
スクリプトオンリーでFWと対話し、ゲームを作るのは困難なように思えます。
共同作業が当たり前のこの世界ならなおさらでしょう。

ということで、Unityはまだまだ発展途上。
ぐちってもしょうがないのでMonoBehaviour派生クラスの作り方からいってみましょー。
昨日いきなりクラス図を出した反省を込めてw、スクショ付きです。

あ、レイアウトは好みによっていろいろ変えられます。
これはあくまで一例なので、読者さんの環境と相違する場合もあります。

Step1. ソースの生成

Unity上にProjectというタブがついたエリアがあります。
そこをクリックするとメニューが出るので、「C# Script」を選択。
あちこちでJavaScriptの例ばっかなので、このブログではC#オンリーとします。
ちなみにこれ、メニューのAssets->Create以下の構成と同一です。

Step2. 名称変更中

Step1を行うと、名称が変更できる状態で「NewBehaviourScript」という項目が出ます。
このまま確定するとこの名称のクラスができますが、実はこの状態で名称変更をすると、クラス名まで一緒に変更してくれます。
大抵の言語では当たり前ですが、ファイル名とクラス名は一致しなければなりません。
間違えてNewBehebiourScriptで確定してから変更しようとすると二度手間。
なのでこの時点で変更すると楽ですな。

Step.3 名称確定


今回は「SampleScript」としてみました。
本来なら名が体を表すように付けるのが基本ですがサンプルなので。

ここで注意点がひとつ。
実はUnityのProjectツリーはOS上のディレクトリ構成を表示しているだけです。
言い換えるとファイルエクスプローラ or Finder or ファイラー。
各シーンで使用する可能性がある、単なるリソース格納庫のビューアです。
Ctrl-Zを何度押そうが、Undoは効きません
代わりに、ファイルエクスプローラ等でこのディレクトリにファイルを入れたり削除しても、そのままUnity上に反映されます。

Step.4 GameObject生成

Unityは常になんかしらシーンが存在というか表示される状態になってます。
空っぽのプロジェクト作っても同様です。
ではこのシーン上に空っぽのGameObjectを生成してみましょう。
SampleScriptが振る舞うための宿主が必要ですからね。


メニューのGameObject->Create Emptyを選択。
これで「Gameobject」という名のGameObjectが生成されました。
これだけだと、こいつにはTransformコンポーネントしかついていません。

Unityの概念はFlashに結構似ていて、シーンにあるものは実行時にインスタンスになるべきものを予め配置しておく形になります。
したがってこの手順で生成すればそのまま実体が確定というわけです。
有名なプレハブという概念もありますが、エンジニア向けの解説はまた今度。

Step5. 紐付け


昨日の記事で、GameObjectとの関連付けを手動でと書きましたが、ここがそれです。


スクショには写ってませんが、SampleScriptをHierarchy上のGameObjectにドラッグ&ドロップしてください。
行なってもダイアログも何も出ませんけど。
結果がこちら。


右端に見えるインスペクタが変化しています。
紐付けされた証に、SampleScriptの文字が見えますね。
これでGameObjectはSampleScriptで振る舞いを表現するようになりました。
この順番は、実装してからでも、先でもどっちでも構いません。
要はヒモ付してからもガリガリ変更を記述できるということです。
変数に注意点がありますが、それはまた今度。

注意点としては、1つのスクリプトに同じものでも別のものでも、複数個紐付けできてしまうという点。
ダイアログも何もでないのが不親切ですね。
ちなみに紐付けを外すなら、この変化した部分にある歯車をクリックして「Remove Component」で削除できます。

これで紐付けができました。
この組み合わせで使っていくのが基本になります。

2011年9月29日木曜日

最低限把握すべきクラス

Unityのゲーム制作は非常に簡易です。

実行時画面をシーンという概念で扱い、その中で動くのはGameObjectインスタンス。
GameObjectにはプロパティライクなComponent群が存在。
コンポジットパターンでルートからツリー構造を形成。
エンジニアならこれだけでも想像できるのではないでしょうか。

巷の紹介では、UI操作手順のスクショ付き解説が殆ど。
しかし同じでは詰まんないので、いきなり簡易クラス図を出してみましょうw

MystliveがCacooで描いた簡易クラス図です

一応Unity公式にはリファレンスがあります。
しかしFWのソースはユーザが取り出して見ることはできません。
UMLも見当たらないので、重要な部分のみを自力でざざっと描いたのがこれです。
結構省略&いい加減なので細かいところは突っ込まないでください。

んでは、ざっくりと解説。
普段使っていく上で、黄色のクラスが肝です。

先ほどの解説通り、シーン上で実行時に動くのはGameObject。
これ単体では描画機能すら有りません。(位置情報のTransformだけは最低でも付きますが)
で、テクスチャやコリジョンやメッシュ描画やら色々付けることが可能で、それらの組み合わせでオブジェとしての表現を成します。
GameObject自身は親子機能が無く、Transformがコンポジットになって親子付け。
位置情報がくっつくので、パーツをまとめたりアイテム持ったり等の表現ができます。

GameObjectの振る舞いを書くならMonoBehaviourを継承し実装。
基本的には書いたらGUI上で紐付けしなければなりませんが。
実装にはJavaScript、C#、Booどれでも使用可能で混在もできますが、混在してトラブルに何度もあっているので、速度面も兼ねてC#統一がお勧めです。
(しかしUnity謹製サンプルは全てJsという罠)

長いのでとりあえず今日はここまで。

2011年9月28日水曜日

Unity使用中でござる

実は最近仕事でUnity使ってます。
Unityとは一言で言えばゲーム制作ツール。
基本無料で3Dバリバリで凄いレベルのゲームが作れるっていうシロモノです。
金出すとスマホやコンシューマにも吐き出せます。
FWが吸収するので移植も簡単。

今まで英語資料か人様のブログしかなかったのですが、やっと和書も出てきました。
開発にあたって私が読んでみたのは以下の本。
リンク先はブクログです。アフェじゃないのでご安心を。

Creating 3D Game Art for the iPhone with Unity
http://booklog.jp/asin/0240815637

Beginning 3D Game Development with Unity
http://booklog.jp/asin/1430234229


Game Development With Unity(10月に和訳が出る予定)

Unityによる3Dゲーム開発入門
http://booklog.jp/asin/487311506X

上記は入門用としてはどれもなかなかでした。
なお、普通の記事は結構あるので、ここではエンジニア向けの内容を書く予定。
C#でのTips中心になるかと思います。