Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【アセット紹介】Umbra Boundary Builder で移動範囲の境界を作る【Unity】

今回はアセットの紹介をしていきます。
紹介するのはUmbra Boundary Builder
プレイヤーとナビメッシュエージェントの境界を作成するアセットです。

f:id:Raspberly:20210518101019p:plain

 

f:id:Raspberly:20210518030623p:plain



 

お得なセール情報

現在アセットストアでは、レベルデザインに関係したアセットのバンドルが発売中!
今回紹介する「Umbra Boundary Builder」もバンドルに含まれています。

f:id:Raspberly:20210518024635p:plain

金額に応じてアセットが異なりますが、オススメは全てのアセットが含まれた$39.99コースです。
通常の50%OFFセールで購入するよりも遥かに安く購入できるので、
気になるアセットがある場合は買っちゃいましょう!

f:id:Raspberly:20210518025913p:plain

f:id:Raspberly:20210518025953p:plain

f:id:Raspberly:20210518030035p:plain

f:id:Raspberly:20210518030055p:plain

blogs.unity3d.com

 

 

 

どんなアセット?

キャラクターをCharacter ControllerやNavmeshで動かすとき、移動範囲を設定するのはやや面倒ですよね。
ステージ自体が壁や障害物で囲まれているのなら問題ありませんが、
見えない壁を設置したい場合は多くのCubeを駆使しステージを囲む必要があります。
そういう時に役に立つのがこのアセット「Umbra Boundary Builder」。
ノードを配置しそれらをつないだメッシュを作成するアセットです。 

f:id:Raspberly:20210518022445g:plain

特筆すべき機能
- Unity 5+で動作
- 数回のクリックでバウンダリになるノードをシーンに追加できます。
- ナビメッシュとそれを使用するAIが、プレイヤーと同じ境界を尊重するようにします。
- バウンダリをベイクしなくても、リアルタイムでバウンダリが作成されるのを確認できます。
- シンプル、軽量、簡単に使用可能

 

 

こちらの動画のようなキャラクターコントローラーを使う場合に便利です。

www.youtube.com

 

 

実行環境

Unity2020.1.17f1
Umbra Boundary Builder Ver2.3.2

 

 

インポートの確認

アセットインポート完了時はこんな感じです。

f:id:Raspberly:20210518015620p:plain

Generalというフォルダには、Umbra Boundary Builderに限らず同パブリッシャーのアセットで使われる共通処理や機能が含まれています。削除しないようにしましょう。
ちなみにこれらの機能はusingステートメントを追加するこで誰でも使えるようです。

 

肝心のアセットの使い方はUmbraEvolution/UmbraBoundaryBuilder/README_UmbraBoundaryBuilderに書いてあります。
デモシーンはないようです。

 

 

 

主要コンポーネント

このアセットを使いこなすうえで重要なコンポーネントを紹介します。
機械翻訳を使用しているのでおかしいところがあるかも

Boundary Builder

f:id:Raspberly:20210518001602p:plain

Use Physical Gizmos

Unityエディタにギズモに似たオブジェクトを作成します。
無効にするまでビルド後も継続されます。基本的にオンにしない方がよさそう。

フィジカルギズモは、Unityのビルトインギズモと比較して、計算量が多く、実験的な機能です。デフォルトのギズモが動作しない場合や、プレイモードや開発ビルドでギズモを使用する必要がある場合にのみ使用してください。

Gizmos Always On

選択されていなくてもシーンビュー上で常表示されるようになります。

Add New Boundary

Boundary Builderの子オブジェクトにBoundaryを作成します。

 

Boundary

f:id:Raspberly:20210518001910p:plain

Placeable Layers

シーンビューにノードを配置する時にレイキャストが反応するレイヤー。

Boundary Gizmo Colour & Node Gizmo Colour

境界線とノードのギズモの色

 

f:id:Raspberly:20210518005716p:plain

Node Gizmo Radius

ノードのギズモの大きさ

Closed Loop

最初と最後のノードの間に境界を作成するかどうか。完全に閉じた境界を作るには有効にします。

f:id:Raspberly:20210518023732g:plain

Use Box Colliders

コライダーを有効にするかどうか

Physics Layer

境界の物理レイヤー

Boundary Thickness & Height

境界の厚みと高さ

f:id:Raspberly:20210518021555g:plain

Vertical Offset

垂直方向のオフセット

Boundary Mesh Material

作成されるメッシュのマテリアル。何も設定しないとこうなる。
何も表示しなくない場合は透明なシェーダーを割り当てるなりMesh Rendererを切るなりしましょう。

 

 

 

 

実際に試してみる

シーンにBoundary Builderを配置する

Unityエディターのツールバーから、Tools/UmbraEvolution/UmbraBoundaryBuilder/Add Boundary Builder
BoundaryBuilderコンポーネントがアタッチされたゲームオブジェクトを作成します。

