うにてぃブログ

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

2020-04-01から1ヶ月間の記事一覧

【Unity】角丸な Image を使う

Image を角丸にする処理を探していると material を利用しているものが多く material の差し替えが面倒だったので BaseMeshEffect を利用してみました Meshの頂点が結構増えますが、Text の Outline や Shadow よりはましなはず ※左下のやつで154頂点 色を指…

【Unity】UnityEngine.UI.Image の グラデーション をゲージ対応

以前の記事「UnityEngine.UI.Image を グラデーション表示する」で使っていた グラデーションを Filled に対応 using UnityEngine; using UnityEngine.UI; public class GradientImageFilled : GradientImage { [SerializeField, Range(0, 1f)] private floa…

【Unity】UnityEngine.UI.Image を グラデーション表示する

Image をグラデーションできるコンポーネントです Slice の画像にも対応してあります Image が付いてあるオブジェクトに 追加してもらえれば利用できます グラデーションの色を増やすとそれだけ Mesh が生成されるので、適切なグラデーション設定してくださ…

【Unity】Image Type Sliced の画像に Filled を適応する

Image Type は 一つしか選べないため Slice された画像を利用してゲージっぽい見た目にしようとしてもできない そのため、BaseMeshEffect を利用して、Image を Sliced に設定し、Filledの対応を時前で用意する これを利用すると このように Slice された画…

【Unity】EditorWindow が開かれているかを判定する

using UnityEditor; using UnityEngine; public static class EditorWindowUtil { /// <summary> /// Editor Window がすでに開かれているかどうか /// </summary> public static bool IsOpen<T>() where T : EditorWindow { var findObjects = Resources.FindObjectsOfTypeAll<T>(); </t></t>…

【Unity】Editor Mode で Animator を動かす

docs.unity3d.com Animator.Update に Time.deltaTime を食わせることで Editor Mode でも Animator を再生することができる public void PlayAnimation(string name, int layer = 0, float normalizedTime = 0f) { Animator.speed = 1f; Animator.Play(name…

【Unity】RawImage を スクロールする

using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(RawImage))] public class RawImageScroll : MonoBehaviour { [SerializeField, HideInInspector] private RawImage _rawImage; [SerializeField] private float _speedX = 1f; [Seriali…

【Unity】UnityEditor 上で UNITY_EDITOR の Define が正しいか確認する

大胆な例ですが、これをビルドするともちろんエラーになります using UnityEngine; public class SampleMonoBehaviour : MonoBehaviour { private void Awake() { var editorClass = new EditorClass(); } #if UNITY_EDITOR private class EditorClass { } #…

【Unity】Android ビルド時の SDK の設定【Mac】

SDK を設定しようと Download を押しても Android Studio の DL ページに飛んで 何をしたらいいのかわからなくなったのでメモ Android Studio の インストール Download リンクから Download Android Studio and SDK tools | Android Developers へ移動しDL…

【Unity】ツールバーメニュの AddComponent をスクリプトから呼び出す

どこで使うのか分かりませんが、ツールバーメニューの AddComponent を スクリプトから呼び出すことができたのでメモ using System; using System.Reflection; private static void AddComponentFromType(Type type, GameObject targetObj) { var menuPath =…

【C#】メソッドをオーバーライドしているかどうか判定する

using System; using System.Reflection; private static bool IsOverrideMethod(Type type, string methodName) { var method = type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic); if (method == null) return false; return m…

【Unity】アセットのディレクトリを移動する

アセットを移動する際にドラッグして移動するのが面倒だったので、移動先を指定して移動できるように拡張 using UnityEditor; using UnityEngine; public static class EditorMoveDirectory { [MenuItem("Assets/Move Directory")] private static void Move…

【Unity】Text や イメージ に頂点カラーを追加する

Image や Text など Graphic 継承のクラスに対して 水平もしくは垂直に色のグラデーションを入れられる機能 Is Each Vertex にチェックを入れることで Text の場合1文字ずつグラデーションが可能 using System.Collections.Generic; using System.Linq; usin…

【Unity】UI を親にフィットさせる

RectTransform で サイズを変えた際に子供のサイズも同じように変えたい場合 Stretch に変えるだけでは下図のように子供のサイズが想定しないようになります 左:もともと 右:サイズを10倍してスケールを1/10にしたもの これを解決するには Anchors を調整しL…

【Unity】1文字ずつ現れる uGUI テキスト

Fade モードにすれば1文字ずつフェードして現れる using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(Text))] public class AppearText : BaseMeshEffect { private enum DisplayType { NoFade, Fade, …

【Unity】 UnityProject 外から画像をロードして表示する

using UnityEditor; using UnityEngine; public class SampleEditorWindow : EditorWindow { private Texture2D _texture; private void OnGUI() { if (GUILayout.Button("画像をロードする")) { // ロード先を取得 var sourcePath = EditorUtility.OpenFile…

【Unity】Editor Default Resources

Resources という特殊フォルダがあるように Editor Default Resources という名の UnityEditor 専用 のフォルダが存在します Editor Default Resources フォルダーは 1 つしか作成できず、Project のルートに配置する必要があります。Assets フォルダー内に…

【Unity】WaitForSeconds のキャッシュ

前の記事で YieldInstruction を利用するときに yield return new WaitForSeconds(0.01f); とすると呼び出し毎にゴミが出るとのことがあったので それの対応としてWaitForSeconds をグローバルで管理して使えるクラスを作成 これを利用すると WaitForSeconds…

【Unity】YieldInstruction の落とし穴

WaitForSeconds、WaitUntil、WaitWhile などは YieldInstruction を継承したクラスで IEnumerator 内で待ちに利用するのに便利なのですが少し問題があります GC Alloc発生 このクラスは下記のような使い方をすることが多いと思うのですが この使い方をした場…

【Unity】Strip Engine Code

Strip Engine Code が 有効な場合 Unity は IL2CPP ビルド時に不要なコードを削除してくれます 対象となるのは ユーザーがプロジェクトに加えたアセンブリ Unity エンジンアセンブリ .NET クラスライブラリアセンブリ (例えば mscorlib.dll、System.dll) と…

【Unity】Mesh Filter の Mesh を保存する

Mesh Fileter の コンテキストメニューで「Save Mesh」を押すと保存先を指定し、Mesh を保存できる 例えば Cube の Mesh を保存するとちゃんと保存できている コード public static class MeshUtil { [MenuItem("CONTEXT/MeshFilter/Save Mesh")] private st…

【Unity】テクスチャを UV スクロールする

テクスチャを UV スクロールする方法として * Shader を使う * スクリプトを使う の2種類がある Shader で UV スクロールしてる記事はあったが、スクリプトで UVスクロールしてる記事は見かけなかった Shader でUVスクロール GPU を利用して UVスクロールを…

【Unity】material と sharedMaterial の違い

検証 UnityUnity2019.3.5f1 MeshRenderer や SpriteRenderer など Material をアタッチできるコンポーネントには Material を取得する方法として、.material と .sharedMaterial の2つが存在します .material 呼び出したタイミングで 新しい Material を作成…

【Unity】GUI で使える Skin 一覧

Unity2019.3から一部の GUI.skin の表示が変わったので、 Label Field での表示にはなるが違いを見てみたところ Runtimeでは差は無さそうだったので、Editor 拡張で使っている場合のみ修正が必要そう Unity2019.3 未満 Unity2019.3 以降 コード using UnityE…

【Unity】EditorStyles で使えるスキン一覧 【Unity2019.3未満】

生成コード 下記には記述していないが * EditorStyles.toolbarSearchField * EditorStyles.foldoutHeader * EditorStyles.foldoutHeaderIcon が2019.1~使えるようになっている private void OnGUI() { EditorGUILayout.LabelField("label", EditorStyles.lab…

【Unity】EditorStyles で使えるスキン一覧 【Unity2019.3以降】

生成コード private void OnGUI() { EditorGUILayout.LabelField("label", EditorStyles.label); EditorGUILayout.LabelField("miniLabel", EditorStyles.miniLabel); EditorGUILayout.LabelField("largeLabel", EditorStyles.largeLabel); EditorGUILayout.…

【C#】ulongを超える値を扱う方法

C#

C# で扱える最大値は ulong の「18,446,744,073,709,551,615」(1,844京)ですが 基本的にはそんな値いかないと思うので int で実装することが多い ※理想は int よりも uint だが uint を使うと int を使うとキャストする必要があるため面倒 int の場合は最…

【Unity】Inspector に GetComponentInChildren を行うボタンを追加する

Inspector にオブジェクトをアタッチするのが面倒なことがあるので、 ボタンひとつで GetComponentInChildren してくれる拡張を作成 コード using System.Linq; using System.Reflection; using UnityEditor; using UnityEditor.IMGUI.Controls; using Unity…

【Unity】Inspector で使える検索できる enum 入力欄 【CustomPropertyDrawer】

enumPopup は数が多い場合探すのが面倒なので、検索窓付きの enum field を利用できる拡張を作成 コード using System.Linq; using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEngine; public class SearchableEnumAttribute : PropertyAtt…

【Unity】UnityEditor の起動時にのみ処理を行う

UnityEditor の起動時にのみ処理を走らせたいと思い、処理を探していると公式の記事が見つかりました 起動時エディタースクリプト実行 - Unity マニュアル がこちらの記事は「起動時エディタースクリプト実行」とありますが、起動時以外にも コンパイルが走…