うにてぃブログ

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

2022-01-01から1年間の記事一覧

【Unity】オブジェクトを今向いている方向に前後左右移動させる

transform.rotation に移動ベクトルを乗算すると今向いている向きから前後左右に移動させることができる using UnityEngine; public class PlayerController : MonoBehaviour { [SerializeField] private float _speed = 1f; private void Update() { if (In…

【Unity】VideoPlayer を RenderTexture を生成せずに利用する

VideoPlayer では 現在のフレームの Texture を参照することが可能なため、RenderTexture を生成して tagetTexture を指定しなくてもお手軽にテクスチャを表示できる ※ 内部的に RenderTexture を生成しているので RenderTexture を利用しないというわけでは…

【Unity】Format が ASTC の Texture を Mask に利用するとノイズが発生する

ATSC はテクスチャのサイズが小さくなるため、よく利用される Format ですが、これを Mask に利用すると ノイズが発生するようです Unity の Issue Trackerでも同じ問題が上がっていますが Some texture compression will leave artifacts in some pixels. A…

【Unity】なぜ UnityEvent は RemoveAllListeners しないと開放されないのか

【Unity】UnityEvent で 利用した Delegate は初期化しないとリークする - うにてぃブログ 昨日の記事でリークすることが判明しましたが、なぜリークするのか内部処理を追ってみます ※ Unity2020.3.14f1 UnityEditor上 Memory Profilerで確認 UnityEvent Uni…

【Unity】UnityEvent で 利用した Delegate は初期化しないとリークする

デリゲートを利用してスクリプトを記述することはよくあるが、UnityEvent のリスナーに登録してる場合に破棄されたタイミングでメモリに残ってしまい、GC.Collect を行っても回収されないようです 実際に試してみる ※ Unity2020.3.14f1 UnityEditor上 Memory…

【C#】ビット演算を利用したフラグ管理

FlagsAttribute を利用すると Enum をビットフラグとして利用することができる 値は1,2,4... と定義するのは面倒なので、1を何ビットシフトしたかで値を管理する [System.Flags] public enum Flag { A = 1 << 0, B = 1 << 1, C = 1 << 2, // 全フラグ ALL = …

【Unity】MultiColumnHeaderState.Column の変数まとめ

MultiColumnHeaderState.Column は TreeView で複数カラムを実装する際に利用するクラスです メモがてら各変数のが何に影響するかをまとめます Column Class クラスは以下のように定義されています public class Column { public float width = 50f; public …

【Unity】TreeView でソートを実装する

TreeView でソートをお手軽に実装するには MultiColumnHeader を利用する MultiColumnHeader では ソート用のイベントとして sortingChanged が用意されており、これにイベントを登録することでどのカラムがソートされたかを判定できる internal TreeView(Tr…

【Unity】UnityEditor上で SpriteAtlas の有効無効を切り替える

Editor 上で SpriteAtlas の有効無効を切り替えるのは ProjectSettings より行う Edit / Project Settings... / Editor SpritePacker / Mode 設定項目 表記 内容 Disable 無効 Sprite Atlas V1 - Enabled For Builds バイナリビルド時のみ SpriteAtlas を有…

【Unity】URP 利用時に SceneView カメラ の Rendering Renderer を変更する

Universal Render Pipeline Asset の Rendering / Renderer List が複数ある場合 Camera の Rendering / Renderer を変更しても GameView は変更されるが、SceneView は変更されない SceneView のカメラの設定は、Universal Render Pipeline Asset の Render…

【Unity】SceneAsset はシリアライズしても UnityEditor 以外では利用できない

以下のようにフィールドを定義して、SceneAsset をセットすることができる public class SampleMonoBehaviour : MonoBehaviour { [SerializeField] private UnityEngine.Object _object; } しかし、SceneAsset は UnityEditor でしか利用できないため、実機…

【Unity】子供のオブジェクトを整列させるコンポーネント

整列させたいけど、スクリプト書くのが面倒なときにご利用ください using UnityEngine; using UnityEngine.UI; #if UNITY_EDITOR using UnityEditor; #endif /// <summary> /// GameObjectを整列させるためのツール /// </summary> public class ChildObjectAlignment : MonoBeh…

【Unity】URP (Universal Render Pipeline) の 2D Light を試す

最新のUnity で 2D Light を試してみたくて、やり方を調べたのでここにメモしておきます 環境 Unity - 2022.1.0b16 Universal RP - 13.1.7 導入 Universal RP の追加 PackageManager より Universal RP をインストール Universal Render Pipeline Asset の作…

【Unity】Component の Transform や GameObject にアクセスさせない

Component が public で Transform と GameObject のフィールドを持っているため、参照があれば好き勝手に変更できる そのため、外部から操作できなくするコンポーネントを作成してみた フィールドを削除することは無理なので、参照されても null を返し war…

【Unity】Vector2Int, Vector3Int は JsonUtility を利用できない

Vector2Int や Vector3Int を Json として保存するために JsonUtility を利用したところうまくいかず 試しにログを見てみたところ正しく変換できていなかった var json = JsonUtility.ToJson(Vector2Int.left); Debug.Log(json); // {} JsonUtility.ToJson p…

【C#】リフレクションを利用してArrayやIListにデータを追加する

public static void AddListByReflection(this FieldInfo fieldInfo, object obj) { var elementType = fieldInfo.FieldType.GetArrayType(); if (elementType == null) return; var instance = Activator.CreateInstance(elementType); if (fieldInfo.Field…

【Unity】Script から ProjectSettings の Editing Environment を設定する

// Regular Environment EditorSettings.prefabRegularEnvironment = sceneAsset; // UI Environment EditorSettings.prefabUIEnvironment = sceneAsset;

【Unity】シーン上の Graphic を Hierarchy 上で選択できるボタンを表示する

github.com 上記 Scene Drawer の Show Graphic Object の機能を拡張しました 従来通りに Scene 上に名前が表示されるのは変わらず、その名前をクリックすることで Hierarchy 上で選択してくれます これで UI がどれか分からない問題が解決するようになりま…

【Unity】SceneView のカメラから GUI Rect の座標を取得する

[ExecuteAlways] public class SampleMonoBehaviour : MonoBehaviour { private void OnEnable() { SceneView.duringSceneGui += SceneGUI; } private void SceneGUI(SceneView sceneView) { var pos = sceneView.camera.WorldToViewportPoint(transform.pos…

【Unity】Inspector 上で Enum 名を変更する

Unity 2019.2 から追加された InspectorName を利用することで Inspector 上で表示する Enum 名を変更することができる public enum Position { [InspectorName("右")] Right, [InspectorName("左")] Left, [InspectorName("真ん中")] Center }

【Unity】uGUI で絵を書く

EventSystems を 利用して Texture2D に絵をかけるスクリプト スクリプト using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; [RequireComponent(typeof(RawIm…

【Unity】tesseract-unity の学習データを変更する

GitHub - Neelarghya/tesseract-unity: Standalone OCR plugin for Unity using Tesseract 上記のライブラリにはデフォルトで英語の学習データ (eng.traineddata)しか入っていないため、日本語データを読み込んだとしても正しく解析ができない そのため、別…

【Unity】tesseract を apple silicon mac で利用する

tesseract を試して見ようと探したところ github にライブラリがあったので利用してみた https://github.com/Neelarghya/tesseract-unity しかし、Unity 上 Dll のロードができないらしくで動作しなかった System.DllNotFoundException - tesseract assembly…

【Unity】ProjectSettings や Preferences をスクリプトから開く

ProjectSettings SettingsService.OpenProjectSettings を利用するパスの前には Project/ をつける必要がある [MenuItem("Settings/OpenProject")] private static void OpenProject() { // Project Settings の Player を開く SettingsService.OpenProjectS…

【Unity】 ProjectSettings もしくは UserSettings に ScriptableObject の Inspector をそのまま表示する

AssetSettingsProvider を利用すると ScriptableObject をそのまま設定画面に表示することができる 1 階層 深くなりますがアセットを探す手間が省けて便利です using System.Collections.Generic; using UnityEditor; using UnityEngine; public class Sampl…

【Unity】PackageManager 対応ライブラリ一覧

Package Manager URL List Find Missing Script Yorozu Tool Asset Choice Color Folder Texture Edit Google Drive Helper Save Data Menu Item Scene Drawer 作成した PackageManager 対応のライブラリをまとめていきます Package Manager URL List Packag…

【Unity】GUIStyle 一覧を表示する EditorWindow

GUI.skin. からアクセスできる GUIStyle は把握してますが、名前がわからずに内部で利用されている GUIStyle が数多くあるので、それを一覧で表示する Editor を作成しました 最後に一覧で GUIStyle の名前も載っけておきます スクリプト using System.Colle…

【Unity】Google Apps Script (GAS) を利用して Unity から POST する

公開されてない SpreadSheet を編集する際には認証が必要になり、ランタイムで更新するのは結構面倒になります そのため、Google Apps Script (GAS) を利用して、お手軽にデータ更新を行う方法を記述します 今回はデータの追加・更新を行うため、GET ではな…

【Google Apps Script】doGet でシートの全データを csv 形式で返す【GAS】

https://script.google.com/macros/s/{deployId}/exec?sheetName=hoge でリクエストを投げると csv 形式でデータを全部取得できる function doGet(e) { if (e.parameter == null) return; var sheetName = e.parameter.sheetName; var spreadSheet = Spreads…

【Google Apps Script】対象の文字列が指定したシートの範囲に含まれているかを調べる【GAS】

// 対象の文字列がシートに含まれているかを調べる // sheetName (string): 対象となるシート名 // targetText (string): 検索対象の文字 // serchRowIndexes (int[]): 検索対象の行Index 1から始まる // skip (int): 検索時スキップする行数 function conta…