f:id:Raspberly:20210518001521p:plain

Boundaryの作成

Boundary BuilderのAdd New BoundaryでBundaryを作成します。

f:id:Raspberly:20210518001748p:plain

見やすいようにギズモや境界の大きさを変えておきます。

f:id:Raspberly:20210518014342p:plain

ノードの配置

BoundaryのStart Placing Nodesボタンを押します。

f:id:Raspberly:20210518020331p:plain

この状態で、シーンビュー上を左クリックしていくとその場所にノードが作成されます。
キャラクターの移動範囲を囲むように配置していきます。

f:id:Raspberly:20210518021640g:plain

ノードを配置し終わったら、BoundaryのStop Placing Nodesを押します(忘れないように)

f:id:Raspberly:20210518020718p:plain

メッシュの作成

配置したノードをつなげてメッシュを作成します。
BoundaryのGenerate Meshボタンを押します。

f:id:Raspberly:20210518020744p:plain

 

無事作成されました。
マテリアルを何も設定していないので煌びやかな色になっていますが、
BoundaryのMesh Rendererを無効化することで解決できます。
(NavMeshを使用している場合はBakeしてから無効化しましょう)

f:id:Raspberly:20210518021226p:plain

f:id:Raspberly:20210518020832p:plain

今回は見えない壁を作りましたが、目に見える壁にしたい場合はBoundaryからマテリアルを割り当てると良い

 

 

これで完成です。
プレイヤーの移動範囲が制限されていますね。

f:id:Raspberly:20210518022445g:plain

 

 

Boundaryは複数作成できるので迷路のような細かい境界も作成できます。
この場合、BoundaryのClosed Loopをオフにしておくと良いですね。

f:id:Raspberly:20210518023017p:plain

 

 

以上です。

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

 

【Unityネタ】アニメーションの再生開始位置をランダムにする

今回はUnityネタをやっていきます。
アニメーション再生時の開始位置をランダムにする方法について。

f:id:Raspberly:20210513040305g:plain

まとめ

animator.Play(animator.GetCurrentAnimatorStateInfo(0).shortNameHash, 0, Random.Range(0f, 1f));

でアニメーションを再生すれば良い

 

 

はじめに

ゲームや映像作品の背景用に適当な歩行者を配置することがあると思いますが。
全員が同じタイミングでアニメーションを再生すると完全に歩調が合ってしまい、
歩行者として見た場合かなり不自然な見た目になります。意図的に合わせたいなら別ですが。

f:id:Raspberly:20210513023845g:plain

 

アニメーション再生時の開始位置をそれぞれずらすことで、複数体表示しても違和感のない絵面にできます。

f:id:Raspberly:20210513023905g:plain

 

 

 

開発環境

Unity 2020.3.0f1

 

キャラクターとアニメーションはこちらのアセットを使用しています

Low Poly Animated People

 

 

 

 

キャラクターやAnimatorの準備

一番シンプルな方法でやります。
適当なキャラクターと再生するアニメーションを用意しておきます。

キャラクター

キャラクターをシーンに配置し、Animatorコンポーネントをアタッチします。

f:id:Raspberly:20210513032435p:plain

Animator Controller

Animator Controllerを作成し、アニメーションを紐づけておきます。

f:id:Raspberly:20210513031616p:plain

作成したAnimator ControllerをキャラクターにアタッチしたAnimatorにアサインします。

f:id:Raspberly:20210513032528p:plain

アニメーション再生開始位置をランダムにするスクリプト

以下のC#スクリプトをキャラクターにアタッチします。

using UnityEngine;

public class WalkerAnimation : MonoBehaviour
{
    public Animator animator;

    void Start()
    {
        animator.Play(animator.GetCurrentAnimatorStateInfo(0).shortNameHash, 0, Random.Range(0f, 1f));
    }
}

 

アタッチしたら、変数animatorにAnimatorをアサインします。

f:id:Raspberly:20210513033013p:plain

これで完了です。
シーンを実行してみると毎回アニメーションの開始位置がランダムに変化します。

 

 

 

スクリプトの解説

Animator.Play()はアニメーションを再生するメソッドですが、ここで重要なのは第三引数です。
ここに時間のオフセットを設定することで、アニメーションの開始位置を指定することができます。
オフセットは0~1の値で設定できます。0以外の値の場合アニメーションは途中から再生されます

 

今回は0~1までの乱数を与え、アニメーションがバラバラになるようにしています。

docs.unity3d.com

 

 

 

まとめ

animator.Play(animator.GetCurrentAnimatorStateInfo(0).shortNameHash, 0, Random.Range(0f, 1f));

でアニメーションを再生すれば良い

 

 

もっと違和感をなくしたいなら、再生速度も+-してあげるといいかも

 

 

 

参考資料

taskem — アニメーションの再生位置をスクリプトで管理する

