2013年6月30日日曜日

Unity Tips #41 - 明示的な演算子(自動的な型キャスト)

前回に引き続いて Unify Community から明示的な演算子(自動的な型キャスト)に関する Tips の翻訳を紹介する:



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

Nov 2012

明示的な演算子(自動的な型キャスト)


Tip #41 - Implicit operators (automatic type casting)

Unity 特有の Tips というより C# 言語に関するものだ。もしゲームのコードをひとつのプラットフォームから別のものに移植しようとするとき、例えば XNA から Unity に移植するとき 明示的な演算子は自動的な型キャストするときに便利であり、コードの可読性を高めて移植しやすくなります。

MSDN ドキュメントへのリンクは次のとおり

プログラマはしばしば悪いクセとして、自分たちにとって便利になるはずの言語仕様や API 機能を忘れてたり、見逃したりするものだ。
--------

なるほど!便利なものは明日から意識して使える場面あるか考えようぜ!

2013年6月29日土曜日

TNet 1.7.2

TNetバージョンアップ情報です:

http://www.tasharen.com/forum/index.php?topic=2650.0
June 24, 2013, 09:56:52 AM





1.7.2:
- 新規: プレハブで TNObject をネストできる機能を追加
- 修正: RequestChannelList による戻り値をオープンであるチャネルのみに修正
- 修正: TNObject の遅延関数コールが使用されない不具合を修正
- 修正: ウェブプレイヤー接続の不具合を修正
-------

不具合の修正対応。是非とも最新にしておこうぜ!

2013年6月27日木曜日

Oculus Rift体験記「未来への入り口だぁぁ!!」

話題のOculus Riftを体験。おぉぉ、「未来への入り口」だぁぁ!!
GDC 2013の会場で一般公開されて以来、注目を集めまくっているOculus VR社の対応ヘッドマウントディスプレイであるOculus Riftを初体験したのでダラダラとレポートしてみることにした。

なお今回は @GOROman さんのご厚意によって機材を使わせていただいた。心から感謝!!


色々なコンテンツを体験したが、主観で3つ取り上げることにする:

  1. Mikulus
  2. ローラーコースター
  3. Skyshopライティング
まあ、今日はロジカルな話はまったくなく思うがままにつらつらと書き連ねてみることにする。


1.Mikulus

Mikulusがどういうものか知るには次のリンクを見ると良い:

http://www.nicovideo.jp/watch/sm20786059

クリプトンが初音ミクの大ヒットを当初予想してなかったのは有名な話だが、まさかOculus Riftにベストマッチすると筆者は予想してなかった。

ヘッドマウントディスプレイ着けてみて、おぉぉぉ!! 自分がバーチャルな世界にまさにいると言った感じ。初音ミクの視線、首の動きがこちらに合わせて動いてくれて(いわゆるLookAt関数のターゲットがカメラになっている)、バーチャル体験をさらに強調してくれる。

水面の波の動きがあるが、バーチャルな世界でライティングの影響は大きいと感じる。リアリティが大きく増すんだなぁ、、、


2.ローラーコースター

ローラーコースターがどういうものか知るには次のリンクを見ると良い:

http://www.3dfocus.co.uk/virtual-reality-2/oculus-rift-doesnt-look-real-but-feels-real/13356


