RE:ADVスマートフォン用の表示で見るRE:ADVUnityでADVを作るブログこの広告は、90日以上更新していないブログに表示しています。uGUIMarkUXはXMLとC#のview-modelでGUIを構築するUnityのアセット。Viewを日本語訳したのでメモとして残します。Viewビューの解剖学Introductionこのチュートリアルはアドバンストなビューを作るためにあなたたちが知るべきことを見ていく。通して見終わったとき、あなたはMarkUXのAPIをフルに活用できるようになっているだろう。Hierarchyビューの構築手続きを述べる前に、インポートもしくはプロセスが走ったときにシステムがビューをどのように表現するのか簡単に述べておこう。GameObjects)に変換され、シーンキャンバスのLayoutRoot以下にビジュアルヒエラルキーとして表示される。/></Group></MainMenu>以下のようなビジュアルヒエラルキーとなる。LightCanvas└LayoutRoot└MainMenu└Group├Button├Label└ContentContainer├Button├Label└ContentContainer└Button├Label└ContentContainerEventSystemビューモデル(View-Models)はコンポーネントとしてオブジェクトにaddされる。DeclarationViewクラスを継承するか、そのサブクラスはビューモデルクラスとして宣言される。このクラスの名前はXML上で参照しているViewの名前となる。View上のようにビューモデルの宣言時にアトリビュートによって情報を付与することができる。Attribute/Description[InternalView]このアトリビュートが付与されたビューモデルコンポーネントを持つビューは、Mainビューとして使えなくなり、ビュープレゼンターのドロップダウンリスト上から隠される。[AddComponent(type)]ビューオブジェクトが作成された時に(type)で指定されたコンポーネントを付与することを示す。[RemoveComponent(type)]ビューオブジェクトが作成された時に(type)で指定されたコンポーネントをリムーブすることを示す。[CreateView(type)](type)に基づくほかのビューを動的に作成することを示す。(type)がテンプレートとなる。そのテンプレートが動的にインスタンス化される。Declarationビューフィールドはビューモデル上のクラスに宣言される。この名前がViewXMLからフィールドを参照するときに使う名前となる。ContentAlignmentSet;ビューモデルクラスの宣言のように、フィールド宣言時にもいくつかのアトリビュートを使うことができる。Attribute/Description[NotSetFromXml]このフィールドがXMLからセットすることを許していないことを示す。[ChageHandler(name)]このフィールドがチェンジハンドラを持つことを示す。そのパラメータの名前はビューモデルにあるチェンジハンドラメソッドのものになる。[ValueConverter]デフォルトバリューコンバータがこのフィールドを用いたものに上書きされることを示す。これらのアトリビュートの効果を知るには、ビューフィールドのViewConvertersとChangeHandlersという二つのコンセプトに注目する必要がある。ビューの改装のために有用であろうチェンジハンドラから見ていこう。Handlersチェンジハンドラはビューが変更されたときに呼び出されるビューモデル内のメソッドだ。スタンダードなビューは三つのチェンジハンドラ──アップデートレイアウト、アップデートレイアウツ、アップデートビヘイバー──を持つことができる。UpdateBehavior()UpdateLayoutそのビューのレイアウトが変更されたときに(そのクラス内の)どのフィールドにおいても呼び出すことができる:Width,Height,Margin,Alignment,Offset,そして、OffsetParentUpdateLayoutsペアレントのどこかでレイアウト変更があった場合でも上記UpdateLayoutが呼び出される。UpdateBehaviourAlpha,BackgroundColor,etcの、見た目の変更(ただし、レイアウトの変更でない!)があった場合に呼び出される。これらのフィールドの変化に対応したメソッドはビューモデルでオーバーライド可能だ。このチェンジハンドラアトリビュートを使うことによってカスタムフィールドにチェンジハンドラを適用することが可能になる。ビューモデルでのチェンジハンドラの使用例を示す。behavior//重要。デフォルトレイアウトビヘイバーを上書きしたくない場合は、base.UpdateLayoutを呼び出すこと。base.UpdateLayout();}気をつけるのは、もしアップデートレイアウツ("s"がついている方)を付け加えようとした場合でも、UpdataLayoutの方を上書きするということだ。UpdateLayoutはUpdateLayoutsによっても引き起こされるからだ。(その場合でもUpdateLayoutsを上書きする必要はない。)デフォルトチェンジハンドラはもちろん使えるし、望むならどんなメソッドでもチェンジハンドラとして用いることができる。Valuesフィールド値のセットチェンジハンドラの設定をするためには、特別なジェネリックメソッドのSetValue()を使う必要がある。Orientation.Horizontal);もし、インターナルな値の変更を行いチェンジハンドラによるトリガーを発動したくない場合は、通常行うように値をセットすればいい。Convertersバリューコンバータは、異なったtype間のコンバートを行う。ContentAlilgnment="Top">string型をviewフィールドの値に変換するために、システムはValueConvertersを使っている。ValueConvertersはベースクラスにValueConverterを持ったクラス群だ。context){//カラー型への変換}}上記のコードはカラー型で構成されたColorValueConverterをつくる。システムがカラー型のフィールドに出会った場合、自動的に値のコンバージョン・変換にColorValueConverterを用いる。スタンダードバリュー(標準型)に対するバリューコンバージョン(型変換)を用意する。bool,int,float,ElementSize,Vector3,Sprite,Font,Margin,Orientation,Color,Alignment,etc.もしあなたが新しいviewのためのフィールド型(:一番多い例はenum(列挙型)だろう。)を設定した場合のみ、そのカスタムバリューに対するコンバーターを用意すればいい。AlignmentValueConverterがどのように実装されているか、例を示しておく。XMLのビューを参照しているかもしれない。参照したいXML上のビューにIdをつけるだけでそれを実現することができる。/></Group></CustomView>参照したいviewと同じ名前、同じ型のクラスフィールドを設定しよう。objectを参照することもできるだろう。Set-fieldsSet-fieldsは値がset済みかどうか指し示すことに使われる特別なbooleanフィールドだ。(プログラマティカリに、もしくはXMLで)値をセットした(はずの時に)正しいロジックでプログラムが動いているか確かめるのに有用だ。Set-fieldはあなたがトラック(追跡)したいと思うフィールド名のポストフィックス(語尾)にSetをつけて使う。ContentAlignmentSet;このときフィールドContentAlignmentSetは、ContentAlignmentに値がセットされていたときのみTrueを返す。追加のロジックをバインドするときに使う。ビューアクションはクラス内でViewAction型のフィールドとして宣言される。このクラスフィールドは、参照するXML内のアクションと同名にする。MyCustomAction;XMLで参照されるアクションを定義しよう。/></AnothorView>このアクションをトリガーするためにメソッドを呼び出す。Handlersビューアクションハンドラはアクションがトリガされたときに呼び出されるメソッドだ。アクションハンドラは呼び出されたときに用いる追加パラメータを持つことができる。Actions以下のような名前に設定したアクションを、ユニティのイベントシステムからトリガーさせることができるBeginDragCancelDeselectDragDropEndDragInitializePotentialDragMoveClickPointerClickMouseClickPointerDownMouseDownPointerEnterMouseEnterPointerExitMouseExitPointerUpMouseUpScrollSelectSubmitUpdateSelectedE.g.(例えば)あなたがクリックアクションをビューに追加したければ、単にClickとアクションの名前を書くだけで自動的にユーザーがクリックしたときにトリガーされる。Viewsもし独自のViewが必要であれば、コンテントとしてContentViewを継承するだけでいい。ContentViewビューXML上でとビューを指定してそれをコントロールすることができる。/></Region></MyCustomContentView>どんなコンテントでもコンテントコンテナをチルドレンとしてビューに追加することができる。コンテナそれ自体を追加分に含めたくない場合は、IncludeContainerInContentフィールドをFalseにセットすればいい。XML気づいたかもしれないが、どのスタンダードなビューもXMLファイルと分かれていない。XMLがview-modelに組み込まれているのがその理由だ。これはビューのディストリビュートや別ファイルでビューを持ちたくないときに役立つかもしれない。(どんな方法でもビューのシェアをしてもらえるとありがたい。)XMLの埋め込みには単にGetEmbeddedXML()をオーバーライドすればいい。/></Frame>";}すでにビューのコンポーネント、主要な構成要素については解説した。アドバンスドビュー作成のための情報はとりあえず十分だろう。読者になる最新記事MarkLightの使い方を再学習するときに参照するまとめ【Unity】RectTransformの外枠に沿って線を引く!【uGUI】やっぱり入力補完<インテリセンス>って最高なのではTyranoScriptの変数はJavaScriptオブジェクトだったのでオブジェクトリテラルや配列リテラルで設定できるという理解#再UnityのアセットMarkUXのドキュメント(アドバンスドな方)を訳した月別アーカイブ検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro参加グループプログラミングはてなブログをはじめよう!aktaatさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。