※animator.ForceStateNormalizedTimeでのやり方は現在非推奨になっているようです。

 

 

【勉強会レポ】: Roppongi.unity #9

勉強会のレポート(メモ)です。
参加したのはこちら「Roppongi.unity #9」

roppongiunity.connpass.com

ハッシュタグ : #roppongiunity

 

f:id:Raspberly:20210429011944p:plain

アーカイブはこちら

www.youtube.com

 

Togetterまとめはこちら

togetter.com

 

 

 

Roppongi.unityとは

六本木発のUnity勉強会です。しばらくはオンラインで開催予定。

六本木発のUnity開発者向け勉強会です。(ref. Gotanda.unity)

Unityに興味がある人であれば、どなたでもご気軽にご参加いただけます!

 

 

 

#1 Addressable Asset Systemをプロダクトで使ってみた

Addressable Asset Systemを使ってつまずいた点や開発体制について紹介します。
LeapTriggerというARシューティングゲームで使用しています。

www.youtube.com

開発環境

LeapTriggerはARアプリなので実機確認が大事。
AWSのS3にアセットバンドルをアップロードしてダウンロードするようにしています。
各環境のUnityでビルドしたアセットバンドルをアップロードできるエディタ拡張を用意しています。

つまずいたポイント

・AddressableでキャッシュクリアはClearDependencyCacheAsync

docs.unity3d.com

・DLが0%始まらない→最新版に上げたら解決

おまけ

 

 

 

 

#2 github actionsで作るUnity CI環境

UnityとCIの壮大な苦労話をします

登場人物

fastlane:アップロードやビルドができるツールをまとめたもの
game ci:unityをいろいろやるツール群。その中のunity-builderというやつがすごいやつ。

ワークフロー

図解しているのでスライドをどうぞ。
構築手順はこちら

qiita.com

工夫ポイント

・cocoapodsを使っているがcacheを使ってうまく短縮
・ビルドとアップロードは分けて考えて、手動アップロードにも対応
・ビルド番号を振って被らないようにしている

苦戦ポイント

iOSのArchiveは闇が多い(ログをcatすればわかったりする)
・ローカルで動かすのは大事(actがおすすめ)

qiita.com

まとめ

game-ciを使えばgithub actionsでもunityビルドができる
iosは大変

おまけ

ワンナイト人狼オンラインで遊べるアプリをリリースしました、ダウンロードしてね

ワンナイト人狼オンライン

ワンナイト人狼オンライン

  • virapture Inc.
  • ゲーム
  • 無料

apps.apple.com

 

 

 

#3 翻訳VR作ってみた

仕組み

Unityの音声認識APIに送って、返ってきたテキストを翻訳APIで翻訳してPhoton越しにUnityに送っています。

音声認識の比較

いくつか試しましたが、Cloud SpeechToTextとWatson Speech To TextのWebAPIで実装しました。
検証結果と導入方法はこちら

qiita.com

qiita.com

qiita.com

翻訳APIの比較

DeepLが一番精度が高かった、慣用句もOK

qiita.com

qiita.com

qiita.com

マルチ対応Tips

Photon Voice2で導入。
UnityとPhotonそれぞれのMicrophoneAPIを使用して並列に走らせた。
同名のDLLが多数存在する場合は削除して1つにする。

参考リンク

tech.drecom.co.jp

 

 

 

 

#4 Unity + MRTKでHoloLens2用音楽ゲームを作った話

Unity,ゲーム開発初心者、HoloLensで開発したい人向けの内容です。

制作したゲーム

ハッカソンで作りました

実装手順

MRTKのインストール→UIの実装→衝突判定の実装→ビルド
MRTKはMR機能をUnity上で手軽に扱うことができるツールです。(MR用のUI/UXを簡単に実装できる)

chomado.com

実装の感想

・MRTKのおかげで衝突判定がやりやすかった
・XRに興味を持つきっかけになった 

 

 

 

 

#5 レーシングゲームにおける AI 設計

どのような考え方でAIを作ったかお話します。

 

※コードや説明が多く含まれているので動画でお楽しみください

 

 

 

 

 

#6 FrameDebugger VS RenderDoc

FrameDebuggerとRenderDocの良い部分をまとめました。

FrameDebuggerとRenderDocは何?

アプリの描画や負荷を調べたりするツールです。
FrameDebuggerはUnity標準のツール、RenderDocはオープンソースのツールです。

比較した結果

FrameDebugger

・シンプルで使いやすかった。覚えることも少ない。
・Editorとほとんどのビルドで動く(要Development Build)
・EventBrowserはEditorの場合Scene上で描画されているものをピックアップ
・MeshViewはShaderPropertiesが見られる(Editor上だとリソースをすぐに特定できる)
・TextureViewはEditorの場合はGameTabに、アプリの場合はアプリに表示される

RenderDoc

