2013年9月29日日曜日

【朗報】NGUI 3.0に2.7同梱!!

注目を集めていたNGUI3.0.0の大幅修正。いよいよリリースだがNGUI2.7を同梱するという配慮が判明した!

公式サイトにはリリースとともに操作に関する動画もいくつか公開されているようだ。

関連記事

【大注目】NGUI3.0は大幅修正が確定!
http://gamesonytablet.blogspot.jp/2013/09/ngui30.html


-----------------
http://www.tasharen.com/forum/index.php?topic=11.25
September 21, 2013, 06:02:26 AM

NGUI 3.0.0 リリースをリリース:

アップグレードに関する動画(英語):
http://www.youtube.com/watch?v=uNSZsMnhS1o&list=UUQGZdUwzE8gmvgjomZSNFJg

初心者 / 全体概要に関する動画(英語):

http://www.youtube.com/watch?v=OT0hTxjjkY4&list=UUQGZdUwzE8gmvgjomZSNFJg

ユーザ要望にもとづく Scroll view サンプル(英語):

http://www.youtube.com/watch?v=OiA4o8KqBFI&list=UUQGZdUwzE8gmvgjomZSNFJg

--------

前述の記事のとおりNGUI3.0.0は過去バージョンとの連動がなくなる内容が多いため、ダウンロードするか迷ったユーザも多いはず。

Asset Store の案内をみてビックリ!! NGUI3.0 に NGUI2.7がきっちりと同梱されてます。


いずれにせよ、新たなプロジェクトを作成する人はNGUI3.0.0の仕様に合わせていくべきだろうが、過去バージョンを二度とダウンロード出来ないかと心配した人には当面の安心感はあるだろう。

もっともいつまでNGUI2.7.0を同梱するかは定かでない。今後のNGUI仕様は心してかかるべき!!

2013年9月14日土曜日

【大注目】NGUI3.0は大幅修正が確定!


NGUI 3.0.0 バージョンアップが近々リリースされるが、大幅に修正される予定のようだ!!
(9/14時点では一般ユーザ向けは未リリース)



しかも下位互換性は大幅に犠牲にされる様子。きっちり調べたうえで、次のバージョンアップに対応するか検討する必要がありそう・・・

余裕ある人は英語版のビデオチュートリアルも見ておこう!

NGUI 3.0 ビデオチュートリアル

http://www.youtube.com/watch?v=OT0hTxjjkY4&feature=c4-overview&list=UUQGZdUwzE8gmvgjomZSNFJg

http://www.tasharen.com/forum/index.php?topic=11.30
September 13, 2013, 08:40:00 AM

*** 注意 ***

アップデートの前にプロジェクトのバックアップを必ず行って下さい。
3.0.0はメジャー更新です。アップデートの後、全てのシーンおよびプレハブは開いて再度保存する必要があります。
アップデート後、そのままでコンパイル出来ない可能性が非常に高くなります。全てのイベントデリゲートはインスペクタ向けシステムに置き換えされており、 Transform スケールはウィジェットで使用されません。同梱されたサンプルおよびコードを必ずチェックして、代替としてどうすべきか確認して下さい。詳細なアップグレード ガイドの提供は今後提供するようにします。

3.0.0:

- 新機能: ウィジェットのバッチング方法を変更し、残る Z バッファおよびデプスの課題を修正。
- 新機能: ドローコールは必要に応じて自動的に分割(サンドウィッチングの課題を修正!)
- 新機能: ウィジェットの幅および高さの指定方法を再設計。値は明示的となり、スケールは今後未使用。
- 新機能: 3D でクリッピングパネル対応となり、カメラの傾けの際も正常に動作するように機能追加。
- 新機能: ウィジェットのネストに対応。
- 新機能: 同一オブジェクトに対する複数ウィジェットに対応
- 新機能: NGUI メニューバーからセレクション ハンドルのカラーを変更できるように機能追加。
- 新機能: UICheckbox は UIToggle となり、共通のルートオブジェクトを指定する代わりにグループ ID を指定するように機能追加。
- 新機能: TweenWidth および TweenHeight をウィジェットの幅および高さのプロパティを Tween できように追加。
- 新機能: ラベルのオーバフロー メソッドを指定できるように追加:コンテンツの縮小(shrink content)、コンテンツの Clamp (clamp content)、高さのリサイズ(resize height)、または自由にリサイズ(resize freely)
- 新機能: ラベルが resize label オーバーフロー モードにあるとき、ドラッグハンドルをグレーアウト。
- 新機能: シンプルな EventDelegate クラスを追加して全てのジェネリック コンポーネントを使用できるように改善。
- 新機能: ウィジェット コンテナ(Widget Container) クラスを追加してウィジェットのグループを容易に選択して移動できるように修正(ボタン、ウィンドウを考慮)
- 新機能: リアルタイム(RealTime) ヘルパー クラスを追加して IgnoreTimeScale を削除。使用方法:RealTime.time, RealTime.deltaTime.
- 新機能: ほぼ全てのコンポーネントのインスペクターの外見を修正。
- 修正: ラベルが垂直に正しく整列しない不具合を修正。

