うにてぃブログ

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

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

【Unity】UnityWebRequest で ファイルを保存する方法

UnityWebRequest でファイルを保存するには request.downloadHandler = new DownloadHandlerFile(savePath); を指定する ロードする前にファイルのチェック処理を書かないと再度ロードされてしまうので、ちゃんとチェック処理を書きましょう using System.Co…

【Unity】Reveal In Finder / Show in Explorer をスクリプトから呼び出す

アセットを右クリックした際に Reveal In Finder / Show in Explorer を選べば ファイラーが開きます これをスクリプトから呼び出したい場合は EditorUtility.RevealInFinder を利用する ファイルを指定した場合は ファイルを選択した状態でファイラーを開け…

【Unity】Texture の Read/Write Enabled 変更する Scope

Texture の Read/Write Enabled 変更して 戻すには 似た処理を 2回書く必要があったので それなら Scope にしてしまえと思ったので作成してみました using UnityEditor; using UnityEngine; public class TextureReadableScope : GUI.Scope { private string…

【Unity】Texture の Read/Write Enabled を スクリプトから変更する

private bool SetReadable(Texture2D texture) { var path = AssetDatabase.GetAssetPath(texture); var importer = AssetImporter.GetAtPath(path) as TextureImporter; if (importer.isReadable == enable) return false; importer.isReadable = enable; i…

【Unity】Singleton な MonoBehaviour

デザインパターンの一つである Singleton パターン を利用した MonoBehaviour 実行優先度を上げるために DefaultExecutionOrder で -1 を指定している 利用するときは public class SingletonSample : Singleton<SingletonSample> のようにして作成し SingletonSample.I.Value</singletonsample>…

【Unity】uGUI でリング状 の UI を作る【続】

github.com リング状の UI の拡張で 一つの要素を選択状態にできるように対応 RingLayoutMenu を利用すると指定した角度に一つの要素を選択できるようになります Menu っぽく 開いたり閉じたりする機能も入れてみたりしてみました

【Unity】uGUI でリング状 の UI を作る

github.com リング状の UI を作れるものを作成しました RingLayout コンポーネントをアタッチすれば リング上に表示することができます パラメータをイジれば XY の 半径 を変えたり 半分だけでスクロールする UI ができたりします 位置を取得するイベントも…

【Unity】EditorWindow 上で サーバから画像をロードする

UnityWebRequestTexture を利用して画像をロードしますが これは EditorWindow では コルーチン を利用できないので EditorApplication.update を利用して画像のロードを待ちます private void LoadTexture(string path) { var request = UnityWebRequestTex…

【Unity】Editor で利用できる簡易 StartCoroutine を作ってみる

※ローカルメソッドを利用しているため .Net 4.x にしてないと動作しません IEnumerator の MoveNext が false になるまでループすれば StartCoroutine の代わりができるので EditorApplication.update を 利用して Editor 用の StartCoroutine を作成 public…

【Unity】GUILayoutUtility.GetRect が正しく取得できないことがある

下記コードで RenderTexture を表示させた場合は 下図のように横幅が広がってしまう // public static Rect GetRect(float minWidth, float maxWidth, float minHeight, float maxHeight); var rect = GUILayoutUtility.GetRect( 0, _renderTexture.width, 0…

【Unity】UnityException: LoadAssetAtPath is not allowed to be called during serialization, call it from OnEnable instead. Called from ScriptableObject

UnityException: LoadAssetAtPath is not allowed to be called during serialization, call it from OnEnable instead. Called from ScriptableObject こちらのエラーは シリアライズされたクラスのコンストラクタで LoadAssetAtPath を呼び出せないとのこ…

【Unity】uGUI を RenderTexture に描画している際に Mask が有効にならない場合の対応

以下のように RenderTexture を生成して、uGUI を映しているカメラに紐付けたところ 下図のように Mask が適応されていない private void Init() { _renderTexture = new RenderTexture(200, 200, 0); ・・・ _camera = _instance.GetComponentInChildren<Camera>();</camera>…

【Unity】No cameras rendering を非表示にする

Scene 上に カメラが一つも無いと Game View に以下が表示される 別に表示されていても問題が無いが個人的には気になるので非表示にする方法を記述します Game View Menu の Warn if No Cameras Rendering のチェックを外すことで非表示になります

【Unity】Text の Outline をきれいにする

Unity 付属の Outline を使うと下図のようにちょっと見栄えが悪くなってしまう [:plai:w300] そのため描画する数を指定できる Outline を作成してみました きれいには見えるようになりますが、その分描画負荷が上がってしまうので注意 MultiOutline 作成した…

【Unity】BaseMeshEffect の描画順を変える

Text の複数 Outline のコンポーネントを作成しようとしていると Outline が Text よりあとに描画されてしまっており、想定していた順番で描画されなかった テスト 単純に考えると AddUIVertexTriangleStream で渡した List の順番で描画されるはずなので も…

【Unity】MonoBehaviour クラスの実行順を指定する

MonoBehaviour の Unity イベント (Awake, Update等) は保証されておらず 環境によって動作順番が異なる可能性がある なので実行順を指定するために DefaultExecutionOrder を利用する 引数は実行順になっており、値が小さいものから実行されていく [Default…

【Unity】 Button の拡張機能をモジュール化

github.com UnityEngine.UI.Button をリアクションさせたり、複数の色を変えたい場合などは Button のコンポーネントの他にそういったコンポーネントを必要に応じて追加する必要がある しかし、規模が大きくなってきたり、人数が多くなってくると忘れてしま…

【Unity】SerializeReference 時に 変数の初期値が正しく変更できなかった問題

SerializeReference を利用していて下記のコード再生時に value が false になってしまう問題が発生していた それもそのはずで Serializable でクラスをシリアライズしているので シリアライズされていない変数は初期値が入ってしまう public class Sample :…

【Unity】Module化 するライブラリを SerializeReference に対応

hacchi-man.hatenablog.com 上記ライブラリですが今までは AddComponent して HideFlags を利用して非表示にしていました これだと多数コンポーネントが存在することになってしまい無駄が多いので対応したいと考えており Unity2019.3 より SerializeReferenc…

【C#】特定の シンボル定義時にメソッド呼び出しを行わない方法

Conditional をメソッドに定義することで、文字列で指定した シンボルが定義されていた場合のみ呼び出すようになる [Conditional("UNITY_EDITOR")] private void DebugMethod() { } ````

【Unity】スクリプトを Editor 上で動作させる

MonoBehaviour を継承した class に ExecuteInEditModeAttribute を記述すると UnityEditor を再生しなくてもスクリプトを実行してくれる [ExecuteInEditMode] public class SampleMonoBehaviour : MonoBehaviour 上記 Attribute を記述した際に呼ばれるのは…

【Unity】Interface や abstract class をシリアライズする

Unity 2019.3 から SerializeReference が導入され interface や abstract class でもシリアライズできるようになりました Unity - Scripting API: SerializeReference SerializeField では 値型でシリアライズされるのですが SerializeReference は 参照型…

【Unity】指定距離だけ線を書く

github.com ※別ブランチ 以前の線を書く記事よりプロジェクトはそのまま利用して書ける線に制限をつけてみます 書く線の距離は以下のように習得しているので、これに制限をかけるだけでいけます var magnitude = (_prevPos - pos).magnitude; 新しく変数を定…

【Unity】なぞった部分に線を描くサンプル解説

線を描くためにはなぞったあとを Mesh で作成すれば実線になる 今回ではこのような Mesh で線を描画している なぞった位置を取得する 今回は Input を使わず uGUI の タップ判定から 座標を変換している OnDrag が呼ばれるたびに線を描画していると、無駄が…

【Unity】なぞった部分に線を描くサンプルプロジェクト作成

github.com 今なら簡単につくれるかと思って作成してみました 仕組みについては次記事で軽く紹介します 使い方 プロジェクトを Clone して SampleScene を開いて再生する あとは Game Scene をドラッグすれば線が描画される DrawHandler の Width や Color …

【Unity】AnimationClip の Path を一括で置換するツール

AnimationClip は 対象へのパスを string で保存しており、オブジェクト名を変更したい場合に すべての パスを書き換える必要があり面倒だったのでツールを作成してみました github.com 使い方 Target AnimationClip に Animation Clip をアタッチすると 下…

【Unity】AnimationClip の Curve を差し替える

AnimationUtility には 一部の Curve を差し替える処理が無いため 一度 AnimationClip の ClearCurves で初期化してから新しく差し込む必要がある // 更新用にカーブをキャッシュ var actions = new List<Action>(); var bindings = AnimationUtility.GetCurveBindin</action>…

【Unity】AnimationClip の Curve 一覧を取得する

AnimationClip には Curve 一覧を取得する には AnimationUtility を利用する var bindings = AnimationUtility.GetCurveBindings(_animationClip); foreach (var binding in bindings) { // これで Curve が取得できた var curve = AnimationUtility.GetEdi…

【Unity】GameObject の Active を切り替えるときに 変更があったときだけ切り替えるようにすると無駄がないか検証

GameObject の アクティブを切りかえる際に gameObject.SetActive(enable); で切り替えると思いますが Active が true な GameObject に対して SetActive(true) をしても意味はありません そのため 異なってなくても呼び出した場合と、異なっていた場合のみ …

【Unity】高機能な LowPolyWater の紹介

LowPolyWater を実装してみたくてサンプルを探していると 以下のサイトで高性能な LowPolyWater を見つけたので紹介します Unipolywater shader | Battlemaze UniLowPolyWater www.youtube.com デフォルトの波でも設定項目が多く、光の反射具合や揺れ幅など…