3.9.1スクロールビューの基本についてはこちらをどうぞ。1.スクロールバーの背景となる部分とつまみの部分、計2つのスプライトを作成。ヒエラルキー上での配置はスクロールビューの配下以外であればどこでも大丈夫。垂直方向のスクロールバーの場合は2つのスプライトの高さを合わせておく必要がある。見た目的につまみ部分が前面に表示されるようにDepthの設定もお忘れなく。2.スプライトにコライダーを設定スクロールバーの背景部分をクリックして移動する機能が必要なければ、背景用のスプライトにはコライダーを設定しなくても大丈夫。コライダーの設定は目的のスプライトを選択した状態で、メニューバーから「NGUI」-「Attach」-「Collider」とするのが簡単。Widgetを作ってその配下に先ほど作成したスプライトを配置しておくのが綺麗だと思う。UIWidgetではなく適当なオブジェクトでも大丈夫だが、UIScrollView自体にUIScrollBarコンポーネントを追加するとスクロールバーの挙動がおかしくなる。Backgroundにそれぞれつまみ用・背景用のスプライトを設定。Directionも適切に。Barsの項目があるので、Horizontal/Vertical目的の方にスクロールバーを設定。ここで一度実行すると、UIScrollBarのValueなどの値が反映されるので、そこでスクロールバーの初期位置などを設定できる。Sizeが、スクロールビュー配下の全体サイズに対する表示範囲。スクロールビューに対して2倍のサイズのものを配置していれば0.5となる。Valueがつまみの初期位置、0〜1。3.9.1・基本的な考え方ヒエラルキー上でスクロールビューの配下に配置されているUIをスクロールビューの範囲に限定して表示する。スプライトがスクロールビュー配下にない場合スプライトがスクロールビュー配下にある場合またその名の通り、スクロールビュー配下に配置されたUIは、実行時にドラッグなどにより見える範囲を動かすことができる。グリッドビューと組み合わせて紹介されることが多いが、グリッドビューはあくまで多数の項目を整列するだけのもので、スクロールビュー自体とは特に関係ない。View」を選択する。Viewの配下にUIを配置する。ドラッグでスクロールさせたい場合は、配下のUIにコライダーとUIDragScrollViewを追加する。コライダーの追加は目的のUIを選択した状態でメニューバーから「NGUI」-「Attach」-「Collider」とするのが簡単。スクロールビューのインスペクタでドラッグで動かせる方向などを指定できる。(2)今回はタイトル画面でスタートボタンが押された時の処理を解説していきます。StartButtonNGUIのUIButtonコンポーネントを持つボタンのGUI部品です。NGUIのイベントをFSMに通知するためにPlayMakerの開発元から提供されているNGUIアドインをセットしてあります。スタートボタンを押すと初回はプロローグ画面へ、その後はゲーム画面へ遷移するようになっています。Initシーンが読込まれPlayMakerFSMが動き出した時に初めに到達する状態(ステート)です。前回紹介したTitleControllerのInitとはほぼ同時(順不同)で動作します。UnityのスクリプトにおけるAwake()の実行順と同じとイメージすれば良いでしょう。PlayMakerの場合は実行順を制御する機構がないようですので、FSM同士の関連には注意が必要です。(※:未確認ですがUnityのスクリプトの実行順制御によりPlayMakerFSMの実行順も制御できるかもしれません。PlayMakerFSM自体も一種のコンポーネントですので。Indicator(カスタム)処理中を示すインジケーター(くるくる回転するアイコン)を停止・非表示にします。Idle何も行いません。CLICK」イベントが来るのを待ち受けます。OnClickIdleの状態からボタンが押下された時に遷移する状態です。BGM(カスタム)再生中のBGMを停止します。SE(カスタム)スタートボタン押下の効果音を再生します。CheckPrologueスタートボタン押下後に到達するステートです。初回起動かどうかを判断して、プロローグかゲーム画面に遷移を振り分けます。上記のOnClick中に書いても良い処理ですが、分かり易さのために分けてあります。Int(PlayerPrefs)PlayerPrefに保存されている物語の進行度を表す数値を取り出し、変数storyにセットします。Unity標準のPlayerPrefs.GetInt()と同様のアクションですが、複数の値を同時に扱えるのが少し便利です。Compare(Logic)さきほど取り出したstoryの値が1以上なら「START_GAME」イベントを発生しゲーム画面へ遷移する処理へ、1未満なら「FINISHED」イベントを発生しプロローグへ遷移する処理へ移ります。StartPrologue初めてスタートボタンを押した時に到達するステートです。Object(GameObject)インスペクタ上で指定したフェードアウト用のNGUIスプライトを有効にします。Unity標準のGameObject.SetActive()と同様のアクションです。Wait(Time)1.1秒間待機した後に指定のイベント(今回は指定してないのでFINISHEDイベント)を発生します。このように待機した後に処理を行いたい場合は、別の状態を用意してイベントにより遷移させる必要があります。このアクションが途中に挟まれていたとしても、以降のアクションも全て実行される点に注意が必要です。LoadLevelPrologueプロローグ画面へ遷移します。Banner(カスタム)広告バナーを画面外に隠します。Level(Level)「Prologue」という名前のシーンをロードします。UnityのApplication.LoadLevel()にあたるアクションですが、Additive/Asyncなどがオプションとして選択できるようになっています。StartGameすでにゲームをやったことがある場合にスタートボタンを押すと到達するステートです。StartPrologue」とほぼ同様なので説明は省略します。LoadLevelGameゲーム画面へ遷移します。さきほどのプロローグ画面への遷移と違いロード中画面を挟んだ遷移なので、アクションの内容が異なっています。BGM(カスタム)ゲーム画面用のBGMの再生を開始します。Idle」の何もアクションの無い状態が特徴的だったと思います。いう状態を用意することで、外部からの操作でイベントを飛ばしてもらって処理を行うというような記述が可能になります。プロローグの場合とゲーム画面の場合でフェードアウトの処理を変えていたり、BGMを止めたり、ロード中画面を挟んだりなど微妙な調整を色々としています。これがどのような違いを生むかは、もうじきリリース予定の「あ〜ちゃ〜の大冒険」でぜひ確認してみて欲しいと思います。ver.3.0.7で大きな変更があったので、新しい方法をご紹介。前回のUIAnchorとUIStretchを使う方法でも実現可能です。3.0.7f1今回、SpriteなどのWidgetを追加すると従来の「Widget」以外に「Anchors」という項目が付いてきます。ここでPaddedやRelativeといった項目を設定することで、以前のUIAnchor+UIStretchのような配置とサイズを設定出来ます。各設定の仕方はざっとこんな感じ。Unifiedと同様だが、親コンテナを個別に指定できるpixcel単位の指定では本末転倒なので、今回はRelativeで。Targetに親コンテナとなるオブジェクトを指定。前回と同様に各Spriteの配置とサイズを親コンテナに対する比率で指定していきます。すると...こんな感じで画面サイズに合わせて各Spriteの配置・サイズが調整されて表示されます。ver.3.0.7f1)」)画面下部に5枚のSpriteを並べて表示する場合を考えます。綺麗に並べてありますが、画面のサイズが変わると...Spriteがはみ出してしまったり、余計なスペースが空いたりしてしまいます。そこで、Spriteにアンカーを付与して位置を調整します。各Spriteに対してUIAnchorコンポーネントが付加されます。左下に配置したいSpriteを選択しInspectorビューでUISpriteのPivotを左と下に設定して、UIAnchorのSideをBottomLeftとします。OffsetのXを-0.2と設定します。この辺りは色々な設定値の組合せで自由に出来ますので、目的の位置にSpriteが配置されるように他のSpriteに関しても設定してみて下さい。今度は画面の横幅を縮めた時にSprite同士が重なるようになってしまいました。そこで今度はストレッチの設定をして、Spriteが画面サイズに合わせて拡大・縮小するようにします。各Spriteに対してUIStretchコンポーネントが付加されます。SizeのXは0.2と設定します。すると今度は...画面サイズが変わってもSpriteが自動的に拡大・縮小されて画面下部に並ぶようになりました。Sizeの設定で色々と変更することができます。垂直方向でも同様の設定で対応が可能です。試しに画面いっぱいに5×5=25枚のSpriteを敷き詰めてみました。左がiPhoneの4インチで、右がiPadです。キャンセル投稿を送信できませんでした。メールアドレスを確認してください。メール送信チェックに失敗しました。このブログではメールでの投稿共有はできません。