テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】ProBuilderで作ったパーツを組み替えてステージを作る アプローチ

f:id:tsubaki_t1:20180512122308j:plain

パーツの組み合わせで簡単なステージを作ってみるのを試してみました

 

 

 パーツを組み合わせてステージを作るアプローチ

ステージを作る上で、地形を粘土のように調整して作るスピードレベルデザイン法式ではなく、パーツを組み合わせてステージを作るアプローチをProBuilderでやってみました。

例えば下のようなパーツを用意して、それを組み替えていきます。

f:id:tsubaki_t1:20180513161945j:plain

f:id:tsubaki_t1:20180513162010j:plain

考え方的にはタイルマップに似ていて、グリッドに合わせてオブジェクトを配置していく感じです。複雑な地形であっても、ある程度のパターンで作れるのが魅力です。

f:id:tsubaki_t1:20180513163656g:plain

このアプローチでは、部屋のレイアウトのみを作成して、屋内の家具や照明といったものは作りません。例えば下の図のように、部屋の中が殺風景にならないように余計なものを一杯置くのはあとで行います。

f:id:tsubaki_t1:20180513164916j:plain

 

ステージのパーツを作る

まずはパーツを作っていきます。
必要なものは「接続部分の大きさが固定」である事と「パーツの大きさが固定」である事です。なので、ProBuilderでは規格的な物を作っていきます。

 

PlaneをProBuilderで作成します。この時、大きさは10x10、分割数は5とします。

f:id:tsubaki_t1:20180513185510j:plain

パネルを選択するモードにして、パーツの壁の位置を選択していきます。例えばカドが閉じているステージの場合は、下のように選択していきます。

f:id:tsubaki_t1:20180513185803j:plain

選択した板を壁にします。Shiftを押しながら上に持ち上げても実現出来ますが、高さが固定出来ないのでパネルのボタンを使用して持ち上げます。

高さはAltを押しながらクリックで設定できるようになります。

f:id:tsubaki_t1:20180513185929j:plain

f:id:tsubaki_t1:20180513185937j:plain

持ち上げた壁には背景が存在します。この背景は大抵の場合は見える事は無いので排除していきます。そうすると、ステージのライトを焼いた時に使用するライトマップの範囲が大きく減ります。

f:id:tsubaki_t1:20180513190743g:plain

 

他のパーツを作る場合、接続部さえ綺麗になっていれば概ね綺麗に繋がります。

 

パーツを使い回すために出力する

パーツの数が揃ってきたら、次はファイルとして出力します。ProBuilderはモデルをPrefabとして出力しても何も残らないので、アセットとして出力する必要があります。

f:id:tsubaki_t1:20180513192556g:plain

 出力する際には、FBX ExporterかOBJ法式で出力するのが良さそうです。
それ以外だと出力の度にアセットのGUIDが変化し、Prefabへの参照が破棄されます。

個人的にはFBX Exporterが安定してる印象です。

f:id:tsubaki_t1:20180513191848j:plain

またExportする際には上書きしないとアセットが反映されないので、オブジェクトの名前は一定規則で持って作っておいたほうが良さそうです。

 

並べる

出力したら「アセットとして出力したパーツを使って」並べるだけです。残念ながらオートタイルのような機能は無いので頑張る必要があります。
例えばVキーを押してスナップ位置で調整したり、Ctrlを押して1mずつ動かす等で調整するのが良さそうです。
もしくはProGridもあります。

f:id:tsubaki_t1:20180513192931g:plain

 

関連

www.slideshare.net

blog.joelburgess.com

tsubakit1.hateblo.jp

 

www.slideshare.net

【Unity】Unityエディターを日本語化する方法(Unity2018.1)

今日Unite Tokyoで発表されたUnityエディターの日本語化についてです。

f:id:tsubaki_t1:20180507214854j:plain 

 

 

Unityエディターの日本語化

Unityエディターの日本語化対応方法が公式から公開されました。