まず、高いところから真っ直ぐ下に落ちるようなジェットコースターにバーチャル世界で乗る。まあ現実世界であったら間違いなくレールから外れると思われる(笑

しっかし、真下を見るようにすると高所恐怖症の人は無理だろう。

また、コンテンツの作りこみが上手で、リアリティのある城のテクスチャが上手に活かされて、眺めているだけで楽しい。

3.Skyshopライティング

Skyshopライティングがどういうものか知るには次のリンクを見ると良い:

バイク座面のUnityデモ
自身のブログでもUnity Technologies CEOが絶賛した高品質のライティング、Skyshopアセットを取り上げたが、正直これがOculus Rift体験の中でもっとも感動した。

なぜ、良かったのか。バイク座面のテクスチャが近くで見ても作りこみがされているために、皮の材質が現実世界のものにしか見えない。

おぉぉ、ここまで再現できるのだと、現実世界をみているのかバーチャル世界をみているのか区別がつかないほどだ。

関連記事

ヘルガソンさんも絶賛!! Skyshopのライティング
http://gamesonytablet.blogspot.com/2013/06/skyshop.html


その他、雑記

あと、体験する前まで予想してなかった事柄を列挙してみる:

  • 装着すると目の下の隙間が目立つ
    • 外人仕様なのでデカイ鼻の人にはピタリかもしれないが日本人は目の下に隙間が出来る。現実世界は見えないのがベストだが・・・まあ、これは時間が経ってからは気にならなかった
  • HUDの文字は十分判読できる
    • 個人差はあるかもしれないが、十分読めた。やっぱりHUDがあるとドラゴンボールのスカウター登場って感じがバリバリする
  • つかむ、投げる動作が快感
    • バーチャル世界で物を投げたり、火のついた本を噴水で消火する、とか。これが予想外に快感だ
  • 油断すると危険
    • 途中で現実世界のXboxコントローラを持ちかえたりするのだが、何しろ視界がない。うっかり前後に動くとどこかにぶつかって大怪我しそうだ(笑
あとは、頭の向きを変えたときに液晶の反応速度がおそくてブレる(いわゆるブラーがかかってる)。まあ、このあたりは製品版が出るころに改良されてるだろうと予想する。

反対に、予想どおりの点としては10分以内でも酔いが発生したことだ。まあ、気分悪くなったらちょっとだけ目をつぶって直るまで待ったので大丈夫だった。個人差が大きいところだろう。
------------

さてダラダラと書いてきて、最後に体験した自分の結論。

未来への入り口が確かにそこにあった。課題をクリアしていけば、Oculus Riftは間違いなく将来のヒット作だ!

2013年6月22日土曜日

NGUI 2.6.3 - Unity3.4以前のサポート機能廃止

NGUI バージョンアップ情報です:

http://www.tasharen.com/forum/index.php?topic=11.30
June 21, 2013, 05:33:10 AM

2.6.3:
- 新機能: Unity 4.1以降を使用するときのパフォーマンスおよびガーベージコレクションを顕著に改善
- 新機能: Atlas Maker の中でスプライトを選択してプレビューする機能を追加。
- 新機能: Transform インスペクタにてウィジェット パネルが static の場合に注意を促す機能を追加
- 新機能: パネルツールの中からパネルの Widgets Are Static フラグをトグルできる機能を追加
- 修正: Update の中でウィジェットが繰り返しレイヤー変更をチェックする不具合を修正
- 修正: ラベルが自動縮小(Shrink-to-fit)に成っている場合、できるかぎり自動拡大するよう修正
- 修正: ラベルをハンドルではサイズ変更できないように修正(移動、回転は引き続き可能)
- 修正: Max Width を調整したときにサイズを自動変更するように修正
- 修正: アトラスの作成で稀に発生していた Null 例外の不具合を修正
- 修正: ドラッグパネル と 非Sticky キーの組み合わせが正しく動作しない不具合を修正
- 修正: ドラッグ&ドロップが非Sticky キー押下で正しく動作しない不具合を修正
- 修正: Flash エクスポートが正しく動作しない不具合を修正
- 廃止 残っていたUnity 3.4 向けのサポート機能をすべて廃止
------

Unity3.4以前のサポート機能は廃止されているので注意しようぜ!

2013年6月16日日曜日

TNet 1.7.1

TNetバージョンアップ情報です:

http://www.tasharen.com/forum/index.php?topic=2650.0
June 08, 2013, 08:43:31 PM





1.7.1:
- 修正: iOS ローカルアドレス解決の不具合を修正
- 修正: 特定のルータの接続フォールバック対応
- 修正: NAT ループバック失敗時の回避対応
- 修正: TNManager.player の名前が TNManager.playerName と常に一致するよう修正
--------

最新版にアップデートして不具合が少ないバージョンに乗り換えようぜ!

2013年6月10日月曜日

シーンビューでImage Effectsプレビュー

Unity創業者Nicolas Francisがframebunkerに移ってまだ二ヶ月ほど。面白い技術記事を書いているので紹介したい:

------
http://framebunker.com/blog/viewing-image-effects-in-the-scene-view/
Jun 4, 2013

シーンビューでImage Effectsプレビュー


コードを書いたばかりで共有してみようと思い立った:Image Effects をシーンビューでみれるためのフックがある。下のコードを .cs ファイルにコピー&ペーストして、SceneViewFilter から任意の Image Effect を抜き出せる。
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class SceneViewFilter : MonoBehaviour {
#if UNITY_EDITOR
	bool hasChanged = false;

	public virtual void OnValidate ()
	{ 
		hasChanged = true; 
	}
	
	static SceneViewFilter  ()
	{
		SceneView.onSceneGUIDelegate += CheckMe;
	}

	static void CheckMe (SceneView sv)
	{
		if (Event.current.type != EventType.Layout)
			return;
		if (!Camera.main)
			return;
		// Get a list of everything on the main camera that should be synced.
		SceneViewFilter[] cameraFilters = Camera.main.GetComponents ();
		SceneViewFilter[] sceneFilters = sv.camera.GetComponents ();

		// Let's see if the lists are different lengths or something like that. 
		// If so, we simply destroy all scene filters and recreate from maincame
		if (cameraFilters.Length != sceneFilters.Length)
		{
			Recreate (sv);
			return;
		}
		for (int i = 0; i < cameraFilters.Length; i++)
		{
			if (cameraFilters[i].GetType() != sceneFilters[i].GetType())
			{
				Recreate (sv);
				return;
			}
		}

		// Ok, WHICH filters, or their order hasn't changed.
		// Let's copy all settings for any filter that has changed.
		for (int i = 0; i < cameraFilters.Length; i++)
		if (cameraFilters[i].hasChanged || sceneFilters[i].enabled != cameraFilters[i].enabled)
		{
			EditorUtility.CopySerialized (cameraFilters[i], sceneFilters[i]);
			cameraFilters[i].hasChanged = false;
		}
	}

	static void Recreate (SceneView sv)
	{
		SceneViewFilter filter;
		while (filter = sv.camera.GetComponent ())
			DestroyImmediate (filter);

		foreach (SceneViewFilter f in Camera.main.GetComponents ())
		{
			SceneViewFilter newFilter = sv.camera.gameObject.AddComponent (f.GetType()) as SceneViewFilter;
			EditorUtility.CopySerialized (f, newFilter);
		}
	}
#endif
}

(いくつかマヌケな間違いを指摘してもらった内容を修正をして現在はバージョン 2 だ)

これを可能にしているフックの名前は Unity の SceneView.onSceneGUIDelegate だ。このデリゲートに追加した任意の関数はシーンビューがイベントを処理するときにコールされる。引数は シーンビューである。これを通してシーンビューのカメラを取得できる。そうすればあとは Image Effects をすべてカメラーにコピーする作業になる。実現するために AddComponent を使用して Unity の SerializedObject を使用して各々のフィールドをコピーする。

備考:十分にテストしてないので、配列やネストされたオブジェクト等はハンドリングできない。それでも自分たちは便利に活用できている。

楽しんでくれ!そして壊れたとしても大きな問題はないはずだ。
------

Unity創業者Nicolas Francisも現場に戻って頑張ってるぜ!

2013年6月9日日曜日

Unity Tips #45 DrawGizmo 属性

前回に引き続いて Unify Community から DrawGizmo 属性に関する Tips の翻訳を紹介する:



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

DrawGizmo 属性


Tip #45 – DrawGizmo attribute

DrawGizmo 属性により MonoBehavior クラス以外での Gizmo 描画ロジックをセットアップ出来る。次のコードにより Editor クラス内でのメソッドでの DrawGizmo 属性使用例を紹介する。

 /// <summary>
    /// Provides a editor for the <see cref="TileMap"/> component
    /// </summary>
    [CustomEditor(typeof(TileMap))]
    public class TileMapEditor : Editor
    {
        /// The RenderMapGizmo method will be called if the map is selected. 
        [DrawGizmo(GizmoType.Selected | GizmoType.Active)]
        static void RenderMapGizmo(TileMap map, GizmoType gizmoType)
        {
            // store map width, height and position
            var mapWidth = map.Columns * map.CellWidth;
            var mapHeight = map.Rows * map.CellHeight;
            var position = map.transform.position;
            var activelayerHeight = map.ActiveLayer * map.Depth;
 
            if (map.drawGridLines)
            {
                // draw layer border
                Gizmos.color = Color.white;
                Gizmos.DrawLine(
                    position + new Vector3(0, activelayerHeight, 0), position + new Vector3(mapWidth, activelayerHeight, 0));
                Gizmos.DrawLine(
                    position + new Vector3(0, activelayerHeight, 0), position + new Vector3(0, activelayerHeight, mapHeight));
                Gizmos.DrawLine(
                    position + new Vector3(mapWidth, activelayerHeight, 0),
                    position + new Vector3(mapWidth, activelayerHeight, mapHeight));
                Gizmos.DrawLine(
                    position + new Vector3(0, activelayerHeight, mapHeight),
                    position + new Vector3(mapWidth, activelayerHeight, mapHeight));
 
                // more draw logic here
        }
    }

別の方法としては OnDrawGizmosSelected と呼ばれるメソッドを自身の MonoBehavior コードの中に用意することだ。

    /// <summary>
    /// Provides a component for tile mapping.
    /// </summary>
    public class TileMap : MonoBehaviour
    {
 
        /// <summary>
        /// When the game object is selected this will draw the gizmos
        /// </summary>
        /// <remarks>Only called when in the Unity editor.</remarks>
        private void OnDrawGizmosSelected()
        {
            // gizmo draw code goes here            
        }
    }


しかし Gizmo 描画ロジックの典型的な使用例は Unity Editor の中で使用する場合であるため、 DrawGizmo 属性により描画ロジックをより適切な場所に配置できる。
---------

Unity のエディタスクリプトの知識を積み重ねようぜ!


Unity Tips #44 private フィールドのシリアライズ

前回に引き続いて Unify Community から DrawGizmo 属性に関する Tips の翻訳を紹介する:



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

private フィールドのシリアライズ


Tip #44 – Serializing your MonoBehaviors private fields

public プロパティによりラップされた private フィールドがあって、それらの private フィールドの値をシーンで保存したい場合、SerializeField 属性を使用することが出来る。
-------

Unity の醍醐味のひとつにテスト実行中に値を試行錯誤するのご群を抜いて便利だとおもう。シリアライズ周りは隅々まで知り尽くして日々のプログラミングに活かそうぜ‼

2013年6月8日土曜日

Unity Tips #53 Undo.IncrementCurrentEventIndexについて

前回に引き続いて Unify Wiki から Undo.IncrementCurrentEventIndex という聞きなれない関数について翻訳を紹介する:



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

Tip #53 Undo.IncrementCurrentEventIndex

Undo.IncrementCurrentEventIndexについて


Undo.IncrementCurrentEventIndex を使用することで、Unity が短時間で連続に行なった多くのアクションを取り消すよりも、エディタスクリプトがシングルアクションを取り消すことが出来ます。コードを実行する前に Editor フォルダに配置して下さい。

Create Object ボタンにより 10 個のキューブが作成され、各々についてUndo.RegisterCreatedObjectUndo をコールします。このボタンをクリックして Ctrl + Z を押下して作成された全てオブジェクトを取り消して下さい。

ふたつめのボタン Create Single Object は 10 個のキューブが作成されますが、さらにUndo.IncrementCurrentEventIndex メソッドをコールして作成された各々のオブジェクトが、別の取り消しアクションを持つべきことをUnity に通知します。Create Single Object をクリックして 10 個のキューブ作成して、Ctrl + Z を押下することで各々のオブジェクトの作成を個別に取り消して下さい。

備考:この記載の時点では、Unity ドキュメントには Undo.IncrementCurrentEventIndex に関する記載がなく、結果は 0 件になります。
    using UnityEngine;
    using UnityEditor;
 
    public class UndoTest : EditorWindow
    {
 
        public void OnGUI()
        {
            if (GUILayout.Button("create object"))
            {
                this.Create(false);
            }
            if (GUILayout.Button("create single object"))
            {
                this.Create(true);
            }
 
            GUILayout.Label("use ctrl+z to undo each action");
        }
 
        private void Create(bool single)
        {
            for (int i = 0; i < 10; i++)
            {
                if (single)
                {
                    Undo.IncrementCurrentEventIndex();
                }
 
                var obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
                obj.transform.position = new Vector3(Random.Range(-10, 10), Random.Range(-10, 10), Random.Range(-10, 10));
 
                Undo.RegisterCreatedObjectUndo(obj, "create " + obj.name);
            }
        }
 
        [MenuItem("CBX/UndoTest")]
        public static void ShowWindow()
        {
            GetWindow<UndoTest>("UndoTest").Show();
        }
    }
--------------

うーん、公式ドキュメントにないものは使用継続できるか分からないからなぁー。

それでも便利なTips。知識として積み重ねようぜ!

2013年6月3日月曜日

NGUI 2.6.2

NGUIバージョンアップ情報です:

http://www.tasharen.com/forum/index.php?topic=11.30
June 01, 2013, 03:14:49 PM

6/9/2013に赤字箇所を修正

2.6.2: (一時的にNGUI Pro ライセンスのみ)
- 新機能: アトラス作成時にアルファの事前乗算をテクスチャに自動的に適用する機能の追加
- 新機能: UIWidget.Raycast 関数を追加してコライダを使用せずに Raycast を実行
- 新機能: UITexture にテクスチャのプレビューを追加
- 新機能: UIAnchor が一回だけ実行されて自らを破棄するオプションを追加。最適化もわずかに実施。
- 新機能: Transform インスペクタが UI 上で選択されたときに使用頻度の低いフィールドをグレーアウト。
- 修正: Transform のマルチ オブジェクト編集が正しくなかったところを修正。
- 修正: ラベル上で Shrink to fit オプションが横方向だけでなく縦方向にも動作するように修正。
- 修正: インスペクタ上でスプライトを変更することで、自動リサイズしていたのを廃止。リサイズをするときは MakePixelPerfect の使用が必要、
-----

※NGUI ProはTasharen公式サイトから$200で開発リポジトリも変更出来る特殊ライセンス。これはアセットストアに載ってないの注意!

NGUI Pro に加わった機能は特殊ライセンスの方によるテスト期間が終われば通常のNGUIにも反映される内容。

本リリースに期待しようぜ!

NGUI通常版でついに 2.6.2 がリリースされた!早速ダウンロードして最新版で使おうぜ!(NGUI作者もサポートはつねに最新版!)

ヘルガソンさんも絶賛!! Skyshopのライティング

タイトルのとおりだが、革新的なシェーダがAsset Storeに登場したので紹介したい。

まずはSkyshopウェブサイトの Unity プロジェクトサンプルから。

http://www.marmoset.co/skyshop
うーん。ライティングが一味もふた味も違う!!

Unity CEOのデビッド・ヘルガソンさんもデモをみて「狂ったように綺麗!しかもブラウザで表現できている」とツイートしているのも頷ける。

-----------
https://www.assetstore.unity3d.com/#/content/8880
5/30/2013

Marmoset Skyshop はHD画質ベース ライティングのためのシェーダおよびツールのパッケージ。シーンのライトを自然なものにしよう!

Skyshop はエディタツールによりインポート、変換、およびパノラマ背景の管理の機能を提供。シェーダのセットも提供されていて、レスポンスが速く、高品質なレンダリングを実現。幅広いプラットフォームがサポートされていて、ハイエンド GPU からウェブおよび iOS デバイスまでサポートする。
------

やばい。$125で高いけどマジで欲しいなぁ・・・

2013年6月1日土曜日

Unity Tips #46 - ExecuteInEditMode 属性

前回に引き続いて Unify Community から ExecuteInEditMode 属性に関する Tips の翻訳を紹介する:



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

ExecuteInEditMode 属性


Tip #46 - ExecuteInEditMode Attribute

もし Unity エディタに入っているときに実行したい MonoBehaviour コードがある場合、 ExecuteInEditMode 属性を使用すれば、ゲーム再生と同様に MonoBehaviour は実行されます。
---------

Unity エディタはスクリプトでも便利。是非活用しようぜ!

Unity Tips #47 - AssetPreview クラス

前回に引き続いて Unify Community から AssetPreview クラスに関する Tips の翻訳を紹介する:



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

AssetPreview クラス


Tip #47 - AssetPreview

エディタ スクリプトによりアセットのプレビュー テクスチャを取得できることは知っているだろうか? AssetPreview クラスのメンバを一回確認してみると良い。
------

ヘェ~、アセットのプレビューもエディタ スクリプトで取得できるんだな。何かのときに活用しようぜ!

TNet 1.7.0

TNet のバージョンアップ情報です:

http://www.tasharen.com/forum/index.php?topic=2650.0
May 26, 2013, 06:48:01 PM





1.7.0
- 新機能: TNObject.ownerID および TNManager.isTryingToConnect を追加
- 修正: チャネルを追加するとき、デフォルトで非永続となるように修正
- 修正: TNServerInstance.StartRemote で戻りパラメータが正しくない不具合を修正
- 修正: Windows 以外のプラットフォームでパブリック IP アドレスのない LAN で LANサーバに正しく Join できない不具合を修正
-------

バージョンアップとしては、少し間が空いているかも・・・、もしかして Unity GUIに時間をかけてくれているのか??(勝手な推測)

ブックマークに追加

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

自己紹介

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

ページビューの合計

過去7日間の人気投稿