うにてぃブログ

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

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

【Unity】UIBuilder について

UIElements を使ってみるためには UIBuilder が必要だったため 使ってみて分かったところと、下記ドキュメントを Google 翻訳して分かったところを記述する UI Builder | UI Builder | 0.11.2-preview 解釈等間違っている可能性があるので、内容は正しくない…

【Unity】Runtime UIElements を試す

Unity2020.1から Runtime UIElements が利用できるようになったので導入と表示までをまとめる 利用できると言ってもまで Preview 版なので、デバッグUIに利用する分には問題無いが uGUI の代わりとしてはまだ使えなさそうでした 利用した Version UnityVersi…

【Unity】ProjectWindow を 1列表示に変更する

デフォルトの ProjectWindow は 2列表示になっている これを右上のメニューから 「One Columns Layout」を選択すると 1列表示に変更できる、個人的にはこちらの方がすきなのでこちらをよく利用している

【Unity】Texture を置き換える

Editor ツールで Texture を新規作成し保存する際には AssetDatabase.CreateAsset を利用する しかし 既存の asset を置換する際に利用できるいい感じのものが(多分)無い やろうと思えば FileUtil.ReplaceFile で仮にファイルを作って置換できるけど、仮に…

【Unity】Unity を再生しても Material の差分が発生しないようにする

スクリプトで Material の値を書き換えた場合再生が終了したタイミングで Material の値が書き換わる 例えばこちらの記事のスクリプトのようにC# で Shader のパラメータを操作していた場合を確認する 再生前の Offset がこちら 再生後の Offset がこちら 見…

【Unity】Fog について

Fog とは、カメラからの距離に応じてオブジェクトに色を重ねるエフェクトです 例えば青のFogを適応した場合右画像のようになります これは Shader 側で行われている処理で Shader が Fog に対応していなければ適応されません Shader Vertex Shader pragma に…

【Unity】Texture2D を Android の Bitmap に変換する

Bitmap のリファレンスを見ていると decodeByteArray という byte[] を Bitmap に変換する処理があった これを利用して Texture2D を bitmap に変換する 実際に変換できたかは、Bitmap を利用する処理を記述する必要があるが、今回は記載しない /// <summary> /// Tex</summary>…

【Unity】Android の ApiLevel を取得する

C# で Android の機能を作成している際に ApiLevel によって機能を分けたいことがある その際に利用できるメソッド ※ ApiLevel については こちら /// <summary> /// Android の API Level を取得する /// </summary> public static int GetApiLevel() { var level = 0; try { u…

【Unity】C# から Android の機能を呼び出す

Unity では C# から Java を呼び出すプラグインが含まれており Unity から Android 固有の機能等の呼び出しを aar や java などを作成せずに利用することができる 単純な機能なら C# 側に処理を記述したほうが手軽なので便利です ※iOS の場合は C# から直接…

【Unity】UnityHub から Android ビルド用 SDK 等のインストール

Unity Hub 2.4.1 を利用していたところ Unity2019.4系の「モジュールを加える」UI で Android SDKなどがインストールできることに気づきました Unity の Preferences / External Tools から Android の設定を見てみると Unity Hub から インストールできると…

【Unity】OnDrawGizmos が呼ばれない

OnDrawGizmos を記述しているにも関わらず Scene 上に描画されないことがありました using UnityEngine; public class MovePathAbstract : MonoBehaviour { private void OnDrawGizmos() { Gizmos.DrawSphere(Vector3.zero, 1f); } } 調べたところ Scene Vie…

【C#】ベジェ曲線を等間隔で分割したある点を取得する