エディターを日本語化することで、メニューアイテムが日本語化される他、殆どのUIの注釈等も日本語で表示されるようになります

f:id:tsubaki_t1:20180507215242p:plain

f:id:tsubaki_t1:20180507215348j:plain

 

また一度日本語化すると日本語と英語は即座に変更可能になります
Unityの機能はAPIと名前が一致している機能も多いので、コレのAPI何だっけってなった時には切り替えると良さそうです。
つまり、基本的に英語を使用するが、新しい機能を触るときには機能を把握するために日本語化する…といった事も可能という事です。

f:id:tsubaki_t1:20180507222015g:plain

 

将来的には、日本語化の手順無しに日本語化ができるようになるみたいです。インストール時に言語もインストールする的な。

将来のバージョンでは正式にUnity Hubからのインストール時に言語が選択可能になる予定です。日本語以外のサポートも予定しています。

 Unity Habからのインストールで日本語化が可能になりました。

 

大前提として、Unity 2018.1以降が必要です。

 

日本語化の手順

日本語化手順ですが、まずはUnityに対応したPOファイル(文字を置換する為のファイルみたいなもの)が必要です。

このPOファイルは現状2つの手順でインストールできます。

 

Unity未インストールの場合 もしくはUnityHubでインストールした場合

Unityがまだインストールしていない場合は、Unity Hubでインストールするのが一番楽です。

  1. Unity Hubを開き、Installを選択します。
  2. Official Releaseを選択します
  3. インストールしたいバージョンをDownloadします。
  4. 「Add Components to your install」ウィンドウが出て、追加で導入するコンポーネント(対応プラットフォーム)を選択するのですが、この一番下に言語パックがあるので、日本語にチェックを入れます

f:id:tsubaki_t1:20180711090608j:plain

 

f:id:tsubaki_t1:20180711090702j:plain

Unity 2018.2から、追加で日本語の言語パックをインストール出来るようになっているみたいです

 

 

POファイルを入れたなら

 

POファイルを入れたならば、次はPreferenceを開きます
これはMacならばUnity>Preference
MacならばEdit>Preferenceにあります。

 

Preferenceを開くと新しいLangageというメニューが追加されているので、それを選択、Editor Langageにチェックを入れ、Editor LangageをJapaneseに切り替えます。

最後に再起動します。

 

これでエディターの日本語化は完了です。

f:id:tsubaki_t1:20180507221111p:plain

f:id:tsubaki_t1:20180507221709j:plain

 関連

blogs.unity3d.com

これを期にソースコードに日本語使ってみても…?
→戦争

tsubakit1.hateblo.jp

POファイルのURL

http://editor-localization.s3-website-ap-northeast-1.amazonaws.com/2018.1/ja.po

 

求ム フィードバック

connect.unity.com

 

 

 

以下、古いアプローチ

 

既にインストールしている場合(使用不可)

チラっと探しましたが残念ながらPOファイルを独自に配っている感じではなかったので、下の手順で取得します。

まずPOファイル*1をダウンロードします。これは下のURLから取得できますconnect.unity.com

 

 

f:id:tsubaki_t1:20180507215645j:plain

 

次に指定のフォルダを作成します

フォルダパスはWindowsの場合は

{Unityをインストールしたファオルダ}\Editor\Data\Localization

Macの場合は

{Unityをインストールしたフォルダ}/Unity.app/Contents/Localization

となります。Unityをインストールしたフォルダは、例えばWindows

C:\Program Files\Unity\

C:\Program Files\Unity\Hub\Editor\{Unityエディターのバージョン}\

 Macの場合は

/Applications/Unity/

/Applications/Unity/Hub/Editor/{Unityエディターのバージョン}/

 あたりでしょう。
例えば「/Applications/Unity/Hub/Editor/2018.1.0f2/Unity.app/Contents/Localization」とか。

 

あとはダウンロードしたPOファイルをLocalizationフォルダ以下に格納します。

f:id:tsubaki_t1:20180507220858p:plain

 

