ラベル UnityBasics の投稿を表示しています。 すべての投稿を表示
ラベル UnityBasics の投稿を表示しています。 すべての投稿を表示

2017年9月5日火曜日

【Unity】RTSゲーム Bwars2 戦術AIの実装


 前回各セクターにユニットが配られるようになったのでセクターごとに与えられたユニットに指示を出す戦術AIの実装を始めた。戦術AIは与えられたユニットを効果的に利用し戦闘を有利に進めなければならない。戦術AIの仕事は究極的には1つしかない―ユニットに任意の場所への移動命令を出すことだ。そのためおおまかに2つの演算を行う。1つ目は敵ユニットの位置の予測で、2つ目はその位置に対する効果的な味方の配置場所を計算することだ。1つ目については隣り合うセクターの支配権や実際に確認されている敵に応じて候補地(理想的にはセクター全域が対象となるが演算コストの理由から相当間引いている)にスコアを与えスコアの高い順から敵予想値位置とする。2つ目は味方ユニットの現在位置と移動速度、敵味方の攻撃範囲の内外などの要素から同じくスコアにより移動先位置を決定する。上の写真では敵の予想位置に球体が置かれている。決して現状精度が高いものではない。しかしプロセスは正しいと感じている。ゲームの他の部分との開発と二人三脚でAIもよりましなものに変わっていくだろう。

2010年1月15日金曜日

【Unity】その4:Unityの理解・用語

 今回から公式サイトにあるチュートリアルを開始します。チュートリアル・マニュアルでUnityについて冒頭部分で解説してあるので、これまでの投稿と重複する所もありますが確認していきます。

 Unityはゲームを開発するために作られた強力なツールです。FPSからパズルゲームまで様々な種類のゲームを開発するのに適しています。Unityはユニークな開発システムを採っています。多くのゲーム開発者はほとんどの時間をプログラミングに費やしますがUnityでは3Dモデリングソフトのようにアセット中心の開発形式を採用しています。

 Unityで開発するゲームはProject からなっています。プロジェクトはモデルからスクリプト、メニューなどゲームに必要な全ての要素を含んでいます。Unity(ver2.0)を最初に起動するとプロジェクト「Island Demo」をロードします。

 それぞれのプロジェクトはScene と呼ばれるファイルを1つあるいは複数個含んでいます。1つのシーンは1つのゲームレベルを含んでいますが、例えばゲームメニューやゲームオーバー時の場面、大掛かりなカット・シーンはそれだけで一つのシーンを構成していることもあります。ですからゲームのすべてのレベルはシーンと同義といえますが、逆にシーンが常にゲームレベルである訳ではありません。

 GameObjectとComponent の関係を理解することはUnityを理解するために大切なことです。ゲームオブジェクトはUnityで基本となる要素です。ゲームオブジェクトはいわば空の容器のようなものです。その容器の中に様々な機能をもつコンポーネントを入れることでいろいろな役割を持たせることができます。ゲームオブジェクトは常に1つ以上のコンポーネントを持っています。
 ゲームオブジェクトの強力ところは他のゲームオブジェクトを含むことができるところにあります。ちょうどフォルダーの階層のように組織することができます。複雑なモデルなども一つの親ゲームオブジェクトに子ゲームオブジェクトを関係させることで一つのゲームオブジェクトとして扱うことが可能です。
 コンポーネントは空容器の「中身」を満たすものです。実際コンポーネントなしではゲームオブジェクトは何らの意味を持ちません。一方でコンポーネントはそれだけで存在することはできません。コンポーネントは目に見えるメッシュやマテリアル、粒子だったり、あるいはより抽象的なカメラやライトなどの物理的なモデルをもたないものであったりします。 
 ゲームオブジェクトは複数個のコンポーネントをサポートすることができます。ある種のコンポーネントは一つのゲームオブジェクトに2つ以上入れることができません。たとえば粒子(パーティクル)コンポーネントは一つのゲームオブジェクトに一つしか入れることができないので、複数のパーティクルを出したいときはヒエラルヒー関係をもったそれぞれの内に粒子コンポーネントを内蔵する複数個のゲームオブジェクトを組織する必要があります。

 Assetとはプロジェクトの材料・要素となるものでほとんど全てのもの—マテリアルやテクスチャ、オーディオファイル、さらにはひな形となるゲームオブジェクト(プレハブ)—で、インポートしたアセットはProjectビューに表示されます。シーンにドラックすることでHierarchyにも追加されシーンに含まれたことが表示されます。同一プロジェクト内の複数個のシーンで同じProjectビューにあるアセットを利用することができます。

 Prefabはひな形として定義されたアセットです。プレハブをシーンに配置するとプレハブを親とするインスタンスが生成されます。もしProjectビューのプレハブを編集するとシーン中のすべてのインスタンスが変更されます。プレハブはゲーム中の敵など同一のものをたくさん配置する要素に適しています。特定のインスタンスだけ編集することも可能です。

