tanaka's Programming Memo

プログラミングについてのメモ。

2D Game KitのObject Pooling

2D Game Kitは、プログラムコードを書かなくても結構な横スクロールアクションゲームが作れるUnity公式の素敵アセットです。ゲーム開発に役立つ機能が色々と実装されているのですが、パーティクルやゲームオブジェクトをプールして管理できるVFXController とObject Pooling機能は、スマホゲームなどを作る時にとても有用そうです。公式ドキュメントのObject Poolingを読んだ時のメモ(ほぼ訳)です。目次は私が適当に付けたもので原文にはありません。

(2018/3/5 ObjectPoolとPoolObjectの説明順が直感的ではなかったので、順番を入れ替えました)

目次

Object Poolingのための2つのクラス

2D Game Kitに実装されている拡張可能なObject Poolingシステムを使うには、2つのクラスを作成する必要があります。一つはObjectPoolクラスを継承したクラス、もう一つはPoolObjectクラスを継承したクラスです。ObjectPoolを継承したクラスはプールそのもので、PoolObjectを継承したクラスはプール内の各プレハブごとのラッパーです。

ObjectPoolPoolObjectの宣言

2つのクラスはGenericタイプで関連付けます。ObjectPoolPoolObjectの2つのクラスを型として持ったGenericタイプで宣言する必要があります。例えば以下のような宣言になります。

public class SpaceshipPool: ObjectPool<SpaceshipPool, Spaceship>
{

…

}

public class Spaceship: PoolObject<SpaceshipPool, Spaceship>
{

…

}

これにより、プールは自らが保持するオブジェクトのタイプを知ることができて、オブジェクトは自分がどのタイプのプールに属するかを知ることができます。

3つ目のパラメーター

これらのクラスは3つ目のGenericタイプをオプションとして定義することができます。このオプションは、PoolObjectがプールから取得される時に呼ばれるWakeUp関数に渡したいパラメーターがある場合に使えます。例えばスペースシップを登場させる時に燃料がどれぐらいあるかをfloatの値で指定する場合、以下のように定義します。

public class SpaceshipPool: ObjectPool<SpaceshipPool, Spaceship, float>
{

…

}

public class Spaceship: PoolObject<SpaceshipPool, Spaceship, float>
{

…

}

ObjectPool

PoolObject全体を管理するプールです。

ObjectPoolが持つフィールド

ObjectPoolMonoBehaviourであり、GameObjectにアタッチすることができます。デフォルトでは以下のフィールドを持ちます。

  • Prefab: プールを生成する時に複数回Instantiateされるプレハブへの参照です
  • InitialPoolCount: Startメソッドで最初に生成しておくPoolObjectの数です
  • Pool: PoolObjectのリストです

ObjectPoolが持つ関数

ObjectPoolが持っている関数です。

  • Start: 最初にプールが作成される時に呼び出されます。もしObjectPool内にStart関数を実装していた場合、ベースクラスのStartメソッドが隠されるので、必要に応じて呼び出す必要があることを覚えておいてください
  • CreateNewPoolObject: PoolObjectが生成される時に呼び出されて、SetReferencesを呼び出したら、関数をSleepします。この関数はvirtualではないのでオーバーライドはできませんが、protectedなので継承したクラスから呼び出すことができます
  • Pop: プールからPoolObjectを取得する時に呼び出されます。デフォルトでは、プールからinPoolフラグがtrueになっている最初のオブジェクトを見つけて、それを返します。inPoolフラグがtrueのものが一つも見つからなかった場合は、新しいオブジェクトを生成して返します。この関数は、取り出したPoolObjectWakeUp関数を呼び出します。この関数はvirtualなので、オーバーライドできます
  • Push: この関数は、PoolObjectをプールに戻す時に呼ばれます。デフォルトでは、inPoolフラグをtrueにして、PoolObjectが持つSleepを呼び出すだけです。この関数はvirtualなのでオーバーライドできます

詳しい利用方法については、以降のBulletPoolのドキュメントとスクリプトを見てください。

PoolObject

ゲームオブジェクトと一対一で対応するオブジェクトで、これのリストがObjectPoolで管理されます。

PoolObjectが持つフィールド

デフォルトでは、PoolObjectは以下のフィールドを持っています。

  • inPool: PoolObjectがプールにあるのか、利用されているかを表すbool値です
  • instance: このPoolObjectをラップしたプレハブからInstantiateされたゲームオブジェクトのインスタンスです
  • objectPool: このPoolObjectが所属するオブジェクトプールです。このクラスと同じObjectPoolのタイプを持ちます

PoolObjectが持つvirtual関数

PoolObjectは以下のVirtual関数を持ちます。

  • SetReferences: この関数はPoolObjectが作成された時に一度だけ呼び出されます。これは参照をキャッシュするためのもので、PoolObjectが利用状態になる度に毎回実行する必要がない1回だけ初期化すればよい処理のために利用します
  • WakeUp: PoolObjectがプールから取り出されて、利用状態になるタイミングで毎回呼ばれます。PoolObjectが利用可能になるタイミングで毎回行う必要がある初期化処理のための関数です。クラス定義で3つ目のGenericパラメーターが設定されていた場合、WakeUp関数に指定した型の引数を渡すことができます
  • Sleep: 利用しなくなるPoolObjectをプールに戻す際に毎回呼ばれる関数です。PoolObjectの利用後に毎回行う必要がある解放処理などのために使います
  • ReturnToPool: デフォルトではPoolObjectをプールに返すだけですが、追加の処理をしたい場合はこの関数をオーバーライドします

BulletPoolの解説

概要