なお、Macの場合、アプリケーションの中に入るのに「パッケージの内容を表示」で中に入れます。

f:id:tsubaki_t1:20180507220320g:plain

 

*1:多言語対応によく使われているファイル

【Unity】物理演算を指定秒数 進める Physics.Simulate

f:id:tsubaki_t1:20180504185846g:plain

今回は「シーンの物理現象をシミュレートする」という、一見分かりにくいAPIPhysics.Simulateおよび Physics2D.Simulateついてです。

 

 

物理演算を指定秒数進めるAPI

このSimulate系のAPIは、簡単に言えば「物理演算を指定秒数、進める」事のできるAPIです。
通常は物理演算は「時間」によって進みますが、コレをスクリプトから超加速出来る訳です。

と言っても凄く癖のある機能で、

  • RigidbodyもしくはRigidbody2Dに動作する
  • FixedUpdateは呼ばれない
  • 1回に進められる時間はFixedDeltaTime(0.0167秒)辺りが限界*1
  • 他のRigidbody等の接触により結果が変わる事がある*2

という、中々に微妙な機能でもあります。

 

物理演算を進める

実際の操作を見てみます。

 

まずSimulate系のAPIですが、PhysicsのautoSimulateがOFFになっていることが前提条件です。ONだと動作しません。
まあ通常はInspectorよりはPhysics.autoSimulationで切り替えます。
コレを無効にすると、ゲームループ内で自動的にPhysics.Simulateが呼ばれなくなります。ただ MonoBehaviour .FixedUpdateは普通に呼ばれます。

f:id:tsubaki_t1:20180504190806j:plain

まずはAutoSimulationを手前でやってみます。
下のコードでは、コンポーネントが有効なときにのみ物理演算のシミュレートが進みます。

 

gist.github.com

f:id:tsubaki_t1:20180504191700g:plain

 

次にn倍速にしてみます。0.1から1.5倍速あたり。これは1回のFixedUpdateで進める時間を調整すれば実現出来ます。

gist.github.com

f:id:tsubaki_t1:20180504192251g:plain

これは所謂Time.Timescaleと異なり、時間軸自体は通常通り動く所が面白いところです。現象だけ遅くする事が出来るので、世界をゆっくりにして云々するのも面白いかもしれません。気分はカブト*3

ただコレは、移動も物理演算に頼っている場合は、少し面倒なことになるかもしれません。単純に時間を弄る系はTime.TimeScale弄ったほうが最終的に楽できます。

f:id:tsubaki_t1:20180504192949g:plain

 

物理演算を指定秒数進める・巻き戻す

さて、次は物理演算を指定秒数進めてみます。
時間指定はそれ程難しくはありません。指定時間に到達するまで秒数分ぶん回すだけです。パーティクルのPrewarmと同じようなものです。
強いて問題を上げるとすれば、高い負荷を計上する事があるという点ですが、まぁ。*4

gist.github.com

では巻き戻しは? …実は出来ません。
なので、「0秒の状態を保持しておいて、毎回0秒から指定秒まで演算を進める」という超力技で実現します。

下の2つは、このアプローチで巻き戻しを実現しています。

 


ただ、このときの動作が「他の物理演算の有無」により結構誤差が出ます。また負荷も半端ないので、実際にゲームで使う際にはTransform単位でキャプチャするほうが現実的かもしれません。

 

未来予測

最後に未来予測です。これも基本的には「巻き戻し」と同じ考え方です。
要するに、指定時間まで秒を進めて結果を回収する…という物です。

gist.github.com

f:id:tsubaki_t1:20180504200110g:plain

もっと軽くても良いよ!という場合は、下の設定にすると、大分負荷が減ります。
ただし計算精度も雑になります。まぁゲームのちょっとした弾道予想ではコチラの方が都合が良いかもしれません。

  • float deltaTime = Time.fixedDeltaTime を float deltaTime = Time.fixedDeltaTime * 10; に変更
    (計算制度を雑にする)
  • 予測したいRigidbodyのCollision DetectionをContinuous Dynamicに設定

