読者です 読者をやめる 読者になる 読者になる

チリペヂィア

リンクフリー。サンプルコードなどは関連記事内でライセンスについて明示されない限り商用利用なども自由に行って構いませんが、自己責任でお願いします。またこれら日記内容の著作権自体は放棄していません。引用部分については引用元の権利に従ってください。

Unity

Enterするまで入力を反映しないテキストボックス再考

Unityのエディタ拡張で、入力フィールドのエンターやフォーカスロストを見張るTips修正版。

AnimationCurveを近似する折れ線を適度に生成

(…誰得?)とりあえず ある区間内で一定よりもキツい角度で曲がってたら前後二つに分けて再帰する。 あんまり細かくなったらやめる。 ていうお決まり感あふれる作戦にて候*1。さて挿入を繰り返すという手順から純粋に理論的に考えますと、データ構造はリン…

カスタムエディタのEditorクラスでRenderTexture

なんでインスペクタにDrawLineメソッドないんじゃー!! Handles.DrawLineでよかった。とりあえずRenderTargetのサンプルとして読んでください(目逸らし)そう言えばUnity5になってから無料版でもRenderTargetが解禁されています。って事はEditorのレンダリ…

Editorクラスの寿命とか

まったりUnity記事再開。あまり気にしたことが無かったんだけどUnityEditor.Editorでインスペクタ拡張する時のEditorクラスの寿命メモ。GameObjectが選択される時:Editor.Awake()→Editor.OnEnable() GameObjectが非選択になる時:Editor.OnDisable()→Editor…

昨日のビルボードサンプルのエラー対応版

前回の最後にちょろっと書いてる「GameObject.hideFlags = DontSaveでの問題」について。さらに追試。 Component.hideFlags Component.hideFlags≠GameObject.hideFlagsなので、コンポーネントだけDontSaveにしてみました。でもやはりロード時に Component Me…

UnityでShurikenぽいビルボードの作り方

こんな感じに、スクリプトからリアルタイムに頂点を計算してビルボードを表示しようというサンプル。標準のパーティクルシステムでは描画できないエフェクト系のコンポーネントを作りたい人向け。(Unity 4.3.4.f1)エディタ表示だろうとカメラが複数あろうと…

GUIStyle.contentOffset