2010年1月14日木曜日

【Unity】その3:コンポーネント

 チュートリアル形式で書くと自分の理解の助けになるので、しばらくこの形式で書いていこうと思います。尚、別記がない限りUnity起動時デフォルトでロードされるTropical Paradise projectを使っています。

 今回はコンポーネント(Component)を勉強します。プレハブ、あるいはゲームオブジェクトにはその本体に機能を追加することができます。これがコンポーネントです。
 コンポーネントには様々なものがあります。たとえばライトのコンポーネントを追加すると追加されたオブジェクトは光りだします。スクリプトもコンポーネントの一種です。スクリプトを追加するとオブジェクトはスクリプトの記述に従いふるまいます。もっとも基本的なコンポーネントはトランスフォーム(Transform)です。これはオブジェクトの位置、角度、大きさを決定します。すべてのオブジェクトは必ずトランスフォーム・コンポーネントを持っています。
 Unityではプレーヤーの視点を決定するカメラもコンポーネントのひとつです。従って特別にカメラというものがあるわけではなく、カメラ・コンポーネントを実装しているオブジェクトがカメラということになります。

 オブジェクトのコンポーネントはInspectorビューで確認・編集・削除ができます。下のFirst Person Controller Prefab(Projectビュー/Hierarchy内にある)はゲーム内でプレーヤーの本体となるプレハブです。コンポーネントとして基本のトランスフォームの他にプレーヤーの移動を制御するスクリプトFPSWalker、プレーヤーの背丈や登れる段差を設定するCharacter Controller、マウスの動きに合わせて向きを制御するMouse Lookがあります。これらのコンポーネントがないとFirst Person Controller Prefabはただの名前だけの存在です。


 コンポーネントを追加するにはProjectビューのアセット(プレハブ)を選んでComponentから任意の追加したいコンポーネントを選びます。Hierarchyのリストからゲームオブジェクトを選択しても追加することができますが、インスタンスの場合親のプレハブとのリンクが切れると警告されます。インスタンスの変更をプレハブに適用するにはGameObject->Apply Change to Prefabを選びます。

 もう少し詳しくFirst Person Controller Prefabを見てみましょう。First Person Controller Prefabはカプセル形のメッシュGraphicsとカメラ・コンポーネントを実装したMain Cameraからなっています。これがプレーヤーの正体です。これがゲーム時に移動しているのです。



 ProjectビューのFirst Person Controller PrefabをSceneビューの任意の場所にドラックすることでその場所からゲームを開始できます(その際Hierarchyで既存の古いFirst Person Controller Prefabを消しておきます)。

 GraphicsとMain Cameraはそれぞれ独立したアセットですがFirst Person Controller Prefabを親とした一つのグループに属しているので、親が動くとそれに同期してついて行きます。これをペアレンティングといい、例えば車体を親として4つのタイヤを子にすることによりゲーム内では一つの車として振る舞います。ペアレンティングをするには親にしたいアセットに子にしたいアセットをドラックします。

 GraphicsはMesh Rendererのコンポーネントを実装しているので見た目にもカプセル形の立体が見えます。一方Main Cameraはそのコンポーネントがないので「透明」で見えません。Main Cameraを選択してInspectorビューで見るとFirst Person Controller Prefabにも実装されていたMouse Lookがここにもあります。これはFirst Person Controller PrefabのMouse Lookスクリプトがマウスの動きで方位を決めるのに対しMain Cameraのそれは上下角を決めるためにあるからです。この2つのスクリプトでマウスを使って現実世界のような視点でプレーすることができるのです。
 ちなみにゲーム内で動いて見て回るだけならプレーヤー移動のスクリプトを内蔵したFirst Person Controller Prefabとカメラを実装したMain Cameraだけがあれば事足ります(Graphicsはプレーヤーの当たり判定用?)。

 といわけで今回はコンポーネントの話でした。リファレンスはここです。

2010年1月13日水曜日