f:id:tsubaki_t1:20180504200931j:plain

感想

中々に楽しい機能ではあるのですが、大体において「重い」です。複数フレームでやるような処理を1フレームでやってるので、仕方がないとも言えます。

 

個人的には、用途としては「弾道予想」と「エディターで物理演算をレコードする時に使う(GameObjectRecorder)」くらいかなと思ってます。

 

今回は3Dの紹介でしたが、2Dでも同じAPIがあります。動作も同じです

関連

普通に高校で習う内容で落下位置を予測しようぜ!という話。
複雑な地形や複数のオブジェクト間の接触、それの最適化等を考えるとしんどい

tsubakit1.hateblo.jp

たぶん見るであろう「壁貫通」について

tsubakit1.hateblo.jp

TImeScaleで行うスローモーション

tsubakit1.hateblo.jp

*1:マトモに演算結果を受けたければ

*2:ゲーム向け物理演算の限界

*3:クロックアップ

*4:パーティクルのPrewarmも同様に、モジュールにより高い負荷を計上することがある

【Unity】Unityでプレゼンテーション資料を作る

f:id:tsubaki_t1:20180503001307j:plain

今回はUnityでKeynotePowerpointにあるようなプレゼン資料を作るプロジェクトの紹介です。

 

 

もはやPowerPointに切り替える必要はない…

説明会や勉強会等で資料を作成すると、よく「KeynotePowerPoint)とデモ用の何か(自分の場合はUnityエディター)の切り替え」を行います。
これが中々の曲者で、一旦Keynoteをプレゼンモードから戻すと現在進行中の時間がリセットされ、のこり時間を見失う事があります。発表中で上がっている時や、時間がズレてる時は特に。

 

他にもPowerPointとUnityエディターを行ったり来たりすることで、誰かが何かの問題を起こすかもしれません。これはとても難しい問題です。

そこでvalyard氏は考えました。

 

Q:UnityエディターとPowerPointの切り替えで起こるトラブルを回避するには?

A:UnityがPowerPointになればいい

 

そうだ、Unityでプレゼン資料を作ろう

このブッ飛んだ考えで作られているのが、Presentation Project (Unity)です。
キャッチコピーはNo need to switch to Power Point anymore.

f:id:tsubaki_t1:20180502233205g:plain

github.com

考え方は単純で、UGUIのレイアウト機能を使えば資料ぐらい作れるよね!という物です。1シーンを1スライドと捉えて、それを切り替えることでプレゼン資料を実現しています。
このプロジェクトで提供されている物は、この「1スライド1シーン」を順番に切り替える&ロードする仕組みです。

f:id:tsubaki_t1:20180503000046g:plain

一応ビルドすることも出来るので、WebGLとかでも動くんじゃないですかね(多分

 

使い方を見てみる

とりあえず試しに使ってみました。

f:id:tsubaki_t1:20180503000140g:plain

 

Window > Presentationでメニューを開きます。

f:id:tsubaki_t1:20180502235358j:plain

あとは+でプレゼン資料のページを増やして、シーンを登録していきます。シーンは自分で普通のエディター操作で作ります。
何か最初から色々とセットされていたら、左上のNewボタンとか押しておけばOKです。

f:id:tsubaki_t1:20180502235436j:plain

あとは右上の>Bボタンを押せばプレビューが出来ますし、Stopボタンでプレビューを停止できます。
「再生」が入っていると、その資料を開くときにエディターがシーンを再生してしまうので、文字だけのページの場合は外しておくと良いかもしれません。

f:id:tsubaki_t1:20180502233928j:plain


発表者ノートは?プレゼンの残り時間の確認は?

ノーコメント。

 

その他

・・・確か自分が知ってる範囲で2件ほど同じ様な事をやってるプロジェクトがあった気がするけど思い出せない…

動かしながらプレゼン出来るのは面白いかも