BulletPool MonoVehaviourはBullet(=弾)のオブジェクトのプールで、弾プレハブのインスタンスを管理するものです。BulletPoolは主人公のEllenの両方で利用しますが、それぞれで少し違うものを使います。Ellen用のBulletPool MonoBehaviourは、親のゲームオブジェクトのPrefab欄に弾のプレハブを設定することでアタッチされます。敵用のBullet PoolEnemyBehaviourクラスで使われます。GetObjectPoolというstaticな関数を使って、インスタンスの生成をせずにBulletPoolが使えます。

BulletPoolが持つフィールド

BulletPoolクラスは以下のフィールドを持ちます。

  • Prefab: 利用したい弾のプレハブを設定します
  • Initial Pool Count: 開始時にいくつの弾を生成しておくかを設定します。同時に撃てる最大の弾数を設定しておきます。この数より多い弾を発射しようとすると、実行時に弾が生成されます
  • Pool: プール内のBulletObjectです。Inspectorには表示されません

BulletPoolが持つ関数

BulletPoolクラスは以下の関数を持ちます。

  • Pop: プールからBulletObjectを取り出します
  • Push: BulletObjectをプールに戻す時に呼びます
  • GetObjectPool: 指定したPrefabが設定されているBulletPoolを見つけるstatic関数です

BulletObjectが持つフィールド

プールから取得した弾は、BulletObjectのフォームとして渡されます。BulletObjectクラスは以下のフィールドを持ちます。

BulletObjectが持つ関数

BulletObjectは以下の関数を持ちます。

  • WakeUp: Pop関数が呼ばれた時にBulletPoolから呼ばれます
  • Sleep: Push関数が呼ばれた時にBulletPoolから呼ばれます
  • ReturnToPool: 弾の利用を終了する時に呼ぶことになっている関数です。この関数はBulletPoolPush関数を呼び出して、Sleep関数を呼びます

まとめ

公式ドキュメントはこんな感じでした。詳しくは実際のコードを見てください、という感じです。

シーンの開始時に必要なインスタンスをまとめて生成して、その後はそのインスタンスを使い回してくれるので、メモリーの確保と解放を繰り返すことによる速度低下や、メモリーの断片化を避けることが期待できます。予定数をオーバーした場合にも対応していて、超過した時はその時点でInstantiateしてくれる柔軟性を持っています。

