うにてぃブログ

主にUnityとC#に関する記事を書いていきます

2022-12-01から1ヶ月間の記事一覧

【Unity】ShaderGraph のグローバルパラメータを利用する

Shader.SetGlobalColor などを利用することで、Shader にグローバルなパラメータを渡すことができる しかし、ShaderGraph の場合どうやればいいのか分からなかったので調査してみたところ Exposed が false であればグローバルパラメータが適応されることが…

【Unity】PerlinNoise を利用して Mesh を生成する

PerlinNoise を利用した Mesh を生成するスクリプト以下のようなメッシュを作成できます using System; using System.Collections.Generic; using System.Text; using UnityEngine; using Object = UnityEngine.Object; [RequireComponent(typeof(MeshFilter…

【Unity】OnApplicationPause の動作を UnityEditor 上でも確認する

Android や iOS のビルド用に OnApplicationPause を利用していた場合 初期状態の UnityEditor ではこちらのイベントが呼び出されないため動作の確認ができない しかし、PlayerSettings / Standalone / Run in Background を無効にすることで、UnityEditor …

【Unity】Random.InitState してからの乱数は偏るのか調査

youtu.be 上記のYoutube でも言われているように、連続したシードによって乱数を生成すると偏りが出てしまうようなので調査してみました 固定しない乱数 まずは毎回シードを固定化せずに生成しています for (var x = 0; x < size; x++) { for (var y = 0; y …

【Unity】Unity から Slack にスニペットを投稿する

hacchi-man.hatenablog.com で画像投稿について書いてますが、スニペットは文字列を投げるだけなのでお手軽で、フォームに content を追加して送るだけです using System; using System.Collections; using UnityEngine; using UnityEngine.Networking; publ…

【Unity】Unity から Slack にスクリーンショットを投稿する

探しても Unity から投稿してるサンプルが見つからなかったので、書いておきます アプリは追加して、Bot Token Scopes に files:write を追加している前提で進めます api.slack.com API とかパラメータは上記にあるので一読しておくとよきです スクショの準…

【Unity】URP14で動作する RendererFeature の PostProcessing 処理

動作環境 Unity2022.2.0b16 URP 14.0.3 Unity2021で動作していた RendererFeature の PostProcessing 処理をそのまま移植したところ動作しなかったので動作するように修正しました using System; using UnityEngine; using UnityEngine.Rendering; using Uni…

【Unity】RendererFeature を利用した PostProcess 用のテンプレート

Unity2021.3.15f1. URP 12.1.8 ※URP14の場合はこちら PostProcess 用のスクリプトをたまに忘れるのでこちらにメモしておきます using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; [Serializable] public class Sampl…

【Unity】ShaderGraph を利用した HeightFog

ShaderGraph の全貌 UnityShaderGraphLibrary/HeightFog.shadergraph at main · yayorozu/UnityShaderGraphLibrary · GitHub 各処理をちょっとだけ分割してまとめる UV と Depth から ワールド座標を求めてY のみを出力 float getWorldPosY() { float3 world…

【Unity】TextMeshPro のテキストメッシュの頂点をランダムにずらす

using System.Collections; using TMPro; using UnityEngine; [RequireComponent(typeof(TextMeshProUGUI))] public class TextShake : MonoBehaviour { [SerializeField] private float _interval = 0.5f; [SerializeField] private float _maxOffset = 10f…

【Unity】TextMeshPro のテキストを1文字ずつフェードで表示する

using System.Collections; using TMPro; using UnityEngine; [RequireComponent(typeof(TextMeshProUGUI))] public class TextAppearFade : MonoBehaviour { [SerializeField] private float _interval = 0.5f; private IEnumerator Start() { var componen…

【Unity】TextMeshPro のテキストを1文字ずつ表示する

using System.Collections; using TMPro; using UnityEngine; [RequireComponent(typeof(TextMeshProUGUI))] public class TextAppear : MonoBehaviour { [SerializeField] private float _interval = 0.5f; private IEnumerator Start() { var component = …

【Unity】TextMeshPro の サンプルパッケージ

PackageManager の TextMeshPro にはサンプルコードがついてないなと思い色々探していたところ Packages の TextMeshPro の中に サンプル用の UnityPackage が含まれていました Scene が26個もあり、TextMeshPro の様々な使い方を知ることができそうです

【Unity】URP の FullScreen ShaderGraph を試す

2022.2.0b1 から利用できるようになった FullScreen ShaderGraph を使ってグレースケールのポストエフェクトでも作成してみます まずは Create / Shader Graph / URP / FullScreen ShaderGraph から Shader Graph を作成 そのまま出力するものを作成してみま…

【Unity】ShaderGraph で ディザ をする

Alpha Clip を有効にして、Alpha Clip Threshold を 0 に変更する そして以下のようにノードを組むことで、ディザが可能になる 上記の ShaderGraph を利用したものがこちら また、DitherSize を大きくすることで抜け具合を調整できる (100)

【Unity】UnityEditor で EventSystem の内容を確認する

UnityEditor の再生中に Scene に存在する EventSystem の Inspector の Preview を確認すると 各種パラメータを確認することができる

【Unity】暗くするライトを実装する

Deferred Rendering は GBuffer を利用してライトの計算を行うため、スクリプトから Light の Color をマイナスの値にすることで暗い範囲を作り出すことができる public class NegativeLight : MonoBehaviour { [SerializeField] private Light _light; [Ser…

【Unity】Shader Graph でフォグを無効にする

Fog は以下の Define により制御されており、これを ShaderGraph のパラメータに追加して有効無効にすることで、ShaderGraph でも Fog を無効にできます * FOG_LINEAR * FOG_EXP * FOG_EXP2 Shader Graph の設定 Keyword -> Boolean から 以下の3つを定義す…

【Unity】EditorGUI でラベルの幅を変更する

EditorGUIUtility.labelWidth の値を変更することでラベルの幅を変更することができます // デフォルトは 150 EditorGUILayout.IntField($"Field {EditorGUIUtility.labelWidth}", 0); for (int i = 100; i <= 400; i += 100) { EditorGUIUtility.labelWidth…

【Unity】VideoPlayer で複数のクリップを連続再生し続ける

using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; [RequireComponent(typeof(RawImage))] [RequireComponent(typeof(VideoPlayer))] public class VideoPlayerMultiClip : MonoBehaviour { [SerializeField] private VideoPlayer _videoP…

【Unity】対象の点が楕円の範囲内かを判定する

/// <summary> /// 楕円の範囲内かどうか (2次元) /// </summary> public static bool IsInEllipse(Vector2 center, Vector2 radius, Vector2 position) { var sum = 0f; for (var i = 0; i < 2; i++) { var a = (position[i] - center[i]); sum += (a * a) / (radius[i] * radi…

【Unity】Quaternion の角度差分を計算する

public static float GetAngleDiff(Quaternion a, Quaternion b) { var va = a * Vector3.up; var vb = b * Vector3.up; var angleA = Mathf.Atan2(va.x, va.z) * Mathf.Rad2Deg; var angleB = Mathf.Atan2(vb.x, vb.z) * Mathf.Rad2Deg; var diff = Mathf.D…

【Unity】EnterPlayModeOptions が有効な際の static な領域を確認する

UnityEditor 上での再生時間短縮のために EnterPlayModeOptions を有効にしていると Unity 再生のたびに static の領域が初期化されなくなるため、その挙動を確認しておく ただしコンパイルが走った際には static の領域が初期化されるので、コンパイルを走…

【Unity】UnityHub でインストールした abd のパス【mac】

UnityHub で Android SDK モジュールを加えていた場合 abd を自分で入れる必要なく利用できる adb のパスは以下で /Applications/Unity/Hub/Editor/{UNITY_VERSION}/PlaybackEngines/AndroidPlayer/SDK/platform-tools/adb {UNITY_VERSION} には 利用してい…

【Unity】ScriptableObject のフィールドは再生を終了しても保存される

ScriptableObject を利用してパラメータを管理すると値を変更した際にリコンパイルが不要なのでお手軽ですが、 NonSerialized な属性をつけていないフィールドは Unity を再起動するまで値を保持し続けるので注意が必要になる 例えば以下のような Scriptable…