【Unity】その2:アセット

 今日はアセットをいじってみました。Unityで3Dモデルをゲームに配置する場合、外部3Dソフトでモデルを作り→インポート(アセットになる)→編集・配置という流れになります。

 まずは既存のプロジェクトTropical Paradise project内にあるモデルをシーンに配置してみます。ProjectビューのLongBoat_NC_UntiedフォルダのBoat_UntiedをSceneビューにドラックしてみます。


 ぽんっ!ボートが現れました。ツールバーで位置や大きさが変えられます。HierarchyにもBoat_Untiedが表示されました。青文字はプレハブのインスタンスであることを示しています。ボートを選択するにはこのBoat_UntiedをクリックするかSceneビューで現物のボートをクリックします。  消すときはHierarchyのBoat_Untiedを右クリックしてDeleteを選びます。


 次は外部からモデルをインポートしてみます。ここではラズの羊番の狛犬を使ってみます。この狛犬はフリーの3DソフトWings3Dで作られています。まずProjectビューで新しいフォルダ「koma」を作ります。そこにOBJ形式で保存した狛犬のメッシュモデルのファイル「komainu」をドラックします。するとkomainuとMaterialがkomaフォルダに生成されました。狛犬のモデルは複数個のポリゴンからなっているのでメッシュもマテリアルもそれぞれ複数個あります。


 この時点ではテクスチャをインポートしてないのでマテリアルを選択しても真っ白でシーンに配置してもモデルは真っ白です。そこでモデルのテクスチャ画像ファイルをkomaフォルダにドラックして読込みます。マテリアルを選択してInspectorビューのテクスチャウィンドウにテクスチャをドラックします。全てのマテリアルにこれを繰り返します。


 これでテクスチャをあてました。シーンに配置してみます。

 

 船出の準備は万端です!Hierarchyにも青文字でkomainuと表示されました。インスタンスなのでProjectビューで狛犬をいじると、シーン内のインスタンスの狛犬も変更されます。

 リファレンスはここです。

2010年1月12日火曜日

【Unity】その1:インターフェイス

 Unityの勉強を開始。今日はインターフェイスの取り扱いについて。



 Unityを起動するとヴュー(View)と呼ばれる複数のタブウィンドウが開く。

Project View
 ゲーム内のスクリプト、3Dモデルなどのアセット(Asset:資産)を表示する。材料置き場。外から何かインポートする場所もここ。プロジェクトヴューからシーンヴューにアセットをドラックすることでゲームシーンにアセットが追加ができる。キッチンの冷蔵庫みたいなものだと思う。

Hierarchy
 実際にゲーム内に配置されているGameObject(メッシュ、スクリプトなど)を表示する。シーンにオブジェを追加したり、除く度にヒエラルヒーに表示される内容は変化していく。プロジェクトヴューが冷蔵庫だとすればヒエラルヒーに表示されるのは冷蔵庫から出した材料。

Toolbar
 てっぺんに表示されるコントロールバー。オブジェの移動、レイヤーの表示の設定など。

Scene View
 シーンヴュー。ここにゲームの外観が表示され、ゲームオブジェの追加、編集などを行う。


 ツールバーのTransformToolsが左端の手のアイコンのときドラックでカメラ位置を移動できる。optionキーやcommandキーを押しながらカメラを回転・ズーム。またはWキーを押したあとマウス右ボタンをホールドしながらWASDキーでFPSのように移動できる。

 ゲームオブジェはTransformToolsの左から2番目(十字矢印のアイコン)以降のボタンを押すことで移動、回転、拡大縮小ができる。移動時にCommandをホールドすると他のオブジェの表面にスナップする。ゲームオブジェはシーンヴュー内でクリックで選択、Fキーを押すとそのオブジェに視点がフォーカスする。
 
 ツールバーのGizmo Display Toggles(スクリーンショット右側Pivot/local)はゲームオブジェを移動、回転、拡大縮小させる際の起点位置を変更する。

 シーンヴュー右上のギズモでカメラ位置の切り替えが可能。シフト+中央の立方体クリックでアイソメモード。

Game View
 実際にゲームを動かしてテストプレーをする。プルダウンでアスペクト比の変更が可能。ビデオの再生ボタンみたいなものをクリックして開始する。プレー中の変化は影響しない。

Inspector
 ゲームオブジェの情報を表示する。細かい設定が可能。


 ヴューは作業しやすいように位置のアレンジが可能。ツールバーのレイアウトで好みのレイアウトの保存も可能。


用語

Prefab:アセットの一種。プロジェクトヴューにストックされるゲームオブジェ。プレハブをシーンに追加するとインスタンスが生成される。プレハブが親でインスタンスは子。プレハブを変更するとインスタンスも変更される。


以上の内容はhttp://unity3d.com/support/documentation/Manual/Learning%20the%20Interface.htmlより。