2020-09-01から1ヶ月間の記事一覧
UnityWebRequest でファイルを保存するには request.downloadHandler = new DownloadHandlerFile(savePath); を指定する ロードする前にファイルのチェック処理を書かないと再度ロードされてしまうので、ちゃんとチェック処理を書きましょう using System.Co…
アセットを右クリックした際に Reveal In Finder / Show in Explorer を選べば ファイラーが開きます これをスクリプトから呼び出したい場合は EditorUtility.RevealInFinder を利用する ファイルを指定した場合は ファイルを選択した状態でファイラーを開け…
Texture の Read/Write Enabled 変更して 戻すには 似た処理を 2回書く必要があったので それなら Scope にしてしまえと思ったので作成してみました using UnityEditor; using UnityEngine; public class TextureReadableScope : GUI.Scope { private string…
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…
デザインパターンの一つである Singleton パターン を利用した MonoBehaviour 実行優先度を上げるために DefaultExecutionOrder で -1 を指定している 利用するときは public class SingletonSample : Singleton<SingletonSample> のようにして作成し SingletonSample.I.Value</singletonsample>…
github.com リング状の UI の拡張で 一つの要素を選択状態にできるように対応 RingLayoutMenu を利用すると指定した角度に一つの要素を選択できるようになります Menu っぽく 開いたり閉じたりする機能も入れてみたりしてみました
github.com リング状の UI を作れるものを作成しました RingLayout コンポーネントをアタッチすれば リング上に表示することができます パラメータをイジれば XY の 半径 を変えたり 半分だけでスクロールする UI ができたりします 位置を取得するイベントも…
UnityWebRequestTexture を利用して画像をロードしますが これは EditorWindow では コルーチン を利用できないので EditorApplication.update を利用して画像のロードを待ちます private void LoadTexture(string path) { var request = UnityWebRequestTex…
※ローカルメソッドを利用しているため .Net 4.x にしてないと動作しません IEnumerator の MoveNext が false になるまでループすれば StartCoroutine の代わりができるので EditorApplication.update を 利用して Editor 用の StartCoroutine を作成 public…
下記コードで RenderTexture を表示させた場合は 下図のように横幅が広がってしまう // public static Rect GetRect(float minWidth, float maxWidth, float minHeight, float maxHeight); var rect = GUILayoutUtility.GetRect( 0, _renderTexture.width, 0…
UnityException: LoadAssetAtPath is not allowed to be called during serialization, call it from OnEnable instead. Called from ScriptableObject こちらのエラーは シリアライズされたクラスのコンストラクタで LoadAssetAtPath を呼び出せないとのこ…
以下のように RenderTexture を生成して、uGUI を映しているカメラに紐付けたところ 下図のように Mask が適応されていない private void Init() { _renderTexture = new RenderTexture(200, 200, 0); ・・・ _camera = _instance.GetComponentInChildren<Camera>();</camera>…
Scene 上に カメラが一つも無いと Game View に以下が表示される 別に表示されていても問題が無いが個人的には気になるので非表示にする方法を記述します Game View Menu の Warn if No Cameras Rendering のチェックを外すことで非表示になります
Unity 付属の Outline を使うと下図のようにちょっと見栄えが悪くなってしまう [:plai:w300] そのため描画する数を指定できる Outline を作成してみました きれいには見えるようになりますが、その分描画負荷が上がってしまうので注意 MultiOutline 作成した…
Text の複数 Outline のコンポーネントを作成しようとしていると Outline が Text よりあとに描画されてしまっており、想定していた順番で描画されなかった テスト 単純に考えると AddUIVertexTriangleStream で渡した List の順番で描画されるはずなので も…
MonoBehaviour の Unity イベント (Awake, Update等) は保証されておらず 環境によって動作順番が異なる可能性がある なので実行順を指定するために DefaultExecutionOrder を利用する 引数は実行順になっており、値が小さいものから実行されていく [Default…
github.com UnityEngine.UI.Button をリアクションさせたり、複数の色を変えたい場合などは Button のコンポーネントの他にそういったコンポーネントを必要に応じて追加する必要がある しかし、規模が大きくなってきたり、人数が多くなってくると忘れてしま…
SerializeReference を利用していて下記のコード再生時に value が false になってしまう問題が発生していた それもそのはずで Serializable でクラスをシリアライズしているので シリアライズされていない変数は初期値が入ってしまう public class Sample :…
hacchi-man.hatenablog.com 上記ライブラリですが今までは AddComponent して HideFlags を利用して非表示にしていました これだと多数コンポーネントが存在することになってしまい無駄が多いので対応したいと考えており Unity2019.3 より SerializeReferenc…
Conditional をメソッドに定義することで、文字列で指定した シンボルが定義されていた場合のみ呼び出すようになる [Conditional("UNITY_EDITOR")] private void DebugMethod() { } ````
MonoBehaviour を継承した class に ExecuteInEditModeAttribute を記述すると UnityEditor を再生しなくてもスクリプトを実行してくれる [ExecuteInEditMode] public class SampleMonoBehaviour : MonoBehaviour 上記 Attribute を記述した際に呼ばれるのは…
Unity 2019.3 から SerializeReference が導入され interface や abstract class でもシリアライズできるようになりました Unity - Scripting API: SerializeReference SerializeField では 値型でシリアライズされるのですが SerializeReference は 参照型…
github.com ※別ブランチ 以前の線を書く記事よりプロジェクトはそのまま利用して書ける線に制限をつけてみます 書く線の距離は以下のように習得しているので、これに制限をかけるだけでいけます var magnitude = (_prevPos - pos).magnitude; 新しく変数を定…
線を描くためにはなぞったあとを Mesh で作成すれば実線になる 今回ではこのような Mesh で線を描画している なぞった位置を取得する 今回は Input を使わず uGUI の タップ判定から 座標を変換している OnDrag が呼ばれるたびに線を描画していると、無駄が…
github.com 今なら簡単につくれるかと思って作成してみました 仕組みについては次記事で軽く紹介します 使い方 プロジェクトを Clone して SampleScene を開いて再生する あとは Game Scene をドラッグすれば線が描画される DrawHandler の Width や Color …
AnimationClip は 対象へのパスを string で保存しており、オブジェクト名を変更したい場合に すべての パスを書き換える必要があり面倒だったのでツールを作成してみました github.com 使い方 Target AnimationClip に Animation Clip をアタッチすると 下…
AnimationUtility には 一部の Curve を差し替える処理が無いため 一度 AnimationClip の ClearCurves で初期化してから新しく差し込む必要がある // 更新用にカーブをキャッシュ var actions = new List<Action>(); var bindings = AnimationUtility.GetCurveBindin</action>…
AnimationClip には Curve 一覧を取得する には AnimationUtility を利用する var bindings = AnimationUtility.GetCurveBindings(_animationClip); foreach (var binding in bindings) { // これで Curve が取得できた var curve = AnimationUtility.GetEdi…
GameObject の アクティブを切りかえる際に gameObject.SetActive(enable); で切り替えると思いますが Active が true な GameObject に対して SetActive(true) をしても意味はありません そのため 異なってなくても呼び出した場合と、異なっていた場合のみ …
LowPolyWater を実装してみたくてサンプルを探していると 以下のサイトで高性能な LowPolyWater を見つけたので紹介します Unipolywater shader | Battlemaze UniLowPolyWater www.youtube.com デフォルトの波でも設定項目が多く、光の反射具合や揺れ幅など…