2024-01-01から1年間の記事一覧
Unityでの開発において、Shader Variantの管理はパフォーマンスとビルドサイズに大きく影響を与える重要な要素です。特に、どのShader Variantが実際に使用されているのかを把握することは、効率的な開発に繋がります。 本記事では、UnityEditor上でShader V…
今回は、Unity Shaderを使ってY軸固定ビルボードシェーダーを作成する方法を解説します。ビルボードシェーダーは、木や草、エフェクトなど、常にカメラに向けて表示したいオブジェクトに非常に便利です。 しかし、すべての軸で回転すると不自然になる場合が…
今回は、Unityでビルボードシェーダを実装し、カメラに常に正面を向くようにする方法について解説します。 ビルボードとは ビルボードは、オブジェクト(通常は平面)が常にカメラを向くように描画するシェーダです。これにより、2Dのテクスチャを3D空間で立…
今回は、Unityで重心座標系を利用してオブジェクトのワイヤーフレームを描画する方法を紹介します。 ワイヤーフレーム表示はデバッグや特殊なビジュアルエフェクトに役立ちますが、重心座標系を使うことで効率的に実装できます。 重心座標系とは 重心座標系…
この記事では、ShaderGraphを使ってキューブオブジェクトの境界線を強調して表示するシェーダの作成手順を紹介します。 このシェーダにより、キューブのエッジが明確に表示され、境界線が視覚的に強調されます。以下、ShaderGraphの各ステップについて詳しく…
ゲームやアプリケーションで透明なオブジェクトを扱う際、その境界が分かりにくくなることがあります。特に、他の物体と重なる場合に視覚的な混乱が生じがちです。 今回は、Unityのシェーダーを使って透明オブジェクトが他のオブジェクトに近づいた際に境界…
UGUIでは、RaycastPaddingを利用して、見た目と当たり判定の範囲を変更することが可能です。今回は、この原理を使ってScrollBarの当たり判定を広くする方法を試してみた結果について解説します。 通常、RaycastPaddingを設定することで、UI要素の当たり判定…
概要 Unreal Engineでは、C++で作成したActorクラスのコンストラクタでコンポーネントを定義するのが一般的ですが、場合によってはBlueprint Editorを使ってコンポーネントを構築したい場合があります。この記事では、C++のコンストラクタでコンポーネントを…
確認環境 Unity 2022.3.50f1 URP 14.0.11 UnityのURP環境では、FSR 1.0(FidelityFX Super Resolution)を利用して解像度を変更することができます。 しかし、この機能を使用すると、すべてのカメラ描画の解像度が一括して変更されてしまい、UIも同様に解像…
Epic Games Launcherを開き、SamplesタブからContent Examplesを選択します。 Marketplaceが表示されるので、「Free」ボタンをクリックすると、 「Create Project」が表示されます。 プロジェクトの保存先を選択すると、サンプルプロジェクトのダウンロード…
UnityのAddressable Asset Systemは、アプリケーションのアセットを効率的に管理し、ダイナミックなロードやアンロードを可能にする強力なツールです。このシステムを使用することで、ゲームやアプリの開発者は、リソースの管理を容易にし、ユーザー体験を向…
UnityのPrefabUtilityは、プレハブに関連するさまざまな操作を行うための強力なツールです。この記事では、PrefabUtilityの主要な機能を紹介し、Unity開発者がプレハブをより効果的に扱えるようにする方法を説明します。 PrefabUtilityの概要 PrefabUtility…
TextMeshPro DynamicFontを使用する際のgit管理の課題を解決するスクリプト Unityのテキスト表示において、TextMeshProは広く使用されています。その中でも、DynamicFontを利用する場合、再生中にFontAtlasが変更されると、gitの履歴管理が困難になるという…
このスクリプトをUI要素にアタッチすることで、そのUI要素がドラッグ可能になり、親要素の範囲内で自由に移動できるようになります。 using UnityEngine; using UnityEngine.EventSystems; public class UIRectDraggable : UIBehaviour, IBeginDragHandler, …
Unity 2022.3.20f1から、「Object.InstantiateAsync」が新たに導入されました。これにより、プレハブの非同期インスタンス化が可能になりました。 従来のUnityでは、プレハブのインスタンス化は同期的に行われていました。これにより、複数のプレハブを同時…
このクラスは、指定したインデックスの子オブジェクトを表示エリア内にスクロールする「ScrollTo」メソッドと、指定したRectTransformが表示エリア内に収まるようにスクロールする「ScrollTo」メソッドが実装されています。 これを利用することで、以下のよ…
UnityのInspector上で特定のフィールド名を右クリックした際に表示されるメニューに、カスタムな動作や処理を追加したいことはよくあります。 そんなときに便利なのが、ContextMenuItem属性です。この属性を使うと、簡単にカスタムなメニュー項目を追加でき…
以前は背景画像を描画する際にGrabtextureを使用していましたが、 URP(Universal Render Pipeline)ではその機能が削除されたため、代替手段が必要です。 今回は、その代替手段の1つであるShader GraphのSceneColorノードを使用した方法を説明します。 Scen…
オブジェクトをドラッグした方向に回転させるには、Transform.Rotateを使用します。 以下の例では、ドラッグの方向にオブジェクトを回転させる方法を示しています。 using UnityEngine; using UnityEngine.EventSystems; public class RotationTest : MonoBe…
ScrollRectの子供に配置されたオブジェクトが、IPointerDownHandlerを持つとドラッグ操作時に誤って呼び出される問題があります。 例えば、以下のようなコンポーネントがScrollRectの子供オブジェクトに存在する場合、 public class EventHandleTest : MonoB…
同じ階層にある子供オブジェクトに対して、親にGraphicRaycasterが存在しない場合、Rayが下のオブジェクトではなく上のオブジェクトに当たる問題が発生します。 例えば、以下のヒエラルキーが考えられます。ここで、GraphicRaycasterが「Node Up」と「Node D…
Unityの開発過程において、アセットのインポートパイプラインをカスタマイズすることは、効率的なアセット管理に不可欠です。このカスタマイズを行うための主なツールは「AssetPostprocessor」と「AssetModificationProcessor」です。 AssetPostprocessorの…
はじめに Unityでのゲーム開発では、数値の丸め処理がしばしば必要となります。MathfクラスのRound, Ceil, Floorメソッドは、これらの処理に不可欠です。この記事では、これらのメソッドの使い方と実例を紹介し、初心者から上級者まで理解しやすく解説します…
はじめに Unityのユーザーインターフェース(UI)構築において、イベントハンドラーは重要な役割を果たします。UGUI(Unity GUI)システムでは、さまざまなユーザー操作に応じてイベントを処理するために、多くのインターフェースが提供されています。この記…
GitHub上のプロジェクトで、ルートディレクトリにpackage.jsonがなくても、特定のディレクトリからパッケージをインストールする方法を紹介します。 UnityのPackage Managerは、GitHub上のリポジトリからパッケージを直接インストールできる機能を提供してい…
UnityのEditorCoroutineでは、通常のWaitForSecondsを利用することができず、代わりにEditorWaitForSecondsを使用する必要があります。これはUnityのEditor内でのコルーチン処理において、時間の経過を待つための仕組みが異なるためです。 EditorCoroutineを…
URP Assetを作成します Project SettingsのGraphicsにアセットをセットします すると確認ダイアログが表示されるのでアセットをセットします 「アプデするよ」って内容が表示されるのでOKを選択します 更新が終わると、URPでないShaderはエラーとなるため、…
Meshの情報を使ってShaderで色を操作する際、RGB値を渡すとfloat3が必要になりますが、多くの色を扱いたい場合はできるだけ使用する数を減らしたいですね。 そのような場合、RGBをfloatに変換し、Shader側でfloatからRGBに変換することで、完全には復元でき…
TextMeshProを使用して、タップした箇所の文字を取得するための一般的な処理について説明します。 using TMPro; using UnityEngine.EventSystems; /// <summary> /// TextMeshPro のタップ処理 /// </summary> public static class TextMeshProTapUtility { /// <summary> /// タップした</summary>…
UnityEditor上で利用可能なアイコンやGUIStyleを調べるのが手間だと感じていました。そこで、これらのリソースを一覧で確認できる便利なツールを作成しました。 github.com このツールを使用することで、元々組み込まれているアイコンやGUIStyleに簡単にアク…