イベント デリゲートのアップグレード時のポイント


ビルトインされたイベント デリゲート(入力変更、tween 完了、スライダー変化、ボタンクリック、等)に次のようにサブスクライブ:

コード例: [Select]

EventDelegate.Add(slider.onChange, MySliderChange);

...MySliderChange は次のように出来る:

コード例: [Select]

public void MySliderChange()
{
    Debug.Log(UISlider.current.value);
}

しかし(!!!)、インスペクタ上で同じ値がコードの変わりにセットできるようになった。ゲームオブジェクトをドラッグ&ドロップして、次にドロップダウンリストから MySliderChange を選択する。コーディングの必要性がなくなった。関数の型が void (void) かつ public であることを確認すること。

ウィジェットの大きさ/スケールのアップグレード時のポイント


ウィジェットは Transform のスケールを全く使用しなくなった。widget.width および widget.height が代わりに使用できる。ワールド座標の cornerが必要な場合は widget.worldCorners を使用する。ローカル座標の Corner widget.localCorners を使用する。さらに必要ならば widget.innerCorners もある。

その他のアップグレード時のポイント


* プロジェクトの各々のシーンを開き、保存すること。全てのゲームオブジェクトを有効化する必要があり、それはアップグレードロジックが有効なものしか対応しないため。
* ウィジェットを使用するプレハブをシーンにドラッグ(表示されるように)して、次にプレハブもアップグレードされるように変更を反映します。
* 全体で UICheckbox を UIToggle に置き換える。
* UICheckbox は ルートがないため、各々のラジオボタンでグループ ID を代わりに指定。
* Make Pixel Perfect ボタンの名称を Correct に変更し、ウィジェットの各々の次元の横に配置。
------

なかなかリリースされない次世代Unity GUI はDuke Nukem Forever (なかなかリリースされなかったゲームタイトル) と、あだ名がつけられてしまっているが、このNGUI 3.0 が近い形になるのだろうか??

2013年9月8日日曜日

Unity Tips #25 TextArea/TextFieldオブジェクトのGet/Setカーソル位置

前回に引き続いて Unify Community から TextArea/TextFieldオブジェクトのGet/Set カーソル位置に関する Tips の翻訳を紹介する:



http://wiki.unity3d.com/index.php/Tip_of_the_day

Aug 2012

TextArea/TextFieldオブジェクトのGet/Set カーソル位置


Tip #25 - Get/Set caret position for TextArea/TextField object

ドキュメント化されてない Unity API である TextEditor コントロールを使用することで、より強力な制御コントロールにアクセス出来ます。
 var te = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl);
 if (te != null) 
 {
     te.MoveCursorToPosition(new Vector2(5555, 5555));
 }
-------------
ドキュメント化されてない Unity API は将来もあるとは保証されない。そのリスクをとっても使う場面があり、研究して人柱になるぜ、という方はどうぞ!!

2013年9月1日日曜日

【衝撃】NGUI作者がUnite 2013で新GUIを語る

Unite 2013でUnity4.3に新GUIはまだ搭載されないニュースは失望があった一方、新GUIの検討内容に関する発表は驚きも沢山あった!!

今回は新GUIについて語ったNGUI作者のピッチから翻訳内容を紹介したい:

------------

新GUIであるDNFGUIに関するUnite発表資料
http://tasharen.com/unity/unite.ppt

August 28 2013


DNFGUIとは?

  • 有志のコミュニティにより名づけられた新GUIのニックネーム
  • UIシステムにおける「Duke Nukem Forever」(いつまでも発売されない事で有名だったゲームタイトル)となってほしいとの願い

UnityGUIの歴史を辿ると・・・

  • 即時モードGUI(いわゆるOnGUI)
    •  開発者ベースのUIシステム
  • 保持モードGUI(Unity GUIとしてUnite登場)
    •  次のフレームまで保持
    •  アーティストの使い勝手を向上
しかし実際には魅力がイマイチだった・・・

欠点は・・・


  •  根本的に厳格すぎて柔軟性がない(色のTweenでさえ、マウスオーバー時に二つの要素をハイライトさせたくても出来なかった)
  •  複数解像度のハンドリングも課題(画面サイズの変更に対して完璧にピクセル対応を目指したため低解像度と高解像度をサポートするだけでUIは作り直しが必要)
  •  等々

結局NGUIのほうが作業しやすく柔軟性があり、ユーザインタフェース設計のときに強力だった。
    •  保持モードGUIは中止となった
    •  「えっ、ScaleFormを統合すればいいんじゃね?」の答えはNGUIをUnrealに統合しないのと同じで、コンポーネントベース、柔軟で、オープンソースがUnityと思想が一致しているから