・細かい情報が見られるのでチューニングやバグ修正にはこっち。
・EditorとWindowsLinuxAndroidのみ(Development Buildは不要)
・EventBrowserは現在ツールが動いている環境での処理時間が計測される
・MeshViewはvertex shaderのIn/Outの値が見られる
・TextureViewは現在のDrawCallで描かれているものがハイライトされる

結局どっちがいいの?

お互いにいい点があるが、
サッと見るのならFrameDebugger、負荷やエラーを見るならRenderDoc

 

 

 

 

#7 Unityで仮想通貨を取扱えるようにしてみた

※コードや説明が多く含まれているので動画でお楽しみください

 

 

 

 

#8 Unity EditorからADX2の出力データを直接いじる魔改造

twitter.com

ADX2のざっくりした紹介をします。

CRI ADX2とは

・音の演出が組み込まれたライブラリ&ツール、Unityでも使えます
インタラクティブミュージックなどの演出にこだわれる
サウンドの制御や、Androidの再生遅延を軽減する
・インディー向けの無償エディションが提供されています

game.criware.jp

最近の利用事例

www.gamebusiness.jp

詳しい使い方はこちらをどうぞ

www.slideshare.net

専用ツール

ADX2では専用ツールで音の設定をする。
大量のデータ管理、演出作り、サウンドデザイナーとゲームプログラマーの分業体制の構築ができる。
同時再生数やフェードの設定を音に埋め込める。

ADX2でのちょっと面倒なこと

・ゲームと音が密接に連動する演出だとツールの行き来が面倒
・ちょっと設定を変えたい時も面倒
・一人で作っていると分業構築ができるメリットもない

Atom Craftを開かずに音データの修正をしたい

ADX2 for Unity Change Cue Settingsを作りました

再生上限数と先着優先なのか後着優先なのかの設定がUnityから変更できる

github.com

 

デモの動画

www.youtube.com

 

 

 

 

協賛企業紹介

Cluster株式会社

バーチャルプラットフォームを作っています。

クラスター会社紹介資料 / We are hiring - Speaker Deck

 

特徴として体験入社というものをしています。
評価ではなく、一緒に働けるかをお互いに判断するためにしています。
ご応募お待ちしています。

www.wantedly.com

 

株式会社ハシラス

体感重視のVRコンテンツを作る会社です。
現在採用枠が埋まっています。また機会がありましたらよろしくお願いします。

hashilus.co.jp

※コンテンツの紹介があるのでアーカイブ動画からどうぞ。

 

 

その他の勉強会紹介

meetup.unity3d.jp

meetup.unity3d.jp

次回Roppongi.unity #10は6/23日の予定です。

 

 

他の方の感想ブログとか

blog.mogmet.com

 

 

 

過去のRoppongi.unityの記事

raspberly.hateblo.jp

 

 

 

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。

【アセット紹介】Advanced Dissolveでディゾルブエフェクトを作る 2【Unity】

今回はアセットの紹介をしていきます。
紹介するのはAdvanced Dissolve
オブジェクトのディゾルブエフェクト(消滅エフェクト)を実装できるアセットです。

f:id:Raspberly:20210427221909p:plain

 

過去に同アセットの紹介記事を投稿しています。この記事はそのアップデート記事です。

raspberly.hateblo.jp

アセットのアップデートによりいろいろ変化したので書き直しました。
一応前の記事は残したままにしておきます。

f:id:Raspberly:20210428033256p:plain

 

お得なセール情報 (終了しました)

現在アセットストアではUnity春のアセット大セールが開催中!
500以上のアセットが50%OFF! さらに日替わりで限定アセットが70%OFF!
今回紹介する「Advanced Dissolve」もセール対象アセットです。
詳細とアセットの一覧はこちらのバナーからどうぞ

f:id:Raspberly:20210423215510p:plain

「Unity春のアセット大セール」は、日本時間の2021年4月12日pm16:00に始まりました。なお、このセールは2021年5月1日pm15:59に終了いたします。 500を超える最も人気のあるアセットが50%オフになるだけでなく、その中から毎日1つづつのアセットが日替わりで24時間限定で70%オフになります。

 

どんなアセット?

オブジェクトやTextMeshProをディゾルブさせるアセットです。
ディゾルブとは融解を意味し、オブジェクトの消滅や出現を表現できます。
モバイルやVR、URP、HDRPに対応しています。

f:id:Raspberly:20210428023714g:plain

 

 

 

 

開発環境

Unity2020.3.0f1

Advanced Dissolve ver2021.2

 

 

 

インポートの確認

アセットインポート完了時はこんな感じです。
ビルトイン、URP、HDRP用のunitypackageがあります。

f:id:Raspberly:20210426222020p:plain

プロジェクトに合わせたものをインポートしましょう。
この記事ではBuilt-inをインポートします。

デモシーンの確認

