テラシュールブログ

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

Unity

【Unity】ECSの新しいAPI「Entities.ForEach」について

ECSで[Inject]属性が非推奨になり、新しいAPIが追加されました。 https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/Documentation%7E/ecs_best_practices.md 個人的に、多少パフォーマンスを犠牲にして簡単になるなら、プロ…

【Unity】LineRendererの幅を変える設定の場所(たぶん2018.3以降用)

LineRendererで線の幅を変える項目が見つからなかったので、混乱したという話です LineRendererのWidthが無い! Widthの行方 LineRendererのWidthが無い! ふと思いついて、LineRendererの線が指し示す方向へカーソルを流す的なのを作ってる時の話じゃ。 ち…

【Unity】TextMeshProで「数字」をテキストで表現する時にGC Allocを発生させない2つの方法

今回はTextMeshProを使用する際に、UIに文章を表示する際のGCを抑えるアプローチについてです。 数字を表示する際にGCが発生するのを回避したい SetCharArray(...)を使用する SetText(...)を使用する エディターではGCが発生する点に注意 SetCharArray(...)…

【Unity】ジョブシステム上でも動かせるNavMeshの経路計算(Experimental)

ECSのデモで使用されていた、ジョブシステムでも動かそうと思えば動かせるNavMeshのサンプルです。 ちゃんと解説しようとも思いましたが、正直使い所が思いつかないので適当になります。 NavMeshQueryを利用した経路探索 サンプルコード 大雑把な解説 感想 …

【Unity】TextMeshProにFont FallbackとDynamic SDF Systemが追加、日本語が使いやすくなった。

Unity 2018.3(TextMeshPro1.4)からFont FallbackとDynamic SDF Systemが追加され、柔軟なSDFの利用が可能になりました。 結論 TextMesh Proでダイナミックにフォントを取得して使用する Font Fallback Dynamic SDF System 関連 結論 以下のような使い分け…

【Unity】1枚の立ち絵から「バストアップ画像」や「顔だけ」のスプライトを切り出して使う

面白い議論が上がっていたので、少し試しにやってみました。 顔だけアイコンでマスクをするのは勿体無い バストアップのスプライトを用意する やり方 オマケ:ポリゴンの切り抜き オマケ:Atlasを使用する場合での注意 関連 顔だけアイコンでマスクをするの…

【Unity】UnityとAndroidアプリの64bit対応

Android 64bit対応が本格化してきたので、少しまとめてみます。 Android 64bit対応 2019年8月から64bit対応してない新規アプリの公開が出来なくなる。更新は可 2021年8月から64bit対応してないアプリを排除。Unityも含む Android 64bit対応済のUnityバージョ…

【Unity】知らないとハマるかもしれない、2Dでスプライトアニメーションが即座に切り替わらない問題の対処方法

今回はMecanim(Animator Controller)を使用している場合に即座にアニメーションが切り替わらない問題、その対策についてです。 例えば上の画像では、右はジャンプ開始時や着地直後に速やかにアニメーションが切り替わっているのに対して、左側はモーション…

【Unity】AssetBundleでSpriteAtlasを使用する際に知らないと起こすかもしれないトラブルと、その回避方法

Sprite Atlasの設定 幾つかのページ*1*2にて、Sprite AtlasとAssetBundleの組み合わせで問題が起きるという話を聞いたので、確認してみました。 SpriteAtlasをAssetBundleに格納しただけだと問題が起こる 手っ取り早い解決策:SpriteAtlasに登録したSpriteも…

【Unity】Cinemachineで撮影の構図を色々して良い感じにしたい

この記事はUnity #2 Advent Calendar 2018の20日目の記事です。今は21日だって!?それは本当かい!?まさか遅刻したのに間に合った事にしたのかい!? qiita.com 前回はがむ (@gam0022) | Twitterさんの[Unity] カスタムシェーダーでTextMeshProに独創的な…

【Unity】Photoshopで作った画像をレイヤー単位で分割、配置/描画順をそのままにSprite Renderで配置してくれる 「2D PSD Importer」

今回はPSDのスプライトをレイヤー単位でスライスし、Photoshopの配置そのままにインポートするPSD Importerという機能を紹介します。 PSD Importer PSD Importerの導入 PSD Importerの設定 感想 関連 PSD Importer PSD Importerは、PSBをインポートするカス…

【Unity】iOS/Androidでアプリを休止してもダウンロードを続ける BackgroundDownload

今回はタイトルの通り「アプリを終了(もしくはサスペンド)してもダウンロードを継続する」機能を提供するアセットの機能と使い方についてです。 このアプローチを導入すると、アプリ開始時の「追加コンテンツダウンロード待ち」でアプリを起動しっぱなしで…

【Unity】Timelineからメソッドを呼ぶ新機能 「Marker」と「Signal、Signal Receiver」

今回はTimelineから特定のメソッドを呼ぶ方法について紹介します。 Unity 2019.1.0a10で追加された、Timelineでメソッドを呼び出すSignalTrackの使い方 #unitytips pic.twitter.com/BEPvS1D6Qb— 椿 (@tsubaki_t1) 2018年11月29日 この機能はUnity 2019.1 a11…

【Unity】SceneViewのカメラが回せなくなった時の対処法

SceneViewが回せないという動作になりました。 コレの解決法についてです。 SceneViewのロックを外す 結論から言えば、SceneViewのロックが入っていた為でした。 ロックされていると、右上のGizmoの色が薄くなります。 なので、このロックを外してやれば、期…

【Unity】小さく、軽く、早い、Tiny Mode(Project Tiny)についてのアレコレ

コンパクトなUnityゲームを出力するTiny Modeのプレビュー版が公開されました。 ということで、早速触ってみます。 この記事はTiny Mode 0.13.2 previewで作成されています。 モバイルブラウザ向けUnity 現状使える機能群 スクリプトはECSベース レンダリン…

【Unity】はじめてのScriptable Build Piepline

今回は、先日行われたGotanda.unity #9で話した「はじめてのScriptable Build Pipeline」の解説記事です。 スライド Scriptable Build Pipelineとは? Scriptable Build Pipelineの使い所 導入 Scriptable Build Pipelineを理解するためのサンプルコード 関…

【Unity,ECS】他のEntityが持つComponentDataを追跡する - ComponentDataFromEntity

今回もECSの話です。 ゲームでは特定のオブジェクトを追跡するというのはよくある話です。例えばカーソルやユニット、アイテムやパスなど。 ECSでも同様にそういった機構が必要になる事は多々あります。今回はEntityから特定のキャラクターを追跡させる方法…

【Unity】最近ECSで色々と遊ぶ際によくやってる、4つのTips

今回は自分がECSで色々やるときに、よくやっているTipsを3つ紹介します。 パッケージをPackagesに移す inputDepsのチェーン Debug.Logを出す NativeArrayを自動的に開放するジョブ 関連 パッケージをPackagesに移す PackageManagerで導入したパッケージはC#…

【Unity】Unity Hubで表示されていないバージョンのUnityをダウンロードする

今回はUnityHubで表示されていないバージョンのダウンロードについてです。 UnityHub経由でダウンロード出来ない 解決編 UnityHub経由でダウンロード出来ない Unity Hubは複数のUnityのバージョンをインストールするのに便利です。 複数のUnityのバージョン…

【Unity】AR Foundation(ARKitとARCoreのマルチプラットフォームAR環境)の超入門

今回はARCoreとAR Kitの両方に対応したマルチプラットフォームAR環境である「AR Foundation」、その最初の一歩として「とりあえず動くもの」の作り方を紹介します。 AR Foundationとは? 使い方 ARのセットアップ 平面の検出をグラフィカルにする オブジェク…

【Unity】Multi-Scene Physicsで、物理演算の世界を分割する

Unity 2018.3の目玉機能(???)の一つである物理演算周りの更新、その一つであるMulti-Scene Physicsについてです。 Multi-Scene Physics PhysicsScene単位で物理演算の速度を変化させる PhysicsScene単位でRaycast 使い方 面白い機能だね!どんな時に使えるの…

【Unity】AssetBundleからモデルをロードする際の最適化ポイント

ゲームでキャラクターをロードしたりする際、画面がカクつくというのは割とよく見る光景です。今回はその辺りの対処法についてメモしておきます。 Async Upload Pipeline(非同期アップロードパイプライン)の活用 シェーダーのウォーミングアップ シェーダ…

【Unity】CinemachineのClear Shotという機能

自分はCinemachineの機能は結構好きで、色々と遊んでみたりしているのです。それでもなお首を撚る系の機能「Clear Shot」についてです。 Clear Shot キャラクターが隠れた時に、見える位置にカメラを動かす 手順 キャラクターが近づいてきた時にカメラを切り…

【Unity】IJobParallelForTransformでTransformを並列処理する際でも、スレッドをフル活用する為のポイント

今回はC# Job SystemでTransformAccessArrayを利用した際の、ジョブの分割数についてのお話です。 TransformAccessArrayが並列処理されない? 親が同じならば単一のジョブで実行される ジョブの分割数を制限 複数のIJobParallelForTransformを発行するとどう…

【Unity】NavMeshのRaycastを非同期で撃つ!

Unity 2018.3からNavMeshのRaycastを非同期で実行することが出来るようになったので、その方法についてです。 なおExperimentalなAPIを使用するので、今後変わるかもしれません。 NavMeshQuery経由で非同期でRaycastを実行 使ってみる 非同期で動かそう! 関…

【Unity】ECSで配列を格納する Dynamic Buffers

今回はECSで配列を使用する方法についてです。 ECSで配列を使用する ECSに格納するComponentDataには配列を格納出来ません。とはいえ、マネージドなメモリも格納出来るSharedComponentDataは大量の種類を生成するとECSの効率が著しく下がるので余り良くあり…

【Unity】SpriteAtlasでパックしたスプライトをUIに使用したときに出るゴミの対処

SpriteAtlasを始めとしたパッキングのアプローチを使用することで、スプライトの描画時に必要なパスの数が減り、パフォーマンス的に良い感じになります。よく言われるDrawCallやSetPassの削減というやつです。 さて、SpriteAtlasでスプライトをパッキングし…

【Unity】Enumeratorを使用して、List<string>から文章を一つずつ取り出す

今回はEnumeratorを使用して文章を一つずつ取り出していきます。余りに使わない技術なのでよく忘れるのですが、その度に思い出すのも面倒なのでココにメモしておきます。 リストから要素を取り出す そうだ、Enumeratorを使おう 使えるのはList 感想 関連 リ…

【Unity】ECSでシーンをロードする様にEntity群をロードする

今回はECSにおけるEntityのセーブ及びロードについてです。 つまりGameObjectをSceneやPrefabに固めるように、Entity(Entity & ComponentData)をファイルとして書き出します。 なおUnity 2019辺りのタイミングでちゃんとしたエディターサポートが始まるの…

【Unity】3Dアクションの連続攻撃(コンボ)で学ぶAnimatorControllerのtips

今回はボタンをタイミング良く押すと連続攻撃になる動作を作成します。 格ゲーのようなコマンド入力ではなく、3Dアクションによくあるような非常に単純なもの です。 ボタン連打でコンボ攻撃 1. ボタンを押したら殴る 2. ボタンを押したら次の攻撃への実現 3…