2019-01-01から1年間の記事一覧
ECSは現状正直な所、物量が必要な部分をECSで試して大まかな部分は既存のMonoBehaviourやUnityEngine系のコンポーネントを使うのがベターな回答です。今回はECSとGameObjectを連携させる手法についてを紹介します。 検証バージョン:Unity 2019.3、Entities …
複数のジョブで処理を行う時、全てのジョブが同じバッファに格納しようとすると当然競合を起こします。コレを回避するために排他処理を行う訳ですが、それを行わず計算結果を格納する方法を考えてみます。 ジョブ毎に計算結果を格納する対象を切り替える 利…
たぶんUnity 2019.3から、ワーカースレッドの数を制限出来るようになったっぽいです。 ワーカースレッドの数を制限する ワーカースレッドの数 ワーカースレッドの数を制限する UnityのJobSystemは基本的に「使用できる全てのスレッドを使用」します。これは…
InputManagerでは入力情報はフレームレートに強く依存しており、その中間で取得する情報の大抵は破棄されていました。 InputSystemでは中間の情報をバッファとして確保・使用できるようになったので、それを使用してフレームが低くてもキレイな線を引ける方…
Unity 2019.3からMeshの SetVertex にNativeArrayが使用できるようになったので、BurstとJobSystemでメッシュの頂点を動かしてみました。 特に難しいことはしていなくて、mesh.SetVertices(Vertices); で頂点情報を注入しているだけです。他のmesh.SetNormal…
ECSでNavMeshを使いたい 先日行われた1WeekGameJamの実況にてユニティちゃんが走り回るゲームがあり、それを見て何となくECS(SubScene)でもNavMeshによる移動制限を使用したいと思ったので、やり方を考えてみました。 考え的には大昔に書いたマップから落…
スプライトアニメーションを今まで通りドラッグ&ドロップで作成した所、やたらとアニメーション再生が早いという事になりました。例えばトップ絵の左のように、速歩きのような速度でアニメーションを再生してしまいます。出来れば右のような速度に設定した…
NavMeshComponents NavMeshComponentsはNavMeshの機能を拡張するクラス郡です。NavMeshを動的に構築したりアセットに書き出したりといった事を非常に簡単に実現してくれます。エディターからリンクを参照される程度には重要な機能の割にパッケージ化されない…
文字が小さくて読めない UIのサイズを変更する 変更方法 感想 文字が小さくて読めない Unityで文字が小さくて読めんという話を稀に聞きます。実際文字が小さい事もありますし、Pro Skinは色的にサクッと認識出来ない事も多いです。また、異様に小さいボタン…
プロファイラーでキャプチャーするには、5秒以内に問題を捉える力が必要… UnityのProfilerが保存できるフレーム数は300に限定されていました。これは60FPSで動作するゲームでは約5秒に相当します。つまりProfilerで問題を確認する場合、フレームの問題が起こ…
NavMeshの地形データをランタイムにロードする NavMeshをベイクする NavMeshをロードする 補足 NavMeshの地形データをランタイムにロードする Sceneに紐付いているNavMeshではなく、動的にNavMeshの経路探索に使用するデータをロード・アンロードする方法に…
問題:AssetBundleからセットを取得する時にCould not produce class with ID XXXが出る 解決方法:コードがストリップされないようにする 解決手順:link.xml(ホワイトリスト)を自動生成する 手順1:LinkXmlGeneratorの導入 手順2:link.xmlを生成 補足…
ジェネリックなクラスをシリアライズ Unity 2020.1でシリアライズ出来た Dictionaryには使えなかった 感想 ジェネリックなクラスをシリアライズ Unity 2020.1aを試している時に気づいたのですが、どうやらジェネリックなクラスをシリアライズ可能になったみ…
Unity 2019.3で利用可能になった SerializeReference Attributeについて紹介します。 SerializeReference interfaceをシリアライズ 複数のアクションがある場合にアクションを差し替えられるようにする アクションを複数登録する 感想 関連 SerializeReferen…
Unity 2019.3で確認できるDevice Simulatorを使用して、ノッチやセーフエリアといった色々と面倒くさい問題の対策してみます。 Device Simulator インストール セーフエリア情報を元にUIを調整可能にする ノッチの範囲だけ回避したい 対応する端末が一覧に無…
今回は微妙に詳細な説明のないISystemStateComponentDataという機能を紹介します。 EntityがDestroyされても破棄されないコンポーネント Entity生成・破棄のタイミングで処理を一回実行する 初期化時の処理(Awake的な) 初期化後の毎フレーム実行する処理(…
この記事はUnity 2019.2.8f1とEntities 0.1.1 を利用しています。また設計がイケてないので修正されてしまいそうな感じはありますが、現状SubSceneを試す上で知らないで苦労したのでメモします。 SubSceneでISharedComponentDataが使えない とりあえずIShare…
対応するAPIを探すのが若干面倒くさい 拡張メソッドで拡張する 構造体と拡張メソッドの参照渡し 対応するAPIを探すのが若干面倒くさい DOTS系テクノロジーの殆どはstruct(構造体)を利用しており、構造体自体にメソッドを追加していることは殆どありません…
子オブジェクトの座標を使いたい LocalToParentを使用する 回転しながら弾を撃つ砲台 キューブを回す 弾を生成 弾を上方向に飛ばす 注意点 関連 このサンプルは Entities.0.1.1およびUnity 2019.2f8を使用しています 子オブジェクトの座標を使いたい Unityで…
DOTS…特にECSで色々とやっていると、内部のデータは同じなのに型が違うせいで変換しないといけないというケースがあります。 例えば float のバッファを流し込んでバッチ処理を行うAPIがあった時、ローカルのデータで NativeArray<FloatData> のような構造体の配列は直</floatdata>…
ステージに木や岩を配置したい 今回やること 手順1:準備 手順2:配置するPrefabの登録 手順3:ブラシで塗る 補足 関連 ProBuilderで地面を作る場合 ステージに木や岩を配置したい ステージを作る際、 木や岩をランダムに配置したい という物があります。…
LODGroup 複数のLODを編集したい LODの設定を一気に上書きするコード 注意:複数編集にPresetが使えそうに見えるが、使ってはいけない 感想 LODGroup 視覚上のポリゴンを削減するという用途でLODGroupという機能は非常にありがたい機能です。これは単純にロ…
新しいInput Systemは少し面倒くさい PlayerInputを使用する PlayerInputの利用手順 キー入力やゲームパッドの取得 関連 新しいInput Systemは少し面倒くさい 新しいInput Systemですが、正直な意見として面倒くさいというのがあります。アクションにキーを…
バーチャルパッドに対応させる 手順1:UIを作る 手順2:UIのボタンを押したら弾を出す 手順3:スティックを動かしたら動く オマケ:ボタン操作でプレイヤーを動かす 関連 バーチャルパッドに対応させる 新しいInput Systemでバーチャルパッドを作ってみま…
以前書いた新しいInput Systemの記事の書き直しです。 新しいInput System(1.0) 導入 作るもの 手順1:Input Actionsを作る 手順2:キャラクターを動かす(コールバックで動かす場合) 手順2:キャラクターを動かす(ポーリングして動かす場合) キーコ…
ルックアップテーブルを使おう Burstでルックアップテーブルを使おう サンプル 関連 ルックアップテーブルを使おう ルックアップテーブル:複雑な計算処理を単純な配列の参照処理で置き換えて効率化を図るために作られた、配列や連想配列などのデータ構造の…
一部のモデルにだけ、色あせるポストプロセスをかけない 昨日の応用で、一部のモデルにだけポストプロセスがかからないようにします。 一部のモデルだけポストプロセスの影響をかけないようにする 手順 注意点 一部のモデルだけポストプロセスの影響をかけな…
LWRPはカメラのスタックができない PostProcessingの後にUIとパーティクルを描画する UIの間にパーティクルを挟む 注意点 PCを新しくしてからの初更新です。 環境:Unity 2019.2f8、LightWeight RP 6.9.1 LWRPはカメラのスタックができない いろいろと便利な…
Unity 2019.2から、TryGetComponentというAPIが追加されました。何時も通りGetComponentで取得する際、なんか見覚えがないAPIがあってビビったのはここだけの話。 TryGetComponent パフォーマンスは? TryGetComponent 今まで「コンポーネントが割り当てられ…
今回はLWRPの2DRendererでShaderGraphを使用してみます。 2Dパイプライン Shader Graph 使ってみる 注意事項 2Dパイプライン コチラを参照 tsubakit1.hateblo.jp Shader Graph この2Dパイプラインでは、単純なLit/Unlitのシェーダーだけでなく2D用のマスター…