Amazing Assets/Advanced Dissolve/Example Sceneにデモシーンがあります。
事前にさわっておくとイメージがつかみやすいかもしれませんね。

f:id:Raspberly:20210427004802g:plain

f:id:Raspberly:20210427004833g:plain

f:id:Raspberly:20210427004859g:plain

f:id:Raspberly:20210427005027g:plain

f:id:Raspberly:20210427005147g:plain

 

 

 

 

 

クイックスタート

付属のドキュメントに従って動かしてみます。
詳しい手順やパラメータについてはドキュメントを参照してください。

単純なディゾル

スフィアの作成

Sphereを作り、この後作るシェーダーをMesh Rendererに割り当てます。

f:id:Raspberly:20210427023527p:plain

マテリアルの作成

新しくマテリアルを作成します。
シェーダーは「Amazing Assets/Advanced Dissolve」です。

f:id:Raspberly:20210427005652p:plain

いくつか種類がありますが、今回は「Amazing Assets/Advanced Dissolve/Standard/Metallic」を使用します。

カットアウトの設定

パラメータから、Advanced DissolveのStateをEnabledに変更します。

f:id:Raspberly:20210427005809p:plain


Cutoutのオプションから、StandardのSourceをNoneからCustom Mapに変更。
Mapは付属のノイズテクスチャを割り当てます。(Cutout Map 1とか)
この状態でClipスライダーを動かすとディゾルブがされます。これが基本的なディゾルブの設定です。

f:id:Raspberly:20210427015641g:plain


カットアウトの色

EdgeパラメーターのBase SourceをNoneからCutout Standardに変えると、カットアウト時のエッジの色を設定できます。

f:id:Raspberly:20210427015708g:plain

2つのテクスチャマップ

さきほどテクスチャマップを1つ設定しましたが、これは2つ設定できます。
CutoutのSourceを「Two Custom Maps」に変更。Map#2に2つめのテクスチャを設定します。

f:id:Raspberly:20210427020150p:plain

組み合わせ次第でさまざまなカットアウトが作り出せますね。(1+19、2+16、1+17)

f:id:Raspberly:20210427023435g:plain

 

ジオメトリックカットアウト(Plane)

ジオメトリックカットアウトはジオメトリックな形状にディゾルブさせる機能です。
Planeオブジェクトを使ってみます。

オブジェクトの用意

AdvancedDissolveGeometricCutoutController」がアタッチされたオブジェクトがシーンに必要です。
このコンポーネントが計算を行います。

f:id:Raspberly:20210427025941p:plain

空のゲームオブジェクトを配置し、アタッチしておきましょう。
同時にPlaneも作成しておきます。PlaneのMesh Rendererは切っておきます。(ディゾルブが見やすいように)

AdvancedDissolveGeometricCutoutControllerの設定

TypeをPlaneに変えて、Planeと先ほど作ったDissolveマテリアルをアサインします。

f:id:Raspberly:20210427223315p:plain

 

マテリアルの設定

CutoutのGeometric TypeをPlaneに変更。
EdgeのBase SourceをCutout Geometric(Allでもよい)に変更

f:id:Raspberly:20210427223516p:plain

これでPlaneを動かすとその位置によりSphereがディゾルブされます。

f:id:Raspberly:20210428003638g:plain

 

 

 

その他のパラメータ

いろいろパラメータがありますがその中でも面白いものを紹介

 

マテリアルのEdge BaseからIntensityの値を上げるとエッジが光ります。
ブルームのポストプロセスをつけるとわかりやすい。

f:id:Raspberly:20210427234717p:plain

f:id:Raspberly:20210428003657g:plain

 

CutoutのNoiseの値を増やすと、エッジに揺らぎを与えることができます。

f:id:Raspberly:20210427234850p:plain

f:id:Raspberly:20210428003756g:plain

 

マテリアルのMap ScrollからUVスクロールができます。

f:id:Raspberly:20210427235307p:plain

f:id:Raspberly:20210428003845g:plain

 

 

Invertから反転させたりも。
あらかじめ2つ用意して、片方だけ反転させると2つの世界を切り替えるような演出ができます。

f:id:Raspberly:20210428031139p:plain

f:id:Raspberly:20210428003919g:plain

 

 

 

実際に試してみる

ユニティちゃんのモデルをディゾルブしてみます。

 

マテリアルの編集とアサイ

ユニティちゃん用のマテリアルを編集します。
万一のため元のマテリアルは残しておきたいので、事前にマテリアルを複製しておきます。

シェーダーを「Amazing Assets/Advanced Dissolve/Unlit」に変更。
パラメータをこんな感じに設定。

f:id:Raspberly:20210428000643p:plain

 

なんか薄暗い場合はAlbedoのカラーを見直します

f:id:Raspberly:20210428000604p:plain

 

Controllerの設定

