テラシュールブログ

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

C#

【Unity】Assembly definition fileのDefine Constrainsで、Scripting Define Symbolsで定義したシンボル毎に動作を切り替える

Assembly definition fileに少し便利な機能が追加されていたので、メモ 本記事はUnity 2018.3がベースです。 Assembly definition file Assembly definition fileとプラットフォームによる動作の切り替え Define Constrains(制約を定義) 感想 関連 Assembly …

【Unit】NativeListをIJobParallelForで使いたい

今回はNativeListをIJobParallelForを使用して利用してみます。 NativeListをIJobParallelForで使う 使い方(NativeListの用意) 使い方(NativeListの内容を更新) 中身を確認する 実行結果 コード全文(を少し改造したもの) 感想 関連 NativeListをIJobPa…

【Unity】ECSでComponentGroup内のComponentDataを取得する新API、ToComponentDataArrayとCopyFromComponentDataArray

ComponentDataArray(型)が非推奨になり、代わりにToComponentDataArray(...)とCopyFromComponentDataArray()が追加されました。 これは今までのComponentDataArrayと異なり、NativeArrayを取得します。 ToComponentDataArrayとCopyFromComponentDataArray…

【Unity】ImmediateWindowで複数のMaterialの設定を一括更新してみる

今回はImmediateWindow(Preview)を使用して、複数のマテリアルの一括更新をやってみます。 正しい使い方では無いっぽいですが、正直な所すごくシックリする使い方でした。 Immediate Windowは開発効率を上げるツールではない それでもエディターの作業効率…

【Unity】Unity2019.1から"Timeline"がPackage Managerへ移動、ソースコードの確認や変更が可能に

Unity 2017から導入されたTimelineですが、ついにUnity 2019.1からPackage Managerへ移動になりました。 Timeline、Packageへ Timelineのソースコード確認とカスタマイズが可能に ライセンス 関連 Timeline、Packageへ Timelineは殆どC#で記述されている割に…

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

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

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

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

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

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

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

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

【Unity】ECSで複数のWorldを運用する方法

「デモとしてのECS」が欲しいなら使いませんが「ゲームとしてのECS」が必要なら知っておくと良い、複数のWorld運用についてです。 ECSを”ゲーム”にするためには 複数のWorldを管理する Worldを作成する 動かすWorldを切り替える Tips World.Active Default W…

【Unity】ECSのComponentSystem実行順をコントロールする

今回はECSのComponentSystemも実行順番をコントロールする方法についてです。 ComponentSystemの実行順番は非常に重要 実行順の確認方法 特定のComponentSystemの前に実行する、後に実行する UpdateInGroupで処理のタイミングを大まかに纏める 関連 Componen…

【Unity】Cinemachineの挙動を拡張してみる

Cinemachineのカメラの動きを拡張して、パンするだけのやつを作るなど。標準Composeでも近いことが出来るけど、最初に動いちゃうのがね pic.twitter.com/e1Oak8jAz4 — 椿 (@tsubaki_t1) September 2, 2018 今回はCinemachineの挙動を拡張してみました。 Cine…

【Unity】Roll a BallのカメラをCinemachineで制御したら結構良い感じになった(と思う)

CinemachineでRoll A Ballのカメラワークをやってみます。 Roll a Ballとカメラワーク カメラが追跡する対象を指定する カメラの移動設定 最も基本となる動作に近いTransposer & World Space 対象の移動先を予測して向きを変える 世界の裏側を見せないように…

【Unity】C# Job SystemからECSのEntityやComponentDataを追加・削除・変更する指示を出す

今回はECSのComponentDataの追加や削除・変更といった動作をJobSystem上から指示する方法についてです。 C# Job SystemからComponentDataの追加・削除等を指示する BarrierSystem サンプルコード IjobParallelFotやIJobProcessComponentDataで使用するには?…

【Unity】Allocator.TempJobで作ったNativeArrayを自動的に開放する

今回はNativeArrayの開放の方法についてです NativeArrayの削除 .Tempは普通に開放 .TempJobは少し楽 サンプル NativeArrayの削除 NativeArrayでコンテナを作る際、アロケータのモードに「Temp」「TempJob」「Persistent」の3つを選択することが出来ます。 …

【Unity】構造体の配列(NativeArray)と参照渡し

今回は構造体を配列(NativeArray)にした時の、そのアクセスについてです。 ECSとJobSystemは構造体の配列を使う 配列からrefやoutで参照を貰う事は出来ない そうだ、unsafeを使おう ArrayElementAsRefで要素のrefを取得する 関連 ECSとJobSystemは構造体の…

【Unity】Unity 2018.1でunsafeなコードを使う

今回はunityでunsafeなコードを使う方法についてです。 以前はUnityは公式的にはUnsafeはサポートしていませんでしたが(unsafeを使う手順は存在して、IL2CPPもunsafe向けコードを出力していた)、Unity 2018.1辺り?からオプションとしてunsafeに対応したみ…

C#のコードがどのようなILに変換されるのかを確認するWebサービス SharpLab

C#

以前に教えてもらった、C#のコードがどのようなILに変換されるのかを確認することが出来るWebサービスについてです。時々ど忘れするので、こちらにもメモしておきます。 SharpLab sharplab.io SharpLabは、コードをILやアセンブリに変換することが出来るサー…

【Unity】独自に作成したスレッドの処理時間をCPU Profiler(Timeline)で確認する

まんまタイトルの通りで、.NETで作成したスレッド上の処理時間をProfilerに乗せる方法についてです。 Profilerで負荷のかかっている場所を見つける 非同期処理とProfiler 複数フレームを跨げる 関連 Profilerで負荷のかかっている場所を見つける 処理負荷や…

【Unity】C# Job Systemを使う時によく見るエラー

今回はC# Job Systemを使ってるとよく見るエラーについてです。 A Native Collection has not been disposed, resulting in a memory leak. JobTempAlloc has allocations that are more than 4 frames old - this is not allowed and likely a leak nvalidO…

【Unity】C# Job Systemを自分なりに解説してみる

今回はUnity 2018.1の目玉機能であるC# Job Systemについて紹介します。 C# Job Systemは並列処理である 並列処理と非同期処理(バックグラウンド処理)の異なる立ち位置 要素を並列して処理する C# Job Systemの特徴 実際に使ってみた まずはRaycastCommand…

【Unity】特別なコードをあまり書かずに "別シーン内のオブジェクト" へアクセスするアイディア

Unityで別オブジェクトの情報を取得したり操作する上で、最も簡単な方法はInspectorに露出して参照先をセットすることです。 ただ、このアプローチはシーンを分割する事になると厄介です。UnityのSceneは別のSceneのオブジェクトに対してアクセス出来ないの…

【Unity】Assembly Definition Filesという神機能

今回は地味ですが神機能なAssembly Definition Filesについて紹介します。この機能は地味ですが、Unity開発の上で発生してる問題を(意図せず)かなり解決してくれるので、Unity 2017.3以降を使う人は是非覚えておいた方が良いかもしれません。 物自体は、C#…

【Unity】IExposedPropertyTableを使った、アセット↔シーン間連携

今回はPlayableDirectorで使用しているIExposedPropertyTableを利用してみます。 正直言えば使える機能では無いように思いますが、この実装からTimelineのResolver運用周りを見直すことが出来たら幸いです。 IExposedPropertyTableはアセットからシーン内の…

【Unity】UnityScriptをC#に変換する unityscript2csharp

2017系でレガシー判定のUnity Script(Java Script)をC#に変換するプロジェクトについてです。 Unity Scriptは死んだ!何故だ! Unity ScriptをC#に変換する 関連 Unity Scriptは死んだ!何故だ! かつてUnityのチュートリアルやサンプルプロジェクトで使用…

【Unity】ITimeControlで、Timelineから"コンポーネント"を操作する

今回はTimelineのクリップからMonobehaviourを継承したコンポーネントを手軽に操作する方法について紹介します。 Timelineで手軽に動かしたい ITimeControlインターフェースはTimelineから呼ばれる 実際に回転させる コードの準備 Timelineにコンポーネント…

【Unity】PrefabにScriptableObjectを格納する

今回はPrefabにScriptableObjectを格納する話です。 ScriptableObjectを使うと何が良いの? SriptableObjectをPrefabに格納してしまおう サンプル Tips ScriptableObjectを使うと何が良いの? Prefabをインスタンス化する場合、コンポーネントの複製が行われ…

【Unity】ScriptableObjectを使用した、コンポーネント・シーン間でのデータ共有について

今回はScriptableObjectを使用したComponentやScene間でのデータ共有についてです。なお、この記事は30回近く書き直した*1という曰く付きの記事で、場合によっては消えるかもしれません。 ScriptableObject ScriptableObjectはアセットでありインスタンスで…

【Unity】コンポーネントのイベント実行順についてのTips

GameObjectにアタッチしたスクリプトの実行順番は、特に何もしなければ割とランダムです。今回はその辺りについて少し整理します。 スクリプトの実行順番 スクリプトの実行順を制御する Script Execution OrderをGUIで設定 メタデータに直接書き込む Default…

【Unity】クラス名からTypeを取得する

クラス名(文字列)からTypeを取得する方法についてです。 タイプを取得する Unity 5.5以降の場合 タイプを取得する リフレクション等を駆使して何らかのアクションを行うエディタ拡張を作る際、名前からクラスのTypeを取得したく鳴る事があります。 その辺…