ゲームを作るその3

今回は木を生やしていきます。

f:id:kikikikina:20171017050709p:plain

TerrainのInspectorののEdit Treesから

f:id:kikikikina:20171017050840p:plain

Addで、今回はBroadLeaf_Desktopを追加

f:id:kikikikina:20171017051137p:plain

Mass Place Treesを選択して

f:id:kikikikina:20171017051322p:plain

木を生やします

f:id:kikikikina:20171017051432p:plain

このようになりました

f:id:kikikikina:20171017051628p:plain

同じようにここから草も生成できます

 

 

 

ゲームを作るその2

今回はアイテムの取得をやっていきます。(取得と言いつつもプレイヤーが触れたら消えるだけですが...)

 

前回作ったゲームに追加していきます。

 

まず3D ObjectでPrefabを作ります。

次に当たり判定を追加します。今回はMonobehaviourのAPIリファレンスのOnTriggerEnterを使用します。判定方式をTriggerにすると、接触判定もTriggerに設定する必要があります。

f:id:kikikikina:20171002214427p:plain

Is Triggerにチェックを入れます。

 

今回はScriptを書きます。

f:id:kikikikina:20171002215111p:plain

Playerに当たったgameObjectは削除します。

次にThirdPersonController(イーサン君)のTagをPlayerに変更します。

f:id:kikikikina:20171002215426p:plain

これでイーサン君に触れたアイテムが消えるようになりました。

あとはアイテムを複数配置。

www.youtube.com

 こんな感じになりました。

 

はてなブログって直接動画を投稿できないんですね...

 

ゲームを作るその1

さて、宣言通り基礎からやっていきましょう。

 

今回実装しようと思っていたのは

・キャラの移動

・キャラのジャンプ

・TPS視点

の3つです。

 

まずは地面を作ります。

GameObject > 3D Object > Terrainを選択

大きさは200×200に設定しました。f:id:kikikikina:20170925174120p:plain

次にそれっぽいテクスチャをつけます。

Assets > Import PackageからEnvironmentを選択してインポート

TerrainのインスペクターのPaint Textureからテクスチャーを設定します

f:id:kikikikina:20170925180933p:plain

f:id:kikikikina:20170925180948p:plain

草の地面ができました。

 

次にAssets > Import PackageからCharactersを選択してインポートします。

Standard Assets/Characters/ThirdPersonCharacter/Prehabs/の中のThirdPersonControllerを配置します。

f:id:kikikikina:20170925181504p:plain

名前はイーサン君です。

この時点で再生すると移動、ジャンプはすでにできるようになっています。

 

最後にAssets > Import PackageからCamerasを選択しインポート

Standard Assets/Cameras/PrefabsのMultipurposeCameraRigをシーンに配置

MultipurposeCameraRigのインスペクターにあるAuto CamのTargetにThirdPersonController(イーサン君)を設定します。

これでTPS視点の完成です。

f:id:kikikikina:20170925183159p:plain

ゲーム作らなきゃ...

最近、プログラムには触っていましたが、全然ゲームを作っていませんでした。

このままじゃ周りに置いていていかれてしまう!

 

...ということでゲームを作っていきたいと思います。

 

最初からガッツリ作るのではなく、ゲームに必要になる要素を実装することから始めていきたいと思います。

内容としては

・キャラクターの移動

・ジャンプ

・アイテムの取得

FPS視点 TPS視点

・ステージの作成

このあたりから作っていこうと思います。

 

使用していくソフトは Unity です。

 

実際に制作したゲーム(?)の画面を紹介するのは来週からにします。

 

ご期待ください!

ショートカットキーが大事

blenderをさわり始めて1ヶ月ちょっと経ちました。最近は簡単なモデルなら作れるようになりました。しかしその簡単なモデルを作るのにもまだ時間がかかってしまいます。

 

1つのモデルを作る時でもやることは1つではありません。ポリゴンを分割したり、拡大・縮小したり、視点を移動したり、間違いを修正したり… これを全てカチカチとクリックで解決しようとしても、全て覚えているならともかくまず探すのが面倒です。そこで最近は特にショートカットキーを意識するようになりました。

 

今はまだ間違えて他のメニューを開いたりしていますが、慣れてくればかなりの効率アップが出来ると思います。

 

ショートカットキーは偉大です。これはblender以外でも言えることで、Ctrl+CやCtrl+Vを覚えておくだけでも普段役に立ちますし、プログラミングをするときも、ビルドや定義への移動がマウス操作よりもはやくできます。

 

作業効率を上げたいからショートカットキーを意識して使おう。というのが最近の方針です。

Blenderに触れようかな

最近「Unityで神になる本。」という参考書を購入しました。まだチラッと読んだだけですが、3Dモデリングについて触れていました。1人でゲームを作ってみようと思っているので3Dモデリングは必須です。

 

Blender は3DCGアニメーションを作成するための総合環境アプリケーションで、無料です。しかし無料とは思えないほど便利です。例として以下の機能があります。

 

・Meshポリゴンモデリング

・質感付け

 レイトレースによる鏡面反射、屈折

 毛髪表現

テクスチャマッピング

・UVマッピング

・簡易的な画像編集

・ライティング

・アニメーション

 衝突判定を含む物理演算

 群れを表現する機能を備えたパーティ来る機能

 剛体物理演算

 軟体物理演算

・コンポジット、動画編集

・UI

・データ管理

 

などなどですが他にもたくさんあります。

 

公式サイト↓

blender.jp

 

ダウンロード↓

www.blender.org

Visual C++でdrand48()

少し前にdrand48()を使用する場面に遭遇しました。drand48()は0から1の疑似乱数を発生させます。作業環境はVisual Studio 2017 C++でした。

 

さて、実行してみようと思った矢先です。エラーが消えません。調べてみたらVisual Studioの標準関数ではないらしい...。関連するsrand48()も標準関数ではないそうです。(srand48()はdrand48()を使う前に、呼び出したdrand48が正しく動作するために初期設定を行う関数) この2つは UNIX系OSが用意している関数だそうです。

 

関数がないなら作ればいいじゃないか!ということで作ってみました。

f:id:kikikikina:20170518212152p:plain

なんとこれだけ。簡単ですね。rand()で疑似乱数を生成し、それをRAND_MAXで割った値を返しています。本当に0から1のの範囲でしょうか?いくつか表示してみましょう。

f:id:kikikikina:20170518212610p:plain

drand48()の値を20回表示します。

f:id:kikikikina:20170518213053p:plain

0から1の範囲ですね。これで完成です。

 

ソースはここに置いておきますね。

https://github.com/kikikikina/drand48/blob/master/main.cpp