WebGLスマホでは、オブジェクトの初回描画時に処理落ちすることがあります。それを避けるためには、シーンの開始時に、必要なオブジェクトを一度画面に描画するウォーミングアップ処理をするとよいようです( 【Unity】パフォーマンスチューニング - KAYAC engineers' blog )。デフォルトのままだとこの辺の対処はありませんが、Start関数に自前でコードを追加すれば対応できそうです。

再利用するオブジェクトは、動作速度を安定させるためには把握しておきたい要素なので、予めObject Poolingを導入しておけば、あとで膨大なプロジェクトの中から再利用しているオブジェクトを探し出す手間がなくなるので楽ができそうです。

参考URL

Projenyにカスタムのパッケージを登録する

Unity用のパッケージマネージャーProjeny、使い続けています。時々怪しい動きをしますがやはり便利です。

Asset Storeからダウンロードしたパッケージは自動的に読み込めますが、UnityちゃんやPost Processing Stack V2など、Asset Storeで配布されていない有用なパッケージもあります。そのようなパッケージをProjenyで扱う方法です。

目次

方法

とても簡単で、設定ファイルProjeny.yaml内で、ReleaseSources属性で設定したフォルダーに利用したいunitypackageファイルを入れておくだけです。

ファイル名はパッケージ名になりますが、@に続けてバージョン番号をつけると、バージョンを表示することができます。例として、"制服ユニティちゃん"のVer1.0を登録してみます。

設定の確認

Projeny.yamlは、ユーザーフォルダー直下と、プロジェクトフォルダーのものが読み込まれます。両方にProjeny.yamlがあった場合、一方にしかない設定はどちらのファイルのものも有効になります。両方に同じ設定項目が書かれていて、内容が違う場合は、2018/2/12時点ではプロジェクトフォルダーの方が採用されるようです。

まずは使いたいプロジェクトフォルダー内のProjeny.yaml、次にユーザーフォルダー直下のProjeny.yamlを開いて、以下のような設定を確認します。

ReleaseSources:
    - LocalFolder:
        Path: 'D:\Projeny\CustomPackages'

上記の場合、D:\Projeny\CustomPackagesフォルダーが、カスタムのパッケージファイルを入れておくフォルダーを表します。上記のような設定がない場合は、こちらを参考に、ユーザーフォルダー直下か、プロジェクトフォルダー下のProjeny.yamlファイルに設定を加えてください。

ファイルを用意する

ユニティちゃんの公式ページから、使いたいパッケージをダウンロードします。

  • UNITY-CHAN! OFFICIAL WEBSITEを開いて、"DATA DOWNLOAD"をクリックします
  • 規約を確認したら、画面下の"ユニティちゃんライセンスに同意しました"にチェックを入れて、"データをダウンロードする"ボタンをクリックします
  • 利用したいパッケージをダウンロードしてください。以降は"制服ユニティちゃん"を例に紹介します

f:id:am1tanaka:20180212010614p:plain

  • ダウンロードしたら、ファイル名を01_kohaku_B@1.0.unitypackageに変更します

f:id:am1tanaka:20180212010830p:plain

  • 名前を変更したファイルを、"ReleasePackages"設定のフォルダーに移動します。上記の例では、D:\Projeny\CustomPackagesフォルダーですが、ご自身の環境に合わせて変更してください

f:id:am1tanaka:20180212011010p:plain

以上で準備完了です。Projenyから利用できるようになりました。

Projenyで利用する

利用方法です。

  • コマンドプロンプトで、Projenyのプロジェクトフォルダーからprj -ouを実行するか、あるいはUnityを起動して、プロジェクト名-Windowsフォルダーを開いて、ProjenyのUnity Projectを開きます
  • "Projeny"メニューから"Package Manager..."を選択します

f:id:am1tanaka:20180212011326p:plain

  • パッケージマネージャーが起動したら、左三角ボタンを2回クリックして、Release画面を表示します

f:id:am1tanaka:20180212011547p:plain

  • Asset Storeのパッケージと一緒に、"01_kohaku_B"が表示されているのが確認できます。ファイル名で指定したバージョンが、v1.0と表示されていることも確認できます

利用するために、パッケージとして展開します。

  • Packages欄を、共有用の"SharedUnityPackagesDir"に変更してから、利用したい"01_kohaku_B v1.0"をドラッグして、Packages欄の一覧にドロップします

f:id:am1tanaka:20180212011846p:plain

  • 右三角ボタンを一回クリックして、”Project"設定を表示します
  • Packages欄の"UnityChanTPK"をドラッグして、Projectの"Plugins Folder"欄にドロップします(調整や改造など、変更を頻繁に行うような場合は、"Plugins Folder"よりも"Assets Folder"欄)

f:id:am1tanaka:20180212012341p:plain

  • "Update Directories"ボタンをクリックします

f:id:am1tanaka:20180212012429p:plain

以上で、加えたパッケージがUnityプロジェクトに反映されて、"Project"ビューに表示されるようになります。

f:id:am1tanaka:20180212012544p:plain

"Prefabs"フォルダーから"01_kohaku_B"を"Hierarchy"ビューにドラッグ&ドロップすれば、制服ユニティちゃんを登場させることができます。

f:id:am1tanaka:20180212014036p:plain

まとめ

ProjenyのReleaseSourcesで指定したフォルダーに、unitypackageファイルを配置することで、簡単にカスタムパッケージを複数のプロジェクトで利用できるようになります。

また、ファイル名に@を付けてバージョン番号を書いておくことで、異なるバージョンを保持することができます。プロジェクトにどのバージョンを読み込んでいたかが簡単に管理できるようになります。また、最新版に変更したら動かなくなった場合など、古いバージョンに戻すことも可能になります。

unitypackage形式になっていない場合は、Unityの通常のプロジェクトで開いてから、Export Packagesで必要なアセットを出力すれば使えるようになります。

よく使うパッケージを登録しておけば、毎回ダウンロードする必要がなくなるのでとても便利です。

参考URL

ライセンス

f:id:am1tanaka:20180212013017p:plain

この記事中のユニティちゃんは、ユニティちゃんライセンス条項の元に提供されています。

ツクモG-GEAR N1570K-710TにHDDを取り付けたよ報告

開発する機会が増えてきて、これまで使っていたオフィスの講義の採点用のノートPCでは限界になってきたので、開発用PCを新調しました。選んだのはツクモさんのG-GEAR N1570K-710Tです。

www.tsukumo.co.jp

これにHDDを取り付けたので、手順をまとめておきます。

目次

機種の選定

  • 仮想PCが使いたいのでOSはWindows10 Pro
  • CPUはi7
  • メインメモリは16GByte
  • ストレージはOSやアプリのインストール用のSSDを250GByte程度と、データ保存用のHDDを1Tぐらい欲しい
  • ビデオカードはいざという時にHTC VIVEを接続できるGeForce GTX1060以上

以上を満たすものを探して辿り着いたのが、HPのOMEN by HP 15 製品詳細 - ノートパソコン | 日本HPと、今回購入したG-GEARでした。価格的にはHPの方が安かったのですが、以前使っていたHPのPCが3年間でマザーボードが壊れてしまったのでちょっと他を試したかったのと、専門学校のVRセットをツクモさんで買っていたことと、ツクモさんのBTOの評判がよく、長く付き合うつもりのPCだし、ここは安心のツクモさんかなと気持ちが傾いていきました。

しかし、一つ問題が。ベース機種として最適なこのモデルですが、なぜかカスタマイズできないのです...。ストレージはSSDの500GByteのみ。SSDのみというのはちょっと嫌だし、500Gでは心もとない。こういう部分に関しては、HPが明らかに優れいています。Webサイトでの機種の検索機能もずば抜けて探しやすかったです。もし、前の機種が長く生きながらえていたら、今回もHPだったのですが壊れちゃったから。

キーボードとかの具合を確認したかったこともあり、池袋のツクモさんに行って確認したところ、どうやらHDDは後付けできるようでした。ということで、HDDは増設するということでこの機種に決めました!

※店頭に頼もうが、自分でやろうが、開けてしまうと保証が効かなくなります!自己責任になりますで、実施の場合は十分にお覚悟を。

必要なもの

増設に必要なのは、2.5インチの内蔵HDDと、2.5インチ用のネジと、ネジを回すための精密ドライバーのプラスです。HDDは店員さんのお勧めで以下のものを購入しました。

パッケージはこんな感じです。

f:id:am1tanaka:20180211082211p:plain

2.5インチドライブの取り付け用に以下のようなネジが必要です。

アイネックス 超低頭ミリネジ黒 PB-033

アイネックス 超低頭ミリネジ黒 PB-033

僕は店員さんが間違えて選んだ3.5インチのネジを買ってしまったので故あって、廃棄したノートPCから取り出したネジを使いました。使わなくなったノートPCがあったら、そこから確保できるかもしれません。

HDDの増設前に

前述しましたが、開けてしまうと保証が効かなくなります。いきなりHDDを付けて、初期不良があったら目も当てられません。まずは何もつけずにPCを起動して、メモリーチェックをしたり、一通り操作をしたりして、動作不良がないかを確認しました。

まずは基本構成に間違いがないかを確認しました。

  • スタートメニューを右クリックして、"システム"を選択します

f:id:am1tanaka:20180211220658p:plain

  • "バージョン情報"を選択して、CPU、メインメモリーサイズ、システムの種類が正しいか確認します

f:id:am1tanaka:20180211220925p:plain

  • "ストレージ"を選択して、SSDのサイズが合っているか確認します

f:id:am1tanaka:20180211221144p:plain

あとは念のため、メモリーチェックをしておきました。

  • スタートメニューから、"Windows管理ツール"->"Windowsメモリ診断"を選択します

f:id:am1tanaka:20180211082539p:plain

  • "今すぐ再起動して問題の有無を確認する"をクリックして開始します

f:id:am1tanaka:20180211082639p:plain

メモリ診断が完了するのを待って、メインメモリーに異常がなければひとまず大丈夫そうかな、ということで、増設を始めます。

裏蓋を開ける

  • PCをシャットダウンして、電源アダプターを外します
  • その他、接続しているものがあれば外します
  • ディスプレイを閉じて、裏返します
  • 裏はこんな感じです

f:id:am1tanaka:20180211222210j:plain

  • 一見、以下のような切込みがあるように見えるのですが、これは飾りでした^^; 全面が開きます

f:id:am1tanaka:20180211222302j:plain

  • ネジをすべて外します

f:id:am1tanaka:20180211223246j:plain

  • 奥の角に、指を入れるような感じで手で広げたらパカっと少し隙間ができました

f:id:am1tanaka:20180211223507j:plain

  • そこから、指を入れていく感じで少しずつ隙間を広げていくと、パチッパチッという感じで軽い手応えで裏蓋が外れます

f:id:am1tanaka:20180211223811j:plain

  • 左下の部分がHDDをマウントする部分です。矢印のあたりにHDDを固定する金具がネジで取り付けられているので外します

f:id:am1tanaka:20180211224256j:plain

  • HDDを触る前に、静電気をなくしておきたいので、放電できる金具などを触っておきます。この後は頻繁に静電気対策をしておくとよいでしょう
  • 購入した取り付けネジを使って、外した金具にHDDを固定します。矢印で指したあたりの4箇所でネジ止めします

f:id:am1tanaka:20180211224454j:plain

  • 赤枠で示したあたりのソケットに、HDDの端子を差し込んだら、固定金具をもとの通りにねじ止めします

f:id:am1tanaka:20180211224753j:plain

以上で、HDDの取り付けは完了です。裏蓋を元に戻したら、ネジ止めします。

HDDの初期化

以上で取り付けは完了ですが、フォーマットをしないとHDDが使えませんので、フォーマットをします。

  • PCを起動します
  • スタートメニューを右クリックして、"コンピューターの管理"を選択します

f:id:am1tanaka:20180211225410p:plain

  • "ディスクの管理"を選択します

f:id:am1tanaka:20180211230324p:plain

  • 以下のようなダイアログが表示されたら、ディスク1が選択されていて、データディスクとして使いたいので"GPT(GUIDパーティションテーブル)になっていることを確認して、"OK"をクリックします

f:id:am1tanaka:20180211225619p:plain

  • 未割り当ての斜線部分を右クリックして、"新しいシンプルボリューム"を選択します

f:id:am1tanaka:20180211230416p:plain

  • 以下、変更点がなければそのまま"次へ"を押していきます

f:id:am1tanaka:20180211225852p:plain

f:id:am1tanaka:20180211225914p:plain

f:id:am1tanaka:20180211225933p:plain

  • ドライブ名はDataに変更したかったので、変更した上で"次へ"に進みました

f:id:am1tanaka:20180211225941p:plain

  • 最後、問題なければ"完了"をクリックすると、フォーマットが実行されます

f:id:am1tanaka:20180211230012p:plain

フォーマットが完了したら、以下のように1TのDドライブが追加されたことが確認できます。

f:id:am1tanaka:20180211230050p:plain

まとめ

裏蓋をどうやって開けるかを試行錯誤したのと、HDDが最初見えなかった時はドキドキしましたが、無事にHDDを追加して、SSD+HDDの構成に出来ました。

変更の少ないOSやアプリケーションはSSDにインストールして、プロジェクト類はHDDで運用することにします。システムだけで500Gあれば当面は大丈夫かなと思います。このモデルがカスタマイズできればよかったんですけどねぇ...。その点を除けば、画面は奇麗だし、キビキビ動くし、とてもよいマシンです!

最後に改めて。これをやってしまうと原則として保証が効かなくなります! 何かあった場合はすべて自己責任になりますので、やる場合は、覚悟の上で取り組んでください。

参考URL

Sketchfabでモデルを入手してMAYAで開く

Sketchfabは、3Dモデルを公開したり、共有したりして、PC、モバイル、XR環境などで見ることができるWebサービスです。クリエイティブコモンズのライセンスでダウンロードができるモデルも多数あるので、アセット探しに役立ちそうでしたので、コンテンツの探し方と、ダウンロードしたモデルをMAYAで開くまでをやってみました。

記事では以下のモデルを使いました。ライセンスはCreative Commons — Attribution 4.0 International — CC BY 4.0です。

sketchfab.com

目次

Sketchfabからモデルを入手

Sketchfabで、ダウンロード可能なモデルを探しましょう。

f:id:am1tanaka:20180203215140p:plain

  • ユーザーIDとパスワードを設定して、Sketchfabに登録するか、FacebookGoogleアカウント、Twitterアカウントがあれば、それと連携して使うこともできます

f:id:am1tanaka:20180203211249p:plain

  • EXPLORERメニューにマウスカーソルを合わせると、絞り込みのためのメニューが表示されます

f:id:am1tanaka:20180203215528p:plain

  • 探したいモデルの種類があれば選びます

f:id:am1tanaka:20180203215756p:plain

  • Filterをクリックします

f:id:am1tanaka:20180203215949p:plain

  • ダウンロードできるモデルを探したいので、Downloadableにチェックを入れます。また、最近の一週間で公開されたモデルのみの表示になっているので、All timeをクリックして、全期間にするとたくさんのモデルから選べます

f:id:am1tanaka:20180203220108p:plain

  • フィルターを設定したら、ウィンドウの余白部分をクリックして、フィルターを閉じます
  • ダウンロード可能なモデルが表示されるので、使いたいモデルを探します。ある程度スクロールさせるとLOAD MOREボタンが表示されます。押すと、さらに候補が表示されます

f:id:am1tanaka:20180203220716p:plain

  • 使いたいモデルが見つかったらクリックします

f:id:am1tanaka:20180203220920p:plain

  • モデルをドラッグして動かせます

f:id:am1tanaka:20180203221028p:plain

  • Model informationをクリックすると、モデルの情報を確認できます

f:id:am1tanaka:20180203221418p:plain

  • 情報の概要は以下の通りです
    • License モデルの利用規約クリエイティブコモンズ(CC)の場合、著作者表示を行えば、いろいろな用途で利用できます。詳しくは、リンク先を辿ってください
    • Source format モデルのフォーマットです。この例はdaeです。fbxなど、利用可能なフォーマットかを確認します
    • Vertices 頂点数です。この例は7.6kとあるので、7千600頂点ということです
    • INSPECT THE MODELボタンをクリックすると、ビュアー部分にメニューが表示されます。エフェクトを解除したり、ワイヤー表示したりできます

f:id:am1tanaka:20180203222038p:plain

  • モデルを使うことを決めたら、Downloadをクリックします

f:id:am1tanaka:20180203222136p:plain

  • ORIGINAL FORMATの方のDOWNLOADをクリックします

f:id:am1tanaka:20180203222248p:plain

  • ダウンロードが完了するのを待ちます。ダウンロードが完了したら、ファイルを展開してください

f:id:am1tanaka:20180203222609p:plain

  • 展開するとsourcetextureフォルダーができます。sourceフォルダーにモデルデータがあります
  • sourceフォルダーの中にzipファイルがあった場合は、さらに展開してください。ここで展開されたデータをMAYAなどで開くことができます

f:id:am1tanaka:20180203225440p:plain

MAYAで開く

サンプルデータを入手できたので、MAYAで開きます。ここでは、MAYA2017での操作を示します。

  • ウィンドウメニューから、設定/プリファレンス -> プリファレンスを選択します

f:id:am1tanaka:20180203225843p:plain

  • 設定を選んだら、以下を設定します
    • リニアを"メートル"
    • アニメーションを作る場合は、再生する環境に応じた時間を設定します。Unityなどのゲームで利用するアニメーションの場合は"NTSCフィールド(60fps)"にするとデフォルトのまま使えると思います
  • 以上設定したら"保存"ボタンをクリックします

f:id:am1tanaka:20180203230035p:plain

  • ファイルメニューから、読み込みを選択します

f:id:am1tanaka:20180203225613p:plain

  • 先ほど展開したsourceフォルダーを開いて、モデルデータを開きます(モデルが開けない場合はこちらを参照してください)

f:id:am1tanaka:20180203230225p:plain

  • テクスチャーを有効にすると、色が着きます

f:id:am1tanaka:20180203231401p:plain

以上で完了です。あとは、必要に応じてモデルを調整したり、ボーンを入れてスキニングしたり、アニメーションを作ります。

改変可能なライセンスかはご確認ください。

作成したモデルをUnityに持っていく手順はこちらにまとめてあります。

まとめ

Sketchfabにはたくさんのモデルが公開されています。ダウンロードできなくても、Webページ上で頂点数やエフェクトの確認ができて、クオリティの高い作品がどのように作られているかを知る手掛かりになると思います。

改変禁止のライセンスでも、公開せずに個人的に利用することは問題ありません。自習の参考のために、気に入ったモデルを色々と改造してみたり、お手本にするとよいでしょう。

また、「MAYA Sketchfab」などで検索すれば、MAYAで作成した自作品を公開する方法が分かります。作品の発表の場所としてもご活用ください。

FBXやDAEファイルが開けない場合

fbxmaya.mllが無効になっていると、FBXファイルやDAEファイルが読めないらしいです。以下で直るようです。

  • ウィンドウメニューから、設定/プリファレンス -> プラグイン マネージャを開きます

f:id:am1tanaka:20180203230740p:plain

  • mayafbx.mll欄のロードと自動ロードにチェックを入れます

f:id:am1tanaka:20180203230748p:plain

チェックを入れたら閉じます。

ライセンス

MAYAのマテリアルやテクスチャーをUnityに読み込む

(元の記事のSketchfabの部分はこちらに分割しました。 2018/2/4)

Unity2017.2以降から、FBXにembedしたMAYAのマテリアルやテクスチャをそのまま読み込めるようになったということでやってみました。

モデルは、Sketchfabで見つけた以下のキャラクターです。ライセンスはCreative Commons — Attribution 4.0 International — CC BY 4.0です。

sketchfab.com

情報ソースはAREA JAPANさんの以下のウェビナーです。

youtu.be

目次

モデルをMAYAに読み込む

MAYAを起動したら、まずは単位を合わせておきます。

  • ウィンドウメニューから、設定/プリファレンス -> プリファレンスを選択します

f:id:am1tanaka:20180203225843p:plain

  • 設定を選んだら、以下を設定します
    • リニアを"メートル"
    • アニメーションを作成する場合は、時間を"NTSCフィールド(60fps)"にしておくとよいかと思います(環境に合わせて調整してください)
  • 以上設定したら"保存"ボタンをクリックします

f:id:am1tanaka:20180203230035p:plain

以上設定したら、Unityに読み込みたいモデルをMAYAで開いてください。手元に使えるデータがない場合は、こちらの記事に、Sketchfabからモデルを探してMAYAに読み込む手順をまとめてあります。

FBXに出力する

MAYAでFBXファイルを作成します。FBXは、モーションキャプチャーのデータを記録するために作られたフォーマットで、モデルデータの他、アニメーションやカメラ、ライトの情報などを含めることができます。多くのグラフィックツールやゲームエンジンが対応している汎用的なフォーマットです。

  • ファイルメニューから、すべてを書き出しを選びます(一部のオブジェクトだけ出力したい場合は、書き出したいオブジェクトを選択してから、選択項目の書き出しを選びます)

f:id:am1tanaka:20180203231714p:plain

  • ファイルの種類をFBX exportにします

f:id:am1tanaka:20180203232917p:plain

  • テクスチャを含める場合は、組み込みメディアのチェックを入れます

f:id:am1tanaka:20180204115001p:plain

  • その他、Unityに持っていく場合は以下はチェックしておいた方がよさそうです
    • ジオメトリの三角化
    • アニメーションがある場合
      • アニメーションにチェック
      • アニメーションをベイク処理もやっておいた方がよいようです(必要に応じて)
      • 変形したモデル、スキン、ブレンドシェイプにチェック
    • カメラやライトは必要に応じて

以上設定できたら、ファイル名を入力して、すべて書き出しボタンを押します。

f:id:am1tanaka:20180204115138p:plain

これで書き出したFBXファイルにマテリアルやテクスチャーを組み込みました。このファイルだけで、モデル以外のデータもUnityに読み込ませることができます。

f:id:am1tanaka:20180203233139p:plain

UnityでFBXファイルを開く

Unityにモデルを読み込んで、テクスチャーとマテリアルを取り出します。

  • Unity2017.2以降を起動して、モデルを使いたいプロジェクトを新規で作成するか、開きます
  • 書き出したFBXファイルを、Unityのプロジェクトビューにドラッグ&ドロップします

f:id:am1tanaka:20180203234128p:plain

この段階ではまだマテリアルは設定されていません。Inspectorで設定します。

f:id:am1tanaka:20180203234152p:plain

  • Projectビューから読み込んだモデルを選択します

f:id:am1tanaka:20180203234526p:plain

  • Inspectorビューで、Materialsを選択します(Unity2017.2で追加されたボタンです)

f:id:am1tanaka:20180203234647p:plain

  • Import Materialsにチェックが入っていることと、Use Embedded Materialsが選択されていることを確認します

f:id:am1tanaka:20180204115359p:plain

  • テクスチャーを書き出すために、Extract Texturesボタンをクリックします

f:id:am1tanaka:20180204115430p:plain

  • Texturesフォルダーに書き出しましょう。フォルダーがない場合は、新しいフォルダーボタンでフォルダーを作成して、Texturesという名前にして、選択したらフォルダーの選択ボタンを押します

f:id:am1tanaka:20180204005228p:plain

  • 同様に、マテリアルを書き出すために、Extract Materialsボタンをクリックします
  • Materialsフォルダーを選択して(ない場合は、新規に作成して)、フォルダーの選択ボタンを押します

f:id:am1tanaka:20180203235111p:plain

以上でマテリアルとテクスチャーを指定のフォルダーに取り出して、モデルに設定されました。

f:id:am1tanaka:20180203235234p:plain

シーンに配置してみましょう。

  • Projectビューから、読み込んだモデルをドラッグして、Hierarchyビューか、Sceneビューにドロップします

f:id:am1tanaka:20180203235440p:plain

これでシーンに配置できました。

モデルの大きさを調整する

Unityにモデルを持ってくる場合、モデルの大きさに気を付けてください。例えば今回のモデルの横にCubeを置いて大きさを比べてみたところ、10.8mぐらいあります!

f:id:am1tanaka:20180203235921p:plain

Unityでは、落下などの動きがメートル単位を前提に設定されています。150cmのものであれば、大きさを1.5にした時に現実世界と同じように動きます。これを無視して開発すると、当たり判定や落下などで謎の挙動に悩まされることになります。本来は、モデルを作る際に、ゲームの単位に合わせて作るのがセオリーですが、Unityに読み込む段階で調整することもできますので、ここではその方法で調整します。

キャラクターを145cm(1.45m)にします。

1.45m / 10.8m = 0.134ですから、モデルを0.134倍すれば目的のサイズになります。

  • Projectビューからモデルを選択します
  • Inspectorビューで、Modelに切り替えたら、以下を設定します
    • Scale Factorに0.134を入力
    • カメラとライトはキャラには不要な場合が多いので、チェックを外しておいた方がよいでしょう
    • Applyボタンをクリックします

f:id:am1tanaka:20180204001230p:plain

以上で、キャラクターのサイズが調整できました。

f:id:am1tanaka:20180204001633p:plain

まとめ

  • MAYAで書き出すときに"組み込みメディア"にチェックする
  • UnityにFBXを読み込んだら、Inspectorでマテリアルとテクスチャーの展開を手動で行う

以上の2点を押さえておけば基本的にはオッケーです(テクスチャーやマテリアルを組み込むメニューが"組み込みメディア"というのはちょっと分かりづらかったです・・・)。

これまでは事前にテクスチャーをTexturesフォルダーに入れておく必要があったり、マテリアルが勝手な場所に展開されていました。Unity2017.2から追加されたMaterialインポートの機能で、モデルを読み込んだあとに、テクスチャーとマテリアルを好きな場所に展開できるようになり、手順的にも、管理的にも随分楽になりました。

ぜひ活用してください。

ライセンス

参考URL

Unity Hub Betaを使ってみました

blogs.unity3d.com

Unityブログで、Unityでプロジェクトを起動する時の新しいランチャーアプリのベータ版が紹介されていたので使ってみました。

Unityのバージョンを保存されている場所を管理したり、検索したり、また、プロジェクトが使ってるUnityのバージョンが未インストールだったら、該当するバージョンのUnityのダウンロードが簡単にできたりします。また、プロジェクトを作る時に、テンプレートなどで必要な機能を簡単に見つけて追加するような機能も持っています。

追記

  • 「プロジェクトのバージョンを自動的に認識しない」と書きましたが間違いでした。ちゃんと対応バージョンで自動的に開きますし、対応バージョンが未インストールだった場合はプリセットのバージョンか、対応バージョンをダウンロードすることが選べることを追記しました(2018/1/25)

目次

インストール

ブログから、Windows版とMac版のインストーラーがダウンロードできます。インストールして起動すると、Unityアカウントのチェックがあるので、アカウントがあれば"Log into my existing accout"をクリックして、ログインします。

f:id:am1tanaka:20180125124250p:plain

エラーが出たら"Re-Activate"を押しましょう。

f:id:am1tanaka:20180125124414p:plain

Unityのライセンスのチェックがまだの場合は、ライセンス更新がありますので、アンケートに答えてライセンスを更新してください。

Unityのライセンス登録 - tanaka's Programming Memo

Unity Hubの起動

Unity Hubを一度起動すると、右下のインジケーターに常駐します。ここからUnityアイコンをクリックすると、簡単にUnity Hubを起動できます。

f:id:am1tanaka:20180125170225p:plain

Unity本体とHubを切り離すことで手早く起動ができるようになりました。実際に使ってみて気づいた大きな使い勝手の向上の一つでした。

Installs

Unity Hubが起動すると以下のような画面が開きました。

f:id:am1tanaka:20180125145212p:plain

今まであったプロジェクトとLearnに加えて、Installsが増えました。インストール済みのバージョン(On my machine)、公式にリリースされているバージョン(Official Releases)、ベータ版(Beta Releases)について確認して、必要ならダウンロードができます。

On my machineで、インストール済みのUnityを登録する

現バージョンのUnity Hubでは、インストール済みのUnityは認識しないようでした。"Locate a Version"をクリックして、インストール済みのUnity.exeのパスを選択します。

f:id:am1tanaka:20180125145658p:plain

設定が完了したら、追加したバージョンが表示されて、デフォルトで使われるバージョンであることを表すpreferredになっています。

f:id:am1tanaka:20180125151514p:plain

Unityをインストールする

未インストールのバージョンのUnityをインストールしてみます。Installsタブから、インストールしたいバージョンの右の"Download"をクリックします。

f:id:am1tanaka:20180125151020p:plain

インストールする項目を選択できます。必要なものを選択して、"Done"をクリックします。これで、ダウンロードとインストールが実行されます。

f:id:am1tanaka:20180125151104p:plain

デフォルトバージョンの選択

Unityのバージョンを指定せずにプロジェクトを開いたり、Learnタブのチュートリアルを開く場合、preferredと表示されているバージョンが使われます。デフォルトのバージョンを変更したい場合は、設定したいバージョンの右の[...]をクリックして、"Set as preferred"を選択します。

f:id:am1tanaka:20180125164418p:plain

インストール済みのUnityのコンポーネントを変更する

これまでは、AndroidビルドやStandard Assetsなどのコンポーネントはインストール時にしか選択できず、後から変更したい場合は再インストールするしかありませんでした。Unity Hubを使うと、InstallsのOn my machineから変更ができるようになりました。

追加したいバージョンの右の[...]をクリックします。

f:id:am1tanaka:20180125154805p:plain

表示されるメニューからAdd Componentを選択するとコンポーネントの再設定ができます。

f:id:am1tanaka:20180125155019p:plain

インストール済みのUnityではこの機能は使えないようでした。必要な場合は、一度アンインストールをして、改めてUnity Hubでインストールし直す必要があるかも知れません。

プロジェクト

複数のバージョンのUnityがUnity Hubに登録されていると、プロジェクトの右に[...]ボタンが表示されます。ここから、プロジェクトを開くバージョンを選択できます。

f:id:am1tanaka:20180125155251p:plain

自動的に適したバージョンで開く訳ではありませんが、開くUnityを間違えて、別のバージョンのUnityを起動し直す手間がなくなるのは嬉しいです。

上記、間違いでした。Installsで管理しているバージョンであれば自動的にプロジェクトのバージョンのUnityで開きます。

また、インストールされていないバージョンのものを開こうとすると以下のように選択が表示されます。Preferredに設定されたバージョンで強制的に開くか、プロジェクトのバージョンのものをダウンロードするかを選択できます。

f:id:am1tanaka:20180125211335p:plain

テンプレート

Unity Hubの新しい機能としてテンプレートがあります。プロジェクトを新規に作成する際に、様々なタイプの雛形を指定することで、開発を始める手間を省きます。プロジェクトを作成する時に、様々なタイプの初期パラメーターが設定されます。また、プロジェクトのarchetypeを設定することで、初期設定を変更することもできます。テンプレートは、作りたいゲームの種類や、画面のクオリティに応じた設定を一括で行うことができます。

f:id:am1tanaka:20180125160910p:plain

現状では2Dと3Dしか選べませんでしたが、予定では以下のものが用意されるそうです。

  • Standard 2D
  • Standard 3D
  • (Preview) 軽量なゲーム(モバイルや低スペックマシン向け)
  • (Preview) ハイクオリティ(高スペックマシン向け)
  • (Preview) 軽量VR向け

テンプレートは、プロジェクトを作成した時点で、最適化したいくつかのプレハブやアセットを組み込みます。テンプレートを利用することで、見つけづらい機能や設定にユーザーが気付けるというものがあります。テンプレートがあったら、とりあえず使ってみて、どのような設定になっているかを確認するとよさそうだそうです。

Learn

様々な学習やプロトタイプに使えるリソースがまとめられています。

f:id:am1tanaka:20180125163201p:plain

Basic Tutorials

Unityエディターやゲームオブジェクト、リジッドボディー、値の設定と効果、プレハブなどについての基礎的なチュートリアルが用意されています。

Tutorial Projects

Roll-a-ball、Space shooterなどの、Unity公式ページに用意されている様々なチュートリアルがダウンロードできます。

Resources

HMD用の360°プロジェクト、カーシミュレーター用のツール、タワーディフェンステンプレート、パーティクルパックがダウンロードできます。

Unityに関する様々な情報へのリンク集です。

ダウンロードできない場合

チュートリアルやプロジェクトは、対応するバージョン以上のUnityでのみ使えます。そのため、Installsのpreferred設定が古いバージョンだとダウンロードできません。preferredはなるべく新しいものにしておいた方がよいです。

今後予定されているUnity Hubの機能

まずは最初にUnityを触る部分ということで、インストールとプロジェクトの管理が実装されましたが、Unity Hubに持たせたい機能として以下が挙げられていました。

  • 単一のサインインとサインアウト
    • あらゆるマシンから、ログインと、Unityのすべての機能やリソースにアクセスできるものです。これにより、オフラインで作業ができるようになります
  • リアルタイムアクティビティ
    • Unityのプロジェクトやチーム、サービス、ニュースについて使いやすくする情報機能です
  • Consolidated access(連結アクセス)
    • チュートリアルやアセットストアなどのUnityの機能を簡単に検索やアクセスする機能です
  • よりよい導入
    • 初めてUnityを利用する人にとって効率のよくします

まとめ

複数バージョンのUnityを簡単に管理できるようになったことで、この何年か学校での悩みの種の一つだったバージョンアップが気軽にできそうです。

Unity本体を起動する前に、プロジェクトやバージョンの選択、管理ができるのもとても便利でした。推奨版やβ版を知ることができるのも嬉しい機能です。

β版ですが早速導入しようと思います。

参考URL

Unityのライセンス登録(2018/3/12更新)

Unityをインストールしたり、新しいバージョンをインストールしたりしたあとで、初回起動時に必要なライセンスの更新手続きについて、無料で利用する時の手順をまとめました。2018/3/12現在のものです。

示す選択は、学生さん向けのものです。それぞれご自身の立場に読み替えてください。

手順

まずは、お持ちのライセンスを選択して、"Next"をクリックします。無料で利用する場合は、"Personal"の方を選択します。

f:id:am1tanaka:20180125124500p:plain

Personalを選択した理由を選択します。

f:id:am1tanaka:20180125130053p:plain

上から以下のような内容です。

  • 前年度に$100,000以上を売り上げた会社や組織です
  • 前年度に$100,000未満の売り上げだった会社や組織です
  • プロとして使用をしません

Unityを無料で利用できるのは、2番目と3番目の場合です。広告を載せて公開したい、という場合は2番目。とりあえず勉強用に使いたい、という場合は3番目にするとよいでしょう。前年度の売り上げが$100,000を越える場合は、PlusかProをご利用ください。

アンケートに回答します。

  • どこで利用するかです。日本なら"Japan"ですね

f:id:am1tanaka:20180125130248p:plain

  • Unityをどのような用途で利用するかです。最も近いものを選択してください。学生ならStudentです
    • Professional - 仕事で使います
    • Hobbyist - 自分の時間で使います
    • Student - 学習のために使います
    • Teacher/Instructor - 教育用途で使います

f:id:am1tanaka:20180125130619p:plain

  • 主な役割を選択します。自分に該当すると思ったものを最低1つ選んでください
    • Artist - アーティスト
    • Audio Designer - オーディオデザイナー
    • Educator - 教師
    • Executive - 経営者/役員
    • Game Designer - ゲームデザイナー
    • Indie/Generalist - 自社開発/全役割
    • Producer/Manager - プロデューサー/管理者
    • Programmer - プログラマー
    • Student - 学生
    • Other - その他

f:id:am1tanaka:20180125131350p:plain

  • Unityの技術を選択します。該当するものを選択してください
    • Absolute beginner-never used Unity before - Unityを初めて使う完全な初心者です
    • Beginner - 初心者です
    • Intermediate - 中級者です
    • Advanced - 上級者です
    • Expert - 熟練者です

f:id:am1tanaka:20180125131630p:plain

  • 学生向けの問いです。卒業予定年度を選んでください

f:id:am1tanaka:20180312190013p:plain

  • 学校名を入力してください。必須ではないので省略しても構いません

f:id:am1tanaka:20180312190146p:plain

  • 学校の所在地です。"Japan"でしょう

f:id:am1tanaka:20180312190225p:plain

  • 学年を答えます
    • Post-secondary: 大学生、短大生、専門学校生など
    • Secondary: 高校生
    • Middle School: 中学生
    • Elementary: 小学生

f:id:am1tanaka:20180312190543p:plain

  • 興味のある端末にチェックをいれてください

f:id:am1tanaka:20180125132228p:plain

  • Unityで開発予定のものを選択します。"Games"でよいでしょう

f:id:am1tanaka:20180125132346p:plain

以上、完了したら"OK"ボタンをクリックします。

しばらく待って、画面が切り替わったら、"Install Now"などのボタンをクリックして先に進んでください。

以上です。