一方、NGUIの欠点は・・・


  1. NGUIパネルはひとつのドローコールに統合してバッチングする。但し同じアトラスを使用する前提になっていることがネック
    • NGUIでは同じアトラスであればデプスを調整するだけで良いけど、複数アトラスある場合はデプスとZバッファを調整。
    • UIが傾けられるだけで、形状の中心がシフトして、NGUIがUnityの距離ベースソートに制限されるため、おかしくなる
    • スクロールパネルを3D UIを試せばすぐ分かる話で、次期UIでは解消したい課題
  2. ウィジェットのネストできない
    • 理由は、NGUI設計のときにUnityライクにしたためTransformのスケールがウィジェットのサイズを示すようにしたため。Transformの累積性により300x200ピクセルの背景に10x10のウィジェットを含めると、スケールを複合すると3000x2000になるため出来なかった
  3. クリッピング時のハンドリングに関する課題がある
    • NGUIではクリッピングは本質的にパネル上で四角形(Rectangle)を指定して下位層のウィジェットのシェーダを別に置き換えることとなり、これにより実際のクリッピングを実現していた。ここではスケールは使用されず、パネルのコンテンツのスクロールは複雑極まりなかった。新GUIではこれを完全に書き換えることにした
  4. フォントおよびラベルのハンドリングが苦手
    • フリータイプのライブラリを使用できず、Unityが公開している機能には制約があり、グリフ(Glyph)の過去のエクスポートセットを読み込む必要があった。何かの理由により、フォントサイズをすべてのラベルのデフォルトサイズとする必要があり、スプライトのリサイズをするとき、ラベルの最大範囲を指定できる代わりに値セットとして(最大幅、最大行数)を修正する必要があり、これが痛かった

  
UIシステムの作り直しを考えたとき、NGUIをベースラインにすることにした。

最初はイベントシステムから着手した。NGUIを使用した人なら改善したイベントシステムでOnClick, OnPress, OnDragを使い慣れているはずだ。新システムも同様なのだが、NGUIと違って、完全に拡張可能だ。カメラにコンポーネントをアタッチしてコライダに Raycast する代わりに Raycast 関数を上書きして自身のロジックを実装できる。例えば自身の Raycast を UI 階層に出来た。

このシステムの良いところは、マウス、タッチ、およびコントローラの入力を直感的にハンドリングして、NGUI で使用するナビゲーションを選ぶ必要があるのと違って、入力されるイベントにもとづいてシームレスに別のものに切り替えることができる。メニューをナベゲーションするのにマウスを使用して、次にXBox360コントローラに切り替えたり、それが自動的に正しく動作する。UIウィジェットの場合、左を押下するだけで左側にあるもっとも近い選択可能なウィジェットを見つけてくれる。右を押下すれば逆もまた正しく動作できるし、さらには希望すればウィジェットを明示的に指定することだって出来る。

もうひとつ便利な機能はイベントバブルである。もしゲームオブジェクトが特定のオブジェクトをハンドリングしない場合、親オブジェクトに自動的にいって、さらに親を辿る。もしスクロールビューのなかにボタンがあれば、ボタンにクリックイベントハンドラをつけてスクロールビュー自身にドラッグイベントハンドラもつけられる。
同一イベントから複数のリモート関数をトリガーする機能も、インスペクタで選択するだけで実現できて、便利である。

新しいUIシステムはスプライトベースであり、アトラスベースではない。つまり、UIスプライトは事前生成したアトラスの中の名前でなく、スプライト(テクスチャ)を参照する。

特定のアトラスを参照しないことがでウィジェットのカスタムマテリアルを指定する自由度が出来る。アニメーションを作成するために詳細テクスチャのUVを別にスクロールさせるだってできる。静的イメージで確認できるが、スライダのストライプも実際に水平に移動する。
すべてのアトラスおよびバッチングは自動的に行われ、考える必要がない。

結果として、ユーザにとっては:

  • 全てのZバッファおよびデプスソートの課題は完全に解決される。ラベルを二つのスプライトに挟みたい場合、簡単になる
  • 3D UIウィンドウを傾けて、中にクリッピング領域が必要な場合、簡単になる
  • WYSIWIGで描画順を保持したまま、UIシステムはドローコール数を削減する


新UIシステムでの新しいポイントは、ウィジェットの幅と高さを指定するのに別の値を使用して、Transformのスケールに依存しない。つまり、ウィジェットのネストがより容易になる。ネストされたウィジェットの位置が自動的に親オブジェクトのピボット位置に相対的となるため、ボタン内にラベルがああるボタンを作成して、角の位置をドラッグしたとしてもラベルは中央の位置を保持する

ラベルは完全に再デザインされていて、Unityのダイナミックフォントシステムを常に使用するため、西洋言語以外でフォントのGlyphをサポートさせる場合も心配がない。再デザインの副作用として、リッチテキスト形式がサポートされ、テキストの中にサイズタグを埋め込むことが出来て、文章中の文字をいくつかリサイズすることも容易だ。

クリッピングのハンドリングもまた再デザインしたところである。 Unity 4.2 のステンシルバッファ対応を活用することで新UIシステムは四角形だけでなく、任意の形状のクリッピング領域をサポートする。
-----------

Unityの新GUIには早くベールを完全に脱いでほしいぜ!!

ブックマークに追加

このエントリーをはてなブックマークに追加

自己紹介

自分の写真
Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます

ページビューの合計

過去7日間の人気投稿