![](https://habrastorage.org/getpro/habr/post_images/bc0/9c5/0fe/bc09c50fe8d335e9bb2dbb502e652198.jpg)
この投稿では、Project Anarchyゲームエンジンを使用して、非常に短い時間でモバイル3Dゲームのプロトタイプを作成する方法について順を追って説明します。 仕事には、次のものが必要です。
- Project Anarchy SDK 、Android SDK、およびadb接続用のドライバーがインストールされたPC。
- USB経由で接続されたUSBデバイス。
- インストールされたアプリケーションvSceneViewer.apk ;
- LiveCodeparisDemo.zipオブジェクトのセット。
- PCおよびAndroidデバイスでの正常なWi-Fi接続。
世界の創造
vForgeを起動します。 demoフォルダー( LiveCodeParisDemo )に新しいプロジェクトを作成します。![](https://habrastorage.org/getpro/habr/post_images/9f4/990/0c1/9f49900c1403037ca25e17c5e6ae8da9.jpg)
新しいプロジェクトの上にある機能セットを解凍します。
シーンフォルダーに「mygame」という新しいシーンを作成します。
![](https://habrastorage.org/getpro/habr/post_images/4a1/5e9/616/4a15e9616d5bf53b461bd05045e3f36c.jpg)
シーンウィザードを使用して、 MobileForward Rendererを選択し、 Post ProcessorsとLightingオプションをスキップして、[OK]をクリックします。
エディターがデフォルトレイアウトモードになっていることを確認し、 Shape Creatorsタブを選択します。 Static Mesh Instanceオブジェクトを見つけて、 エンジンビューウィンドウの中央にドラッグします。 [ プロパティ ]タブで、 MeshFileNameを選択してファイルブラウザーを開き、[ track11k.vmesh ]を選択します。
ポップアップメニューから、 [エンジン ] -> [空の編集 ]に移動します。 マッピング値がCubemapに設定され、対応する「clear_morning_xxxx.bmp」が各CubeTextureテクスチャに割り当てられていることを確認してください。
![](https://habrastorage.org/getpro/habr/post_images/f84/e36/197/f84e36197e8ac1fc047d4c21b4354e91.jpg)
Sky Propertiesで、 Visible Bitmaskを選択し、すべてのビットが設定されていることを確認します。 最後に、[色]の下の色ツールを開いて、全体の色調を[219,156,217]に設定します。
Engine-> Edit Fogドロップダウンメニューで、 Depth Fogをオンにし、 Startを1000に、 Rangeを16000に設定し、必要に応じてベースカラー [178,103,185]を割り当てます。
![](https://habrastorage.org/getpro/habr/post_images/c57/b35/af2/c57b35af22f06958359235e4747d98e9.jpg)
Shape Creatorsタブに移動し、 Lights(static)-Directional LightをLightingセクションからステージにドラッグします 。 次のオプションを設定します。
ピッチ | 0 |
乗数 | 0.8 |
明るい色 | 255,164,101 |
[ シェイプクリエーター ]タブをクリックし、[ 照明]セクションから[ 時間帯の日光]をシーンにドラッグします。 ポップアップダイアログでバックライトを設定します。 次のプロパティを設定します。
日光
ピッチ | 30 |
明るい色 | 183,172,109 |
背景光(バックライト)
ヨー | -180 |
ピッチ | -20 |
明るい色 | 173,150,102 |
ポップアップメニューから、[ 照明 ]- > [ 照明の計算 ]を選択します。 警告を無視してください;初めて、これは正常です。 これで、シーンは完全に光でいっぱいになり、シャドウがカウントされて追加されます。
オブジェクトとプレーヤーを追加する
シーンにPlayerとObjectsという2つの新しいレイヤーを追加します。Playerレイヤーを選択します。
[ アセットブラウザ ]タブをクリックし、[ モデル ]をオンにします。 ballGunBullet.modelを見つけて、シーンにドラッグします。 (注:斜面上の適切な場所を選択してください)。 [ プロパティ ]タブで、次を設定します。
均一なスケーリング | 4 |
キャストダイナミックシャドウ | 本当 |
移動ツールを使用して、オブジェクトを地面から数メートル上に上げます。
![](https://habrastorage.org/getpro/habr/post_images/e39/32a/d70/e3932ad70f10cbeb9f1e6b87bb82e4b6.jpg)
次に、 Objectsレイヤーを選択します。
[ コンポーネント ]タブをクリックし、 Havok Rigid Bodyコンポーネントを見つけて、[ 添付コンポーネント]リストにドラッグします。 ソリッドのプロパティを設定します。
質量 | 25 |
摩擦 | 0.8 |
払戻し | 0.2 |
線形減衰 | 0.3 |
角度減衰 | 0.3 |
TightFitShape | 本当 |
![](https://habrastorage.org/getpro/habr/post_images/20a/c6b/b52/20ac6bb52299785593e8f6cc1e1a251f.jpg)
[ エディターで実行]コマンドを選択し、結果を確認します。 その後、視聴を停止します。
Asset Browserタブに戻り、 Barrel.modelをシーンにドラッグし、ボールの下の適切な場所に配置します。 バレルを持ち上げて地面に置き、移動しながら、RMB 床へドロップ->中央下をクリックします。 [ コンポーネント ]タブを選択し、次のプロパティを持つHavokリジッドボディを追加します。
質量 | 4 |
TightFitShape | 本当 |
バレルのコピーをいくつか作成します(ヒント:オブジェクトを選択した状態で、Shiftキーを押しながらオブジェクトを移動して、クローンを作成して配置します)。 すべての樽を地面に置きます。
次のプロパティでTrafficCone.modelを使用してこのプロセスを繰り返します。
質量 | 2 |
TightFitShape | 本当 |
エディターで実行を実行し 、結果を確認します。
![](https://habrastorage.org/getpro/habr/post_images/86b/71c/a75/86b71ca75d3e058d048c5d27e4eb14e0.jpg)
ビジュアルデバッガー(VDB)
VDBを起動し、VDBとvForgeの両方のウィンドウが表示されるように配置します。![](https://habrastorage.org/getpro/habr/post_images/d16/b72/d4d/d16b72d4dc64beb892fc4b1e049a1b86.jpg)
![](https://habrastorage.org/getpro/habr/post_images/cae/b07/90b/caeb0790b283d1f8b259cbbe53da5f11.jpg)
localhostを介してVDBをvForgeに接続し、 Run in Editorを介してvForgeでシミュレーションを実行します。
VDBカメラを制御して、より良いシミュレーションを確認します。 (ヒント:メニュー項目[表示]-> [ユーザーカメラ]-> [ビジョン]は、 VDBに vForgeカメラの使用を強制します)。 VDBを使用して、 Havok Physicsのプロパティを表示および変更できます。 ポインタがオブジェクト上にあるときにスペースを押し続けると、それを「キャプチャ」してシーン内で移動できます。 VDBでのオブジェクトの操作は、 vForgeにすぐに反映されます。
![](https://habrastorage.org/getpro/habr/post_images/1b3/8aa/5c6/1b38aa5c6d9c46938a82099a8d09d803.jpg)
エディターでの実行シミュレーションを停止します 。 今回は、 VDB (赤い丸の付いたアイコン)への書き込みを開始し、保存する適切なファイル名を入力します。 エディターで再度実行を実行し 、シミュレーションをしばらく実行してから、シミュレーションとその記録を停止します(黒い四角のアイコン)。 記録をダウンロードし、 VDBでシミュレーションを再生します。オブジェクトを拡大し、再生速度を変更して、フレームの詳細な調査のために一時停止します。
プレーヤーコントロールの追加
Playerレイヤーで、 ballGunBullet.modelを選択します。[ コンポーネント ]タブを開き、次のプロパティを持つPlayer Cameraコンポーネントを追加します。
フォローフィックス | 本当 |
カメラ距離 | 1000 |
最小距離 | 1000 |
最大距離 | 2000年 |
Lua Scriptコンポーネントを追加し、 ScriptFileフィールドで、ファイルブラウザーから「Scipts \ MarbleLogic.lua」を設定します。
ドロップダウンリストで、 デフォルトレイアウトをスクリプトレイアウトに変更し、 スクリプトタブを選択します。 Luaスクリプトが表示され、編集可能である必要があります。 そうでない場合は、 「 既存のスクリプトをロード 」アイコンをクリックして、 「MarbleLogic.lua」ファイルを選択します。
![](https://habrastorage.org/getpro/habr/post_images/05f/2b1/730/05f2b173001a727a3a2887ca03a61d59.jpg)
![](https://habrastorage.org/getpro/habr/post_images/ebd/78b/e66/ebd78be66015a58cfd3b9a8bc00afe60.jpg)
Play the Gameモードをオンにします。 既存のゲームコントローラを使用してボールを制御できます。 カメラはスムーズに動くはずです。 Escキーを押して、ゲームモードのプレイを終了します。
リモート入力を使用する
注:これは、開発PCと同じネットワーク上のWi-Fi接続を介してのみ機能します。[ スクリプト ]タブで、Luaスクリプトの最初の行を変更します。
G.useRemoteInput = true and ...
スクリプトを保存し、 Play the Gameを実行します。 IPアドレスは、画面の右上隅に表示されます。 デバイスで、インターネットブラウザーを開き、指定したIPアドレスに移動します。
![](https://habrastorage.org/getpro/habr/post_images/4c8/326/33d/4c832633d67a682e06014716c5589e68.jpg)
すべてが正常に機能する場合、デバイスからのタッチと加速度計のデータがvForgeに転送され、ボールが制御されます。
リモートコントロールを無効にするには、スクリプトを修正して
G.useRemoteInput = false and ...
Androidの準備
ポップアップメニューから、[ エンジン ] -> [資産プロファイルマネージャー ]を選択します。 編集のためにプロファイルをロックし、プロファイルの追加アイコンをクリックします。New Asset Profileダイアログで、 PlatformをANDROIDに設定し、OKをクリックします。 Texture:DownscaleLevelを1に設定し、[OK]をクリックします。
![](https://habrastorage.org/getpro/habr/post_images/3d8/856/004/3d8856004f25e98c4840ef1a59f1a073.jpg)
オブジェクトの自動変換のプロセスは、画面の下部にある緑色の進行線に沿って追跡できます。
ドロップダウンリストからAndroidプロファイルを選択します。 プロファイルの右側にあるアイコンを使用すると、選択したプロファイルのシーンを表示できます。 このアイコンを使用して切り替えて、違いを確認します。
![](https://habrastorage.org/getpro/habr/post_images/d7b/fb7/fd4/d7bfb7fd4625e4fd71aecb38ef92be0e.jpg)
変換が完了したら、[ ファイル]-> [エクスポート]-> [シーンのエクスポート]を選択し、 ターゲットファイル名が 「シーン\ mygame」に設定されていることを確認します。 [ アクティブプロファイルのエクスポート]をクリックします。 Scenesフォルダー内に「mygame.android.vscene」と「mygame.android.vscene.data」があることを確認します。
デバイスへのインストール
[ファイルサービス ]タブが表示されない場合は、 [表示] -> [パネル]- > [ファイルサービス ]で開き、パネルに添付します。[ ファイルサービス ]タブをクリックします。 [ データディレクトリ ]で、 [ 追加 ] をクリックし、プロジェクトフォルダーへのパスを追加します。
![](https://habrastorage.org/getpro/habr/post_images/b00/ad6/fc0/b00ad6fc058ae3dc7a76d116aa0c420f.jpg)
Androidデバイスを接続し、正しく接続されていることを確認してから、[ デバイスの準備 ] をクリックします。
デバイスでvSceneViewerを起動し、 mygameを選択します。 キャッシュされたファイルがないため、最初のダウンロードは次のダウンロードよりも数秒長くなります。 ゲームが開始され、ボールはデバイスを傾けることで制御されます。
アプリケーションのセットアップ
おそらく、デバイス上のボールの動きがvForgeよりもはるかに遅いことに気づいたでしょう。 [スクリプト]タブに移動し、Luaファイルの30〜31行目を変更します。 self.InputScaleX = 10 self.InputScaleY = 10
![](https://habrastorage.org/getpro/habr/post_images/bb7/7ab/49f/bb77ab49f09adaa7fec5907121ca6002.jpg)
ファイルを保存して、ゲームをデバイスに再度ダウンロードします。 アプリケーションはキャッシュからリロードされ、変更されたLuaファイルのみがファイルサーバーからダウンロードされます。 これで、ボールはより管理しやすくなります。
バックグラウンドミュージックの追加
Soundという新しいレイヤーを作成します。 Shape Creatorsタブから、オーディオオブジェクトをシーンにドラッグし、そのプロパティを設定します。ファイル名 | サウンド\ HeavyIndustrial.ogg |
Is3d | 偽 |
背景 | 本当 |
[ ゲームをプレイする]を選択し、音楽が聞こえることを確認します。 シーンを再エクスポートして、デバイスにリロードします。 音楽を聴く必要があります。
燃える樽
[ レイアウト]ドロップダウンリストから、[ パーティクルエディタのレイアウト ]を選択し、[ パーティクルエディタ ]タブを開きます。 [ 新しいパーティクルエフェクトの作成]アイコンアイコンをクリックし、[ テンプレートの選択 ]から[ 煙で火のトーチ]を選択します。![](https://habrastorage.org/getpro/habr/post_images/6db/075/479/6db075479e439edf24d5fa8cccd05cd7.jpg)
Objectsレイヤーを開き、新しく作成したエフェクトをシーンにドラッグします。 「 シェイプ」ウィンドウで、作成したエフェクトをバレルの1つにドラッグし、バレルの子にします。 エフェクトオブジェクトを右クリックして、 関連操作を選択- >親に合わせる
![](https://habrastorage.org/getpro/habr/post_images/0c4/779/e44/0c4779e44f9900adb956663813f1dc43.jpg)
移動ツールを使用して、エフェクトをバレルの下部にドラッグします。 [ プロパティ ]タブで、次を設定します。
ピッチ | -90 |
均一なスケーリング | 4 |
次に、 Particle Editorタブに戻り、3つのサブシステムのそれぞれについて、 PhysicsタブでZコンポーネントをインストールし、 Affects gravityがオンになっていることを確認します。
炎:炎 | Z | 1000 |
火:火 | Z | 1000 |
煙のシーケンス:濃い煙 | Z | 300 |
![](https://habrastorage.org/getpro/habr/post_images/715/aca/dd7/715acadd7dc83a438b3da48d2ce18bb4.jpg)
プレハブの作成
シェイプウィンドウで、エフェクトのあるバレルを右クリックし 、[ プレハブの作成 ]を選択し、 [ファイルの作成 ]ダイアログで名前-「フレーミングバレル」を選択します 。 [OK]をクリックし、次の[プロパティの編集]ダイアログで[OK]をクリックします 。 Shape Creatorsタブを選択し、 Prefabsフォルダーを開きます。 新しいプレハブがリストにあるはずです。 プレハブをシーンに数回ドラッグして、燃える樽で満たします。![](https://habrastorage.org/getpro/habr/post_images/b00/353/8b7/b003538b7d6e11624c02e531860a2ee2.jpg)
[ ゲームをプレイ]を選択し、結果を確認します。
シーンを再エクスポートして、デバイスにリロードします。