Unityで環境作って愛車動かしてみた
3Dゲームってどうやって作っているんだろうか?ということで試しにUnityで環境作成から物体移動までやってみました。そのメモ書き。Unityは個人使用は無料です。
こちらの本、
「24時間で学ぶUnity5 基本操作と開発のコツ」
を現在、読んでる最中です。この本24時間と謳っていることもあり、本にどこまでが1時間目、2時間目とか書いてあります。翻訳版であるため、日本語はところどころおかしいところもありますが、問題ない程度です。まだ11時間目までしか読んでませんがここまでのところ内容的には割と分かりやすいです。
まず、次のような流れで環境作成します。
○3Dオブジェクトとして平らな地形(terrain)を設置。サイズ調整。
↓
○高さの設定。本に載ってたのは2つの方法。
①グレーのモノクロ画像を先ほどの平らな地形の高さマップとしてインポートする方法。グレーの画像はデータ的に0から255(8bitの場合)で表せるマップなので、それを高さと読み替えています。
②マウスで筆のように高さ変更していく方法。(マウスでクリックすると、触っている部分の高さが変わります。変更量や筆サイズ、スムージングなど各種設定があります)
手動でマウスでやるとモコモコしてテンション上がります(; ・`д・´)
↓
○テクスチャ(絵)をインポートして貼る。複数テクスチャを貼って、透明度を部分的にマウスでドラッグしながら変えられ、各テクスチャの影響度を変更することができます。
↓
○木モデルの設置。木のモデルを選んでインポートし、マウス(筆)でドラッグして設置していきます。下写真のように筆(青い部分)の広さ内にランダムに木が配置されます。高さなども最大、最小、密度など各種設定できます。
わさわさしてます
↓
○草(ビルボード)の設置。草も木と同じように設置します。木は設定距離以内であれば3Dモデル扱いみたいですが、草はビルボードと言ってカメラ方向を見ている2D画像だそうです。風でどの程度しなるかなど設定します。
↓
○ライト、スカイボックス(空の映像)、フォグ(霧)、レンズフレア(カメラが明るい光源を見た時の現象)など設定。
環境完成\(๑^Δ^๑)ノ
なんか異世界ですね(; ・`д・´)
せっかくなので、今まで作った3Dモデル
Blenderで3Dキャラモデル作ってみた - ふぎのモノづくりにっき、
3DF Zephyr Freeを使って愛車を3Dモデル化してみた - ふぎのモノづくりにっき
を配置。
①blenderから3Dモデルを導入
.blendファイルとテクスチャファイル(.png, .jpgなど)をunityフォルダにインポート。詳細は Unity - マニュアル: Blender からオブジェクトをインポート にあります。
↓
.blendファイルをprojectビューからドラッグ&ドロップして設置。
この状態ではテクスチャは貼られていません。
↓
先ほどインポートしたテクスチャファイルを一つづつ上写真の3Dモデル該当部にドラッグ&ドロップしていきます。(例:目をモデル上でクリックして選択→目のpngファイルをドラッグして目の部分まで持ってく→ドロップ→他のパーツも一つづつ・・・)
高木さん完成(*´ω`*)
②.objファイルの3Dモデルを導入
.objとテクスチャファイルを一緒にUnityフォルダにドラッグ&ドロップしたら最初から自動でテクスチャ貼られてる状態になっていました。上の高木さんでは、blenderでobj化して同じことをしても自動でならなかったので、原因はわかりませんが、取りあえず、一緒にファイル突っ込んでみて、テクスチャ貼られてなかったら、後からドラッグ&ドロップすればよいと思います。
せっかくなので、愛車を動かしてみました!
UnityではC#もしくはJavaScriptのスクリプトをオブジェクトに設定することができます。
下のコードをアクセラオブジェクトに設置。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.Translate(0f, -0.2f, 0f);
transform.Rotate(0f, 0f, 2f);
}
}
実際、追記したのは、毎フレーム更新される部分を表すUpdate()部の中に回転運動の2行だけですw
この本を見ている限り、Unityでは各オブジェクトに設定が変えられるものが大量にあるのですが、C#上で変更可能なものがかなりたくさんあるみたいですね。
キャラクターコントローラーをインポートして、その中のFPSContollerでFPSゲームのように環境内を動けるようにし、実行。
おおーーーー(; ・`д・´)
動いた(*´ω`*)