以前作成したベジェ曲線では 例えば曲線を計算する t を10分割して各点の座標を表示すると下図のようになり等間隔で表示されない using UnityEngine; using System.Linq; public class SampleMonoBehaviour : MonoBehaviour { [SerializeField] private Tran…

【C#】ベジェ曲線の長さを計算する

以前ベジェ曲線を計算するクラスを作成しました ここで全体の距離がほしかったので処理を追加しました 以前の処理をクラスに追加すれば取得できます 計算自体もこれで正しいのかわかりませんが、曲線を分割して 分割した距離を合計しています LOOP_VALUE の…

【C#】ベジェ曲線を計算する

ベジェ曲線 - Wikipedia wiki より計算式を拝借して、ベジェ曲線を計算するクラスを作成しました 使い方 Transform の座標を使ってやる場合はこんなふうに public class SampleMonoBehaviour : MonoBehaviour { [SerializeField] private Transform[] _trans…

【Unity】Vector 系で利用できるインデクサー

Vector2, Vector3, Vector4, Vector2Int, Vector3Int にはインデクサーが定義されている ※ Color にもある インデクサーとは下記のようなもので public float this[int index] { get { switch (index) { case 0: return this.x; case 1: return this.y; defa…

【Unity】EventSystems の Interface 処理をスクリプトから呼び出す

ExecuteEvents.Execute を利用することで その GameObject が所持している コンポーネントに対して Event を実行することができます EventSystems.ExecuteEvents-Execute - Unity スクリプトリファレンス 対応している interface は以下です IBeginDragHandl…

【Unity】ListPool について

Shadow など BaseMeshEffect を継承しているクラスの場合 UIVertex を利用する際に List が必要になる この List を利用 するたびに new していると Mesh の構築頻度によりますが メモリリークしてしまったり、CPUのスパイクが発生してしまう可能性が高くな…

【Unity】AnimationClip 再生中に スクリプトを実行する

Animation Clip は タイムライン上部で右クリックすることで イベントを追加することができる 追加したイベントをダブルクリックすると Inspector に下図が表示される これは GameObject に Animator を追加して State に設定してある Animation Clip から A…

【Unity】UIBehaviour について

MonoBehaviour を継承した UIBehaviour というクラスが存在する EventSystems.UIBehaviour - Unity スクリプトリファレンス CanvasScaler や Graphic など uGUI で利用するクラスの多くはこれを継承して作られている 実装されているメソッドは以下の通りで基…

【Unity】TextureImporterSetting を変更する

TextureImporter では Inspector で表示されている Texture の設定が全部行えない そのため TextureImporterSettings を取得して、こちらを変更する 設定できる変数はこちらをご覧ください https://docs.unity3d.com/ja/2018.4/ScriptReference/TextureImpor…

【Unity】Assertion failed on expression: 'gForceReimports->empty()'

※Unity2019.4.6f1 private void OnValidate() { var path = UnityEditor.AssetDatabase.GetAssetPath(asset); var importer = UnityEditor.AssetImporter.GetAtPath(path) as UnityEditor.TextureImporter; if (!importer.isReadable) { importer.isReadable…

【Unity】Image の 透明部分を クリックしても Raycast が反応しないようにする

Image の alphaHitTestMinimumThreshold を 0以上にすればタップした際に有効な Alpha の値を変更できる alphaHitTestMinimumThreshold を 1にすると半透明な部分のタップが無効化される しかしテクスチャが半透明かどうか判定するために Read/Write Enable …

【Unity】スクリプトからボタンのクリック処理を呼び出してみる

ボタンの実行処理自体は onClick に対して Invoke をすれば呼び出しはできます Button.onClick.Invoke(); しかしこれはボタンが押せる状態じゃなくても実行することができてしまいます そのためボタンに Ray が通ればボタンを押せると判定して押す処理を書い…

【Unity】Lego® Tutorial をやってみる

※ Unity 2019.4.6f Unity Hub の Template に Lego® が追加されたようなので触ってみました blogs.unity3d.com テンプレートのインストール ※ Unity Hub v2.4.0以上 Unity Hub の新規作成から テンプレートに Lego® を選択する 年齢入力が必要なので入力する…

RectTransform の Pivot が Center の位置の座標を取得する

public static Vector2 GetCenterPosition(RectTransform rect) { var position = rect.transform.position; // 真ん中Pivotじゃなければ真ん中を計算する if (rect.pivot != new Vector2(0.5f, 0.5f)) { var scaleX = rect.transform.lossyScale.x; var sca…

【Unity】演出を Animator じゃなくて Inspector で設定するツール ~3~

https://hacchi-man.hatenablog.com/entry/2020/10/05/220000 の記事の続きです 動きの共通化 動きのパラメータは ScriptableObject として保存することができるので 同じ動きをデータを読み込むことでできます Animator のようにパスで対象を操作する訳じゃ…

【Unity】演出を Animator じゃなくて Inspector で設定するツール ~2~

【Unity】演出を Animator じゃなくて Inspector で設定するツール ~1~ - うにてぃブログ の記事の続きです スクリプトでの制御 各Sequence は ComponentTween クラス が管理するようになっているので 登録したIDを指定して ComponentTween.Stop("ID"); で停…

【Unity】演出を Animator じゃなくて Inspector で設定するツール ~1~

Animator が エンジニア的には使いづらく、UIの動きを DoTween 等を利用してコードで作成するのは調整が面倒 ※ 有料だったらあったような気もする そのため、Inspector 上でパラメータをセットするとそれに合わせて動くツールを作成しました 一応拡張性もあ…

【C#】複数のフラグを確認する

例えば フラグ判定で、そのビットが立っているかどうかを判定する際に HasFlag を利用する [Flags] public enum Test { A = 1, B = 2, } private void Main() { var flag = Test.A; flag.HasFlag(Test.A); } しかし 複数のフラグを判定する場合は HasFlag を…

【Unity】 選択したアセットのパスを取得する

ProjectWindow で右クリックで出てくる CopyPath を選択するとそのアセットのパスを取得することができます あとはどこかでペーストすれば クリップボードに保存されているアセットのパスがペーストされます 特に使わない気がしたのですが、フルパスを取得す…