空のゲームオブジェクトを作成し「AdvancedDissolveGeometricCutoutControllerコンポーネントをアタッチ。
TypeをPlaneにして、Planeとユニティちゃんのマテリアルをアサインします。

f:id:Raspberly:20210428000759p:plain



これで完成です。Planeの位置に合わせてディゾルブしました。

f:id:Raspberly:20210428003959g:plain

 

 

 

実際に試してみる2

前回の記事と同じく教室と保健室を切り替えるデモを作ってみました。
設定などは上で紹介した通りです。

unity-chan.com

 

教室のマテリアルを同じように設定して、「AdvancedDissolveGeometricCutoutController」にアサインすれば完成です。

f:id:Raspberly:20210428021058p:plain

 

Planeに合わせて「ユニティちゃんがいる教室」と「ゆっこがいる保健室」が切り替わります。

youtu.be

 

 

 

まとめ

・Advanced Dissolveでディゾルブエフェクトを簡単に作成できる
・使い方はマテリアルのシェーダーを置き換えるだけ

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【勉強会レポ】: Unity春のアセット祭り【登壇しました】

勉強会のレポート(メモ)です。
参加したのはこちら「Unity春のアセット祭り2021」

meetup.unity3d.jp

ハッシュタグ : #Unity春のアセット祭り

 

f:id:Raspberly:20210423215759p:plain

 

配信アーカイブはこちら

www.youtube.com

 

Unity Learning Materialsにも掲載されました。

learning.unity3d.jp

 

 

イベントの概要

アセットストアユーザーのみなさまが今注目なさっている推しアセットをご紹介いただくオンラインイベントを Unityステーションとして「Unity春のアセット大セール期間のど真ん中の日時(※1) にYouTubeでプレミア公開で開催いたします。

大人気アセットや必ず持っておくべきアセットなど、アセットストアの代表格とも言うべきアセットを、そのアセットについて深い思い入れがあるユーザーのみなさんに熱く語っていただくオンラインイベントです。

 

イベントページから登録してイベント後のアンケートに答えると抽選でアセットストアの特別クーポンがもらえます。
参加登録された方は忘れずにどうぞ。

 

 

現在開催中の「Unity春のアセット大セール」についてはこちら

f:id:Raspberly:20210423215510p:plain

 

 

 

#1 In-Game Debug Log for AR and VR devices

Denikさんによる「In-Game Debug Log for AR and VR devices」の紹介です。

ARやVRバイスデバッグログをゲーム内に表示するアセットです。
適当なスペースにログを置けるのが便利です。

利用方法

アセットストアからインポートして、付属のプレハブをシーンに配置するだけ。
DebugLogPanelコンポーネントからカスタマイズもできます。

紹介記事

自身のブログでも紹介記事を投稿しています。

xrdnk.hateblo.jp

 

 

#2 TopDown Engine

のぼるさんによる「TopDown Engine」の紹介です。

見下ろし型ゲームの仕組みが一通り入ったアセットです。
リソースを置き換えるだけで自分なりに改造できます。デモも豊富です。

機能の紹介

・アイテムメニュー 拾って装備したり切り替えたり仕様する仕組み
・AI 巡回、追従、攻撃など思考の設定
・他にも扉やワープなどステージギミックが様々用意されています

使用するポイント

・デモを確認する
・作りたいイメージに合うデモを改造してみる
・ドキュメントは翻訳機能で
・追加したい機能は別アセットで入れる

 

 

 

#3 Mesh Baker

オノッチさんによる「Mesh Baker」の紹介です。

メッシュやテクスチャを1つにするツールです。
パフォーマンスの改善やメッシュやマテリアル数制限に対応できます。

 

 

 

 

 

#4 Peek - Editor Toolkit

私による「Peek - Editor Toolkit」の紹介です。

Unityのワークフローを改善・効率化するアセットです。

 

 

 

#5 X-Frame FPS Accelerator

Limさんによる「X-Frame FPS Accelerator」の紹介です。

性能が低いPCでの開発や、スマホで動作させる時に便利なアセットです。
フレームレートが低いときに画面のクオリティを下げてくれます。URP対応です。

使い方

メインのカメラに、X-Frame FPS Acceleratorコンポーネントをアタッチするだけ
フレームレートとクオリティを画面に表示するデバッグ機能もあります。

設定項目

クオリティを下げるFPSのボーダーや、クオリティは下げたいが影は消さないようにする項目があります。

 

 

 

 

 

 

登壇した感想

久々にイベント登壇しました。(Gotanda.unity #15以来)
最近喋る機会がないため噛みまくりでしたが、事前録画のため事故がないのはいいですね。
録画して聞く自分の声が気持ち悪すぎてもうね・・・

 

 

Peek - Editor Toolkitについてはスライド内でもあった通り過去に紹介記事を投稿しています。
基本機能の解説をしているのでこちらも合わせてどうぞ。

raspberly.hateblo.jp

発表ではGroupsProbe2つの機能を取り上げていますが、最初はSticky Drag & Dropも取り上げる予定でした。
かなり詰め込まなくてはいけなくなるため最終的に没になりましたが、こちらも便利な機能です。
これらは小さな効率化ですが、開発中は何度も行う操作のため結果的に開発時間の大幅な短縮が狙えますよ。


過去にHumble Bundleの対象アセットだったため、持ってるかたはぜひお試しください。

www.asset-sale.net

 

 

協賛イベント

cluster.mu

 

 

 

 

スライドや発表練習で新しいアセット紹介記事を書く余裕がなかったため、
セール終了までに1つは書いておきたい所。

 

 

 

※セールページへのリンクのみアフィリエイトリンクになっています。

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。

【Unityネタ】サイズを変えても比率が変化しない「ふきだし」を作る

今回はUnityネタをやっていきます。
9スライスを使ってサイズが変化してもカクカクにならない「ふきだし」を作っていきます。

f:id:Raspberly:20210411232925p:plain

 

はじめに

この記事を書こうと思ったきっかけはこちらです。
Twitterでも話題のバーチャル・ジャパン・プラットフォームの紹介動画
とても印象的な場面がたくさん出てきます。

www.youtube.com


みなさんも気になる所があるかと思いますが、個人的に一番気になったのがこのシーン!

f:id:Raspberly:20210411183709p:plain

このふきだしの部分です
左右に引っ張っているせいなのか比率が変化してカクカクになっています。
これは見栄えがよくないですね。

 

 

そこで今回は、9スライスを使ってサイズが変化してもカクカクにならないふきだしを作ってみます。
これに関する解説記事はたくさんありますが、さわったことがない領域なのでまとめておきます。

 

 

開発環境

Unity 2020.3.0f1

 
吹き出しの素材はこちらを使わせていただきました

カスタマイズ可能!フリーアイコン

 

 

Imageをそのまま大きくするとどうなるか

まずはダメな例としてImageをそのまま大きくしてみます。
ImageにSpriteを割り当てWidthを大きくしてみると、左右の黒枠や下の出っ張りが引き延ばされカクカクになります。

f:id:Raspberly:20210411220624g:plain

これはImageに割り当てられているSpriteの比率が変化し、引き伸ばされているためおこります。

 

 

Spriteの9スライス

これを回避するためにはSpriteの9スライスを行います。
9スライスは、Spriteを9分割しサイズが変更されてもアスペクト比が維持されるようにする2D手法です。
Sprite Editorから分割できます。

2D Spriteパッケージのインストール

Sprite Editorを使うには、Unity Package Managerから2D Spriteパッケージをインストールする必要があります。

f:id:Raspberly:20210411213847p:plain

 

テクスチャのImportSettings

ふきだしテクスチャのImportSettingsを変更します。
Texture TypeをSpriteに、MeshTypeをFull Rectに変えます。変更後はApplyを忘れないように。

f:id:Raspberly:20210411223316p:plain

 

Sprite Editorからスライス

そのままImport SettingsからSprite Editorを起動します。

f:id:Raspberly:20210411225041p:plain

 

ここでSpriteを分割する境界(緑色の線)を設定します。
ふきだしの尖っている部分や角が引き延ばされないよう↓のようにします。

f:id:Raspberly:20210411225216p:plain

境界設定後はApplyを忘れないように

ImageのImage Typeを変更

SpriteをCanvas内のImageに設定したら、Image TypeをSliced*1に変更します。

f:id:Raspberly:20210411225603p:plain

 

これで完成です。
サイズを変更しても角や尖っている部分は引き延ばされないようになりました。

f:id:Raspberly:20210411230900g:plain

 

 

まとめ

・Spriteを9スライスすることで、サイズが変化しても比率を保つことができる
・9スライスはSprite Editorから行う
・Image TypeはSlicedかTiledにする

f:id:Raspberly:20210411233308g:plain

 この辺はあまり詳しくないので間違っている所や改善点があればコメントなどによろしくお願いします。

 

 

 

 

 

 

参考資料

docs.unity3d.com

 

shikaku-sh.hatenablog.com

 

 

テキストに合わせてサイズを可変させるにはこちらがオススメ

tech.pfq.jp

 

 

*1:Tiledでもよい、違いはこちらスプライトの 9 スライス - Unity マニュアル

【Unityネタ】Project PLATEAUを使って東京の3Dモデルを表示する

今回はUnityネタをやっていきます。
Twitterで話題の3D都市モデル「PLATEAU」をUnityに取り込んで表示するところまでやってみます。

f:id:Raspberly:20210402041110p:plain

f:id:Raspberly:20210402041552p:plain

(例として本当は新宿区を全て表示したかったけどマシンパワーが足りないので一部のみ)

実行環境

Unity 2020.3.0f1

3D都市モデル(Project PLATEAU)東京都23区(FBX 2020年度) バージョン1.0.0

 

 

PLATEAUとは

PLATEAU(プラトー)は3D都市モデルのオープンデータ化プロジェクトです。
現在は東京23区のみですが、今後増えるようです。

PLATEAU は、国土交通省が進める3D都市モデル整備のリーディングプロジェクトである。都市活動のプラットフォームデータとして3D都市モデルを整備し、オープンデータとして公開することで、誰もが自由に都市のデータを引き出し、活用できるようになる。

www.mlit.go.jp

 

 

PLATEAU VIEW

PLATEAUの3Dモデルをブラウザ上で確認できるWebアプリです。
どういう感じのモデルなのかが大体わかると思います。

www.mlit.go.jp

www.youtube.com

 

 

利用規約

規約に従っている限り、複製、公衆送信、翻訳、変形の翻訳が自由にできます。商用利用もできます。

・コンテンツを利用する場合は出典を、加工する場合は加工している旨を記載すること
コンテンツ内に第三者著作権やその他の権利を有している場合があり、それらは利用者が許諾を得ること

建築物の中には看板企業ロゴが入っている場合があり、
それらを使う場合は個別に許諾を得ないといけないようです。
どれがセーフでどれがアウトなのか利用者側で判断するのが難しそうではあります。

f:id:Raspberly:20210402040326p:plain

 

原文はこちら

www.mlit.go.jp

 

 

 

PLATEAUのダウンロード

こちらのページからダウンロードできます。

www.geospatial.jp

現在はCityGML形式3D Tiles形式(建物)、FBX形式の3種類がダウンロードできます。
※3D Tiles形式(道路)、OBJ形式は近日公開予定

 

Unityでそのまま使えるFBX形式をダウンロードします。
CityGMLと3D Tilesは3D都市・地理用データフォーマットです。そのままUnityで扱うことはできません。

www.geospatial.jp

 

範囲図データとFBXデータの2つが置いてあります。

f:id:Raspberly:20210402152511p:plain

FBXデータの名前にある数値は範囲図データと結びついています。
例えば、新宿あたりのデータは533945になる。

f:id:Raspberly:20210401191445p:plain

今回は533945を使います。

 

ダウンロード後はファイルを解凍。その中にさらに圧縮ファイルがあるのでこれも解凍。
それぞれ種類ごとに分かれています。

f:id:Raspberly:20210402021716p:plain

 

 

 

Unityへの配置

UnityのAssets配下にそのままD&Dしてインポートする。容量がすさまじいので時間がかかる場合があります。
PCのスペックに不安があるのなら、小分けにインポートした方がいいです。
インポートが完了したらシーンに配置してみます。無事表示されればOK。

brid

調べてもよくわかりませんでした、橋とか高架とかのモデルっぽい?

f:id:Raspberly:20210402041645p:plain


dem

地形のデータです。(厳密には標高データのことらしい)

f:id:Raspberly:20210402041852p:plain

 

LOD1

テクスチャのないモデル群です。↓のスクショはプレハブ1つ分です。

f:id:Raspberly:20210402024802p:plain

これだけでもかなりの負荷です。

f:id:Raspberly:20210402024918p:plain


LOD2

LOD1よりも細かく分割されたモデル群でテクスチャ付きのものが多いのです。
ただしその分負荷は高め。

f:id:Raspberly:20210402025324p:plain

f:id:Raspberly:20210402025413p:plain
負荷がとてつもなく高いためつよつよマシンでない場合なんらかの軽量化が必須です。

 

 

インポート中にUnityが止まった場合

タスクキルなどで強制終了してUnityを開きなおすと正常にインポートできていない場合があります。
その時はProjectビューからFBXファイルを右クリックしReimportを選ぶと再度インポートが開始されます。

f:id:Raspberly:20210402030925p:plain

 

 

 

 

軽量化

Mesh Bakerやこちらの記事を参考に軽量化することをオススメします。

zenn.dev

上のLOD2の所で紹介したものを軽量化してみましたがドローコールがかなり減りました。

f:id:Raspberly:20210402031817p:plain

f:id:Raspberly:20210402031853p:plain

 


こっちの方法もよさそう

 

qiita.com



 

まとめ

・PLATEAUから東京23区の3DモデルがUnityで使える
・プロジェクトにインポートしてシーンに配置するだけ
・容量が大きく負荷も高いため軽量化した方がよい
TwitterでPLATEAUをキーワードに検索するとさまざまな知見が得られるのでオススメ

PLATEAU - Twitter Search

 

 

 

参考資料

www.moguravr.com

www.hcc.co.jp

qiita.com

 

www.gsi.go.jp

 

 

※出典:3D都市モデル(Project PLATEAU)東京都23区 (https://www.geospatial.jp/ckan/dataset/plateau-tokyo23ku)
※Project PLATEAUのリンク先は国土交通省が運営しているWebサイトです。