サンプルが見当たらなくてお試し。(Unity Win 4.3.4f1) using UnityEngine; using UnityEditor; public class TestEditorWindow : UnityEditor.EditorWindow { [MenuItem("Assets/TestEditorOpen")] static void Open() { EditorWindow.GetWindow<TestEditorWindow>(); } void </testeditorwindow>…

Toggleボタンの見た目カスタム

UnityでToggleボタンを自作するのにどんな画像を用意すればよいのかよくわからなかったので試しに並べてみました。そういやホバーイメージってないよね。なるほど言われてみれば確かにこんな感じ。 void OnGUI() { System.Collections.Generic.Dictionary<System.String, Texture2D> dr</system.string,>…

エディタカスタマイズで押せないボタンを描く Part2

前にエディタカスタマイズで押せないボタンを描くで描画スタイルを淡色にするコード書いたんですが、もっとスマートなのがライブラリにあったwなんで見つけきれなかったんだろう。 EditorGUI.BeginDisabledGroup() void OnGUI() { EditorGUI.BeginDisabledG…

UnityでVisual Studio Expressのソリューションを開くスクリプト

(Unity4.3.4f1Win)母艦組み直しで32bitXP→64bitWin8移行。思ったよりトラブルなく移行できたんですが、ついに「うにゃにゃ!?」ってなりました。 SyncMonoDevProjectでVisual Studio Expressが起動できない? なぜか今までの設定ではExpressが起動できな…

Gradientの制御点は8個までらしい

Gradient.SetKeysにセットできる制御点の個数はアルファもカラーも8個が限度みたいです。GradientEditorを使ってて「アレレ?」と思い、試しにスクリプトから無理やり制御点をセットしてみると、こんな例外が。 Max number of color keys is 8 (given 99) M…

エディタ専用のリソースロード関数

AssetDatabase.LoadAssetAtPath()がResources.Load()と違って、プロジェクトのルートパスからの相対パスを完全に指定しなきゃいけないとなると、Editorフォルダに突っ込んで非ビルド用(≒エディタ専用)リソースにしようと思ったらEditorフォルダの親フォル…

誤差を抑えてパーセント小数値を入力するテキストフィールド

そういやdecimalとかあったね!(ブクマを参照のこと) テキストフィールドでfloatをパーセント入出力させる方法。浮動小数点って適当に100倍して100で割ると、わりと誤差が出ちゃうんですね。 例) 99.9 % と入力したら 99.899999999 % と表示される、などdou…

TextureFormatごとにコンストラクトとGetPixelとSetPixelを総当りしてみた

テストコード 場合によっては普通にキャッチできない例外をはくため、ひたすら「やってみる>例外吐くなら吐かせる」を繰り返します。コンソール荒れますw [ContextMenu("test")] private void test() { foreach(TextureFormat format in System.Enum.GetVa…

エディタカスタマイズで押せないボタンを描く

もっとちゃんとした関数がありました。下記に記事を追加。 http://d.hatena.ne.jp/tiri_tomato/20140318/1395104788こちらの古い記事は、EditorGUI名前空間が使えない状況では一応使えるかな、ということで残しておきます。 淡色モードが案外サポートされて…

System.Enum比較する時はCompareTo()

いやぁまぁ表題の通りなんですが、System.Enumと言えばEnum用に型と値を格納するコンテナクラスですね。ジェネリック化の難しいEnumをどうにかこうにか近い形に持って行ってくれるそれなりに便利なクラスですが、Nullableとかと違って比較演算子とかはオーバ…

Unity、DirectX環境でのNormalMapの内部的なフォーマットお勉強

スクリプトからメモリ上のTexture2DにSetPixelsを行って法線マップ画像を生成し、NormalDiffuseシェーダーのNormalMapとして設定したい時にちょっとひっかかったので、そのお話。基本的にUnityではGL系で一般的なNormalmapの形式(チャンネルの割り振りがRGBA…

Disposeで簡単Destroy

コードが長くなってくるとやらかしやすい破棄漏れ(*1)。一時Texture2DとかMaterialとか、消しておかなきゃリークします。簡単なDispose()による対策をチラ裏。 abstract class OnDisposable : System.IDisposable { public bool isDisposed { get { return…

Texture2DをReadableに変更

Texture2D.ReadPixels()やGetPixels()するとき、テクスチャのインポート設定がReadableに設定されていないとエラーします(*1)。 Texture '...' is not readable, the texture memory can not be accessed from scripts. You can make the texture readable…

MonoBehaviorをExecuteInEditMode属性で修飾、シーン保存でリソースリーク

hideFlags設定忘れたというしょうもない備忘録。 「カスタムエディタ系の機能を作りたいけれど、SceneViewに現物を表示させてアレコレ設定もさせたい」 あえてEditorフォルダ系のクラス(UnityEditor系のクラス)を継承せずに、MonoBehaviorをExecuteInEditM…

PropertyDrawerで配列表示カスタム

エンターするまで入力を反映しない PropertyDrawerの使用に直接関係するわけじゃないんですが、標準の配列入力が当たり前のようにやっている「配列数をテキストフィールドで入力する」仕様。ところがこれそのまま真似しようと思っても、テキストフィールドっ…

DrawDefaultInspectorで使ってたSerializedPropertyもうちょっと掘り下げ。

以前ネタにしたDrawDefaultInspector()の実装を読み直します。 internal static bool DoDrawDefaultInspector(SerializedObject obj) { EditorGUI.BeginChangeCheck(); obj.Update(); SerializedProperty iterator = obj.GetIterator(); bool enterChildren …

Mesh加工にちょっと挑戦、メッシュ最適化プラグインを試作

メッシュの操作、いわゆるUnityにおける頂点バッファ生加工は覚えておかなきゃいけないだろうと思ってたんですが良い機会に恵まれ勉強したのをチラ裏。PropertyDrawerもまとめきらないうちに別のネタを振り込む蛮行。 つたない覚書 Mesh これがいわゆる頂点…

PropertyDrawerのGUI配置前夜?

前回はコレ。前回サラッと流しましたが、PropertyDrawer.GetPropertyHeight()は 非Layout処理をする時はきちんと高さ計算して返す Layout処理する時はゼロを返す ようにします。前者について、このケースでは面倒くさいけど私は次の設計パターンでやってます…

PropertyDrawerにあらためて挑戦

前回の記事なんですが…間違って消しちゃいました。 前回の記事 PropertyDrawerのカスタマイズでした。「RangeAttributeにInfinityとかNaNを設定する事で、片側リミットを設けられないのはいかがなものか」と思ったので自作する話だったんですが、記事を書い…

Unityでフィールド属性のRangeAttributeにNaNとかInfinityとか突っ込むと

注意:この記事は古い記事で、一度間違って削除したり復帰させたりしています。なんかいろいろ怪しいところがあるのが発覚しているので、こちらのエントリーあたりから、問題点含めてじわじわ仕切りなおす予定です。 public class Temp : MonoBehaviour { [R…

UnityとMonoDevelop日本語対応状況再確認

今更ですがUnity3→4に乗り換えました。で、日本語対応は乗り換えたら確認しなきゃいけないいわゆるひとつの通過点。ちなみに前回の記事Mono Develop ソースコードに日本語コメント打ち込むためフォント作りですが、参考にならないでス(改修されないまま現象…

Mono Develop ソースコードに日本語コメント打ち込むためフォント作り

Windows用Unity3のMonoでのお話。(Unity4のお話も書きました:チリペヂィア - UnityとMonoDevelop日本語対応状況再確認)関数説明書きのSummaryタグを使いたくなったので日本語を打ち込む必要が出てきました。当日記はなぜかFontForgeでフォントを合成して…

端末固有のハッシュ生成

通信する時はユニークなプレーヤー識別か装置識別があると便利。仮にサーバーを立ててSNSとの連携やランキング等を扱うのであればプレーヤー情報のDBとともにプレーヤー識別システムを独自に設計すると思いますが、そこまで商魂たくましいわけでもなければ装…

LayoutKind.Explicitで共用体風のSerializable()+BinaryFormatter

小発見!LayoutKind.Explicitでナンチャッテ共用体をやってもSerializable()+BinaryFormatterとか使えるんですね。Unityだと、unsafe指定してポインタ処理が出来ないらしいです。すると、WifiとかBluetoothとかPC/スマホなど環境固有の通信ハードウェアの利用を…

20121030追記

よくよく考えてみたら構造体とか共用体ではなく、継承&メンバ拡張してベースクラス型の配列にまとめちゃうのがオブジェクト指向的には本当ですね。こんな感じに。 ベースクラス(パケット種別を記憶) 継承クラス1(パケット種別1に対応するデータ実部を…

3Dベクトル任意軸回転での角度差(回転方向による符号つき)

Unityで任意軸回転する時の角度差を求める関数が見当たらないなーと思って、よくよく考えてみると、任意軸回転した座標って、同じ軸法線平面にある点同士でしか回転結果と一致しませんよね。3次元なんだから、ひねりの関係も含めて一般化するにはハードル高…

斜面にキャラクターを這わせる。第03回

微妙に間が開きましたが、前回の続き。 「1.足元の点をいくつかサンプリングして、各点の地面の高さを得て、それらを結ぶ面の傾きを計算する」パターン 多少順番が前後しますが、この方法は計算が多少厄介なので最後に持って来ています。もうちょっと細かい…

DestroyされたGameObjectのインスタンスの寿命とか

GameObjectのインスタンスを別の場所にコピーしたまま、先にGameObjectをDestroyしたら?リファレンスの明記が見つけられなかったので、この日記の内容は普段より怪しさ2割増し(どころか寝言)くらいで受け取ってもらえるとうれしいのですが実験レポ。 結…

コリダーキャンセラー

なんて…ひねりのない名前ッ!!閑話休題。斜面に這わせるネタ第3回で使う予定のクラスを一回ほどはさみます。たまに自分のコリダー反応だけを一時的に回避したい時があります。でも同じPrefabクローン同士でタグとかレイヤー管理とか面倒くさい。そんなああ…

斜面にキャラクターを這わせる。第02回

ベースクラス 前回の続き。派生した実装クラスを無視してベースクラス経由で操作できると気楽かなー*1という事でサンプル的にはベースクラスを作ります。 public abstract class BasicPlaneNormalTracer : MonoBehaviour { // public members public bool au…

Unityでシーンをまたぐ状態の保存とか

前回のネタと代わって、ちょっと備忘録。Unityには原則的にグローバル変数相当のものがないです。基本的にシーン切替えのたびにGameObjectを全部リリースしてしまう方針になっています。ある程度まとめてヒープをごっそり片付けてしまうルールです。断片化や…

斜面にキャラクターを這わせる。第01回

Unityはじめました。実に豆タンクを走らせたい!存分に!!フリー六角とライセンス版メタセコでモデリング。テクスチャにはイラストレーターを使い、ベクターデータでセルフシャドウを重ねています。モデリングを簡単にしたらテクスチャに死ぬほど時間がかか…