テラシュールブログ

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

Unity

【Unity】GameObjectもECSも使いたい Hybrid ECSについて

ECSは現状正直な所、物量が必要な部分をECSで試して大まかな部分は既存のMonoBehaviourやUnityEngine系のコンポーネントを使うのがベターな回答です。今回はECSとGameObjectを連携させる手法についてを紹介します。 検証バージョン:Unity 2019.3、Entities …

【Unity】JobSystemが動作しているスレッドの番号を取得する

複数のジョブで処理を行う時、全てのジョブが同じバッファに格納しようとすると当然競合を起こします。コレを回避するために排他処理を行う訳ですが、それを行わず計算結果を格納する方法を考えてみます。 ジョブ毎に計算結果を格納する対象を切り替える 利…

【Unity】JobSystemが使うワーカースレッドの数を制限する

たぶんUnity 2019.3から、ワーカースレッドの数を制限出来るようになったっぽいです。 ワーカースレッドの数を制限する ワーカースレッドの数 ワーカースレッドの数を制限する UnityのJobSystemは基本的に「使用できる全てのスレッドを使用」します。これは…

【Unity】低フレームレートでも、きれいな入力を受け取りたい

InputManagerでは入力情報はフレームレートに強く依存しており、その中間で取得する情報の大抵は破棄されていました。 InputSystemでは中間の情報をバッファとして確保・使用できるようになったので、それを使用してフレームが低くてもキレイな線を引ける方…

【Unity】Meshの頂点をJobSystemとBurstで操作する

Unity 2019.3からMeshの SetVertex にNativeArrayが使用できるようになったので、BurstとJobSystemでメッシュの頂点を動かしてみました。 特に難しいことはしていなくて、mesh.SetVertices(Vertices); で頂点情報を注入しているだけです。他のmesh.SetNormal…

【Unity】ECSでもNavMeshを使って移動範囲を限定したい

ECSでNavMeshを使いたい 先日行われた1WeekGameJamの実況にてユニティちゃんが走り回るゲームがあり、それを見て何となくECS(SubScene)でもNavMeshによる移動制限を使用したいと思ったので、やり方を考えてみました。 考え的には大昔に書いたマップから落…

【Unity】スプライトアニメーションの再生速度がやたらと早い時の対処

スプライトアニメーションを今まで通りドラッグ&ドロップで作成した所、やたらとアニメーション再生が早いという事になりました。例えばトップ絵の左のように、速歩きのような速度でアニメーションを再生してしまいます。出来れば右のような速度に設定した…

【Unity】NavMeshComponentsに2D対応ブランチが追加されていたので試してみた

NavMeshComponents NavMeshComponentsはNavMeshの機能を拡張するクラス郡です。NavMeshを動的に構築したりアセットに書き出したりといった事を非常に簡単に実現してくれます。エディターからリンクを参照される程度には重要な機能の割にパッケージ化されない…

【Unity】Unityエディターを拡大表示する

文字が小さくて読めない UIのサイズを変更する 変更方法 感想 文字が小さくて読めない Unityで文字が小さくて読めんという話を稀に聞きます。実際文字が小さい事もありますし、Pro Skinは色的にサクッと認識出来ない事も多いです。また、異様に小さいボタン…

【Unity】Profilerの表示フレーム数を300から2000に増やす

プロファイラーでキャプチャーするには、5秒以内に問題を捉える力が必要… UnityのProfilerが保存できるフレーム数は300に限定されていました。これは60FPSで動作するゲームでは約5秒に相当します。つまりProfilerで問題を確認する場合、フレームの問題が起こ…

【Unity】NavMeshのデータを実行時にロードしたい

NavMeshの地形データをランタイムにロードする NavMeshをベイクする NavMeshをロードする 補足 NavMeshの地形データをランタイムにロードする Sceneに紐付いているNavMeshではなく、動的にNavMeshの経路探索に使用するデータをロード・アンロードする方法に…

【Unity】AssetBundleが使用しているアセット一覧を渡してlink.xmlを生成する

問題:AssetBundleからセットを取得する時にCould not produce class with ID XXXが出る 解決方法:コードがストリップされないようにする 解決手順:link.xml(ホワイトリスト)を自動生成する 手順1:LinkXmlGeneratorの導入 手順2:link.xmlを生成 補足…

【Unity】Genericなクラスをシリアライズで来た

ジェネリックなクラスをシリアライズ Unity 2020.1でシリアライズ出来た Dictionaryには使えなかった 感想 ジェネリックなクラスをシリアライズ Unity 2020.1aを試している時に気づいたのですが、どうやらジェネリックなクラスをシリアライズ可能になったみ…

【Unity】SerializeReference、Inspectorウィンドウでinterfaceを使用する

Unity 2019.3で利用可能になった SerializeReference Attributeについて紹介します。 SerializeReference interfaceをシリアライズ 複数のアクションがある場合にアクションを差し替えられるようにする アクションを複数登録する 感想 関連 SerializeReferen…

【Unity】Device Simulatorでノッチとセーフエリアの対策

Unity 2019.3で確認できるDevice Simulatorを使用して、ノッチやセーフエリアといった色々と面倒くさい問題の対策してみます。 Device Simulator インストール セーフエリア情報を元にUIを調整可能にする ノッチの範囲だけ回避したい 対応する端末が一覧に無…

【Unity】ISystemStateComponentDataという機能

今回は微妙に詳細な説明のないISystemStateComponentDataという機能を紹介します。 EntityがDestroyされても破棄されないコンポーネント Entity生成・破棄のタイミングで処理を一回実行する 初期化時の処理(Awake的な) 初期化後の毎フレーム実行する処理(…

【Unity】ECSのSubSceneでISharedComponentDataを使う

この記事はUnity 2019.2.8f1とEntities 0.1.1 を利用しています。また設計がイケてないので修正されてしまいそうな感じはありますが、現状SubSceneを試す上で知らないで苦労したのでメモします。 SubSceneでISharedComponentDataが使えない とりあえずIShare…

【Unity】structでも拡張メソッドを使用する

対応するAPIを探すのが若干面倒くさい 拡張メソッドで拡張する 構造体と拡張メソッドの参照渡し 対応するAPIを探すのが若干面倒くさい DOTS系テクノロジーの殆どはstruct(構造体)を利用しており、構造体自体にメソッドを追加していることは殆どありません…

【Unity】ECSで子Entityの”座標”と”向き”を使いたい

子オブジェクトの座標を使いたい LocalToParentを使用する 回転しながら弾を撃つ砲台 キューブを回す 弾を生成 弾を上方向に飛ばす 注意点 関連 このサンプルは Entities.0.1.1およびUnity 2019.2f8を使用しています 子オブジェクトの座標を使いたい Unityで…

【Unity】構造体のデータを異なる型に「再解釈」する

DOTS…特にECSで色々とやっていると、内部のデータは同じなのに型が違うせいで変換しないといけないというケースがあります。 例えば float のバッファを流し込んでバッチ処理を行うAPIがあった時、ローカルのデータで NativeArray<FloatData> のような構造体の配列は直</floatdata>…

【Unity】ブラシを使ってステージにGameObjectをサクサクっと配置する

ステージに木や岩を配置したい 今回やること 手順1:準備 手順2:配置するPrefabの登録 手順3:ブラシで塗る 補足 関連 ProBuilderで地面を作る場合 ステージに木や岩を配置したい ステージを作る際、 木や岩をランダムに配置したい という物があります。…

【Unity】LODGroupの設定を一気に変更する

LODGroup 複数のLODを編集したい LODの設定を一気に上書きするコード 注意:複数編集にPresetが使えそうに見えるが、使ってはいけない 感想 LODGroup 視覚上のポリゴンを削減するという用途でLODGroupという機能は非常にありがたい機能です。これは単純にロ…

【Unity】出来るだけ簡単にNew Input Systemを使いたい

新しいInput Systemは少し面倒くさい PlayerInputを使用する PlayerInputの利用手順 キー入力やゲームパッドの取得 関連 新しいInput Systemは少し面倒くさい 新しいInput Systemですが、正直な意見として面倒くさいというのがあります。アクションにキーを…

【Unity】新しいインプットシステムで、バーチャルパッドに対応させる

バーチャルパッドに対応させる 手順1:UIを作る 手順2:UIのボタンを押したら弾を出す 手順3:スティックを動かしたら動く オマケ:ボタン操作でプレイヤーを動かす 関連 バーチャルパッドに対応させる 新しいInput Systemでバーチャルパッドを作ってみま…

【Unity】新・新しいInput Systemの使い方(Inputsystem ver 1.0版)

以前書いた新しいInput Systemの記事の書き直しです。 新しいInput System(1.0) 導入 作るもの 手順1:Input Actionsを作る 手順2:キャラクターを動かす(コールバックで動かす場合) 手順2:キャラクターを動かす(ポーリングして動かす場合) キーコ…

【Unity】2019.2で追加されたTryGetComponentについて

Unity 2019.2から、TryGetComponentというAPIが追加されました。何時も通りGetComponentで取得する際、なんか見覚えがないAPIがあってビビったのはここだけの話。 TryGetComponent パフォーマンスは? TryGetComponent 今まで「コンポーネントが割り当てられ…

【Unity】LWRPの2Dパイプラインで、ShaderGraphを使ってみる

今回はLWRPの2DRendererでShaderGraphを使用してみます。 2Dパイプライン Shader Graph 使ってみる 注意事項 2Dパイプライン コチラを参照 tsubakit1.hateblo.jp Shader Graph この2Dパイプラインでは、単純なLit/Unlitのシェーダーだけでなく2D用のマスター…

【Unity】LWRPのライトで †暗黒の光† をしたかった

今回は昨日チラっと書いた、暗闇をライトで表現するアプローチについてです。 意図的に暗い空間を作る ライトの減算設定を登録 実際に暗黒の光を発する発光体を配置する 注意点 意図的に暗い空間を作る ステージを作るとき、 重要である事を示すために明るく…

【Unity】LWRPの2D向けライト機能を試してみる

今回はLWRPに追加された2Dライトを試してみます。 2Dにライト 導入手順 とりあえずライトを試す 陰影表現の追加 注意事項 2Dにライト 最近の海外で2Dなゲームでは、2Dでもライティング…正しくは法線効果で光源の位置を示しているゲームをよく見ます。 そのや…

【Unity】Timelineのアニメーションに微調整を加える(Humanoid編)

前回に引き続き、Timelineのアニメーションに微調整を加える方法です。 今回はHumanoid向け HumanoidはTimelineでアニメーションを上書きしにくい IKを使用する場合 Constraintを使用する場合 関連 HumanoidはTimelineでアニメーションを上書きしにくい Huma…