2012年9月29日土曜日

Unity3.5.6+iOS6対応のMac環境について

Unity 3.5.6がiOS6対応してリリースされることになって自分は色々とMac環境に変更が必要になったので紹介したい。

投稿内容はSnow Leopard環境を現在もっている方向けで、それ以外の方にとっては意味ある内容でないのであらかじめ注意。


理由は、これまでSnow Leopard + XCode4.2でしばらくiOS書き出しをしてたもののiPhone5(すなわちiOS6)対応をするためには、いよいよMountain Lion + XCode4.5に環境変更が必要になったためだ。

そこで苦労したこといくつか:

  1. Mac OS再インストール後、Unityを再インストールする都度アクティベーションをやり直す必要がある
  2. iOSのProvisioning Profile設定を2台目のMacで実機テストできるように証明書などの設定をしていて、エラーが出てきてハマった。

1.については苦労しない方が多いとおもうが、同一ライセンスでアクティベーションを過剰に繰り返すと、ライセンス規約に違反したとみなされ、Unity社から警告が来ることがありえるので注意。

2.のオーガナイザーで出たエラーは以下。
xcode could not find a valid private key / certificate pair for this profile in your keychain.

解決する際に参考にしたサイトは以下。様々な検証をしてくれた先人がいたので自分は助かった!

2台目以降のMacで実機テストをする方法
http://labs.karappo.net/iphone/index.php?itemid=274

その後は順調にUnityでビルドして、ターゲットをiOS6にして問題なく実機転送に成功!

環境構築だけで苦労したが、実際のゲーム開発で困ったことが出てきたらまた紹介することにする。

【ちょっと息抜き】各国でのUnity情報源を調べる

本日は土曜日。ゲーム開発は手を休めて暇な検索テストをしてみた!



【調査内容】

  • 主要な国のUnity情報源を見つける。方法論としてはYahoo!で「Unity3d」と検索してみて有用な情報ソースから各国の違いをみつける
  • 国によりもっとも使用頻度高い検索エンジンは異なるがあえて無視(またこの調査自体、いったい何か意味あるかどうかw)
  • 各国の「ウェブ全体で検索」でなく「各国のサイトで検索」も併せて使用
【対象】
  1. www.yahoo.com
  2. uk.yahoo.com
  3. ru.yahoo.com
  4. www.yahoo.de
  5. www.yahoo.fr
  6. it.yahoo.com
  7. nl.yahoo.com
  8. www.yahoo.kr
  9. www.yahoo.cn
  10. www.yahoo.co.jp
【結果】

アメリカ・イギリス・オランダ
・英語のunity3d.comのフォーラムやAnswersが見れるためそれ以外のブログなど活字の情報源は少ない
・ビデオチュートリアルがもっとも充実している

ドイツ
・Unity Insiderというフォーラムが充実している

韓国・日本
・個人ブログでの情報が多い特徴


イタリア・フランス・ロシア・中国
・情報源がやや少ないようにみえた(探し方が悪かっただけかもしれません)


最近はGoogle Chromeだと上記すべてのサイトの活字を日本語に訳してくれるから便利ですね!
逆にいうと、ビデオチュートリアルが充実すると、画面を動かしているのは分かるけど活字と違って何を言っているかが全く分からないw

最近は各言語の音声認識率は100%に近いのだから、機械翻訳でも良いから自動的に日本語に変換してほしいものです!

Unityについて言えばそれにしても国によって(あるいは英語が母国語に近いかどうか)、情報の取り方違いそうだなーというのが正直な感想。またUnity3.5.6については日本語が検証情報が案外ともっとも多かったりw

言葉の壁を乗り越えてUnityを標準言語で行こうぜ!

2012年9月28日金曜日

Unityプログラミング応用(エディタ編集)~その3

前回に引き続きプログラミング応用編として、Unityエディタの編集に関して学習していきたい。
リンク先のウェブサイトの記載と併せ、ポイント解説の翻訳を見比べてほしい:

http://catlikecoding.com/unity/tutorials/star

GUILayoutボタンはどのような働きをする?
メソッドのGUILayout.Buttonはボタンを表示し、かつクリックされたかどうか値を返す。普段使用するときはif構文のなかで呼び出しを行いそのコードブロックの中で必要な処理を行うようにする。
GUIメソッドのなかで実際に起きる流れであるが、デモのケースではOnInspectorGUIが一度ならず呼び出しが行われる。レイアウト処理、再描画、有効なGUIイベントの発生(よくあるケース)、等の際に呼び出しされる。マウスクリックイベントがボタン上で発生したときのみtrueを返す。
理解を深めるためにはDebug.Log(Event.current);をOnInspectorGUIメソッドの最後に追加するなど、テストすると良い。
通常は心配する必要がないが、テキスト生成など重い処理の際には認識する必要がある。必要性もないのに1秒あたりに何度も発生させたい処理ではない。

新しい配列要素は何が入る?
SerializedPropertyを通して新しい配列要素を挿入した場合、新しい配列要素はその一つ手前の要素の複製になる。もし最初の要素である場合はデフォルト値が入る。

ValidateCommandって何?
GUIイベントのひとつであるValidateCommandは特別のアクション(元に戻す、やり直し等)の発生を示す。ExecuteCommandに近い印象があるが、このコマンドタイプは別にあり、意味がわずかに違いつつ全く同じ目的で使用することになる。残念ながらどこでチェックをして、GUI設計の内容によってどちらかのイベントだけが発生して両方ともには発生してくれない。正直どうしてなのかは分からない。
そうすると安全に対処する方法は両方ともチェックすることだ。この場合にかぎっていえばValidateコマンドをチェックすることで要件は満たせているようだ。

breakって何? キーワードbreakを使ってループから抜け出すことが出来る。複雑な条件があって早い段階でループを抜け出したい場合に便利だ。
for(int i = 0; i < 100; i++) { if(i == 5) { break; } DoStuff(); }
と同じ結果になるのは:
for(int i = 0; i < 5; i++) { DoStuff(); }

foreachって何?
forループの便利な代替手段がforeachだ。通常のforループに比べてオーバーヘッドがあるので自分はゲームコードでは絶対使わない。だけどエディタコードで反復する整数が不要な場合は気にせず使用する。
foreach(Star s in targets) { s.UpdateStar(); }
と同じ結果になるのは:
for(int i = 0; i < targets.Length; i++) { Star s = (Star)targets[i]; s.UpdateStar(); }

OnSceneGUIはどうしてtarget引数が必要?
下位互換のためとおもわれる。マルチオブジェクトのエディットはUnity3.5から導入された。その前のバージョンはtargetしか変数がなかった。

ワールド座標にどうやって変換する?
ローカル座標をワールド座標に変換するためにはオブジェクト階層のTransformマトリクスを適用する。Unityはシーンのレンダリングで自動処理してくれるが、自ら行う必要があるケースが存在する。この場合はTransform.TransformPointメソッドを使う。

ローカル座標にどうやって変換する?
ワールド座標に変換する場合とまったく逆のステップをまったく逆順序で行う。Tranform.InverseTranformPointメソッドを使う。注意点としてワールド座標の場合はさきに回転(rotate)してそれからtranformを行ったが、元に戻すためには順序を逆にしてtransformを先に行って逆変換(invert transform)をローカル座標で行う必要がある。

スナップショットって何?
もし元に戻すステップを各々のGUIイベントに用意すると、ハンドルをドラッグする操作は何十もの修正ステップに対する元に戻す操作履歴が必要になってしまう。だから代わりにハンドルはオブジェクトのコピー、すなわちスナップショットを作成してして操作に対するひとつだけの元に戻す操作履歴ををその動作が終了したタイミングで登録する。SetSnapshotTargetはどのオブジェクトを用意すればよいかを取得できる。
すべてのUnityエディタGUI要素は本質的にこれと同じで、ハンドルのドラッグ、数値スライド、テキスト入力、あるいはその他の要素であれ同様である。
-----------

Unityエディタ編集は覚えることを面倒くさがらず、うまく使いこなすと結果的に生産性があげられる、というのがポイントだとおもう。

一人でも多くUnityのエディタ編集をマスターしよう!

2012年9月27日木曜日

Unityプログラミング応用(エディタ編集)~その2

前回に引き続きプログラミング応用編として、Unityエディタの編集に関して学習していきたい。
リンク先のウェブサイトの記載と併せ、ポイント解説の翻訳を見比べてほしい:

http://catlikecoding.com/unity/tutorials/star

構造体(struct)を使用しないのはなんで?
Star.Pointが軽量でありデータは常に全てが必要であるため、構造体にすることでオブジェクトのオーバーヘッドを回避することは意味があるといえる。しかしUnityはカスタムの構造体の型をサポートしていない。だから格納したいものには、データをバンドルするクラスを使用せざるを得ない。
オブジェクトのオーバーヘッドやNullエラーの可能性が気になるのであればオフセットおよび色データを別の配列に保存することは可能である。しかし、その場合にはこれらの配列が同期していることを保証する必要がある。それも実現可能ではあるが、クラスにするアプローチがより簡単である。このデモで使用した理由はそのためである。

オーバーライド(override)は何をする?
オーバーライドは親クラスのメソッドを上書きするときに用いる手法。virtual定義されたメソッドのみオーバーライドできる。このデモのケースにおいてはUnityが型を正確に知らなくてもエディタのOnInspectorGUIメソッド呼び出しを行うことが出来る。
だとするとUnityのStartやUpdateイベントめせっどはoverideキーワードが必要なのだろうか。答えはNoでUnityは自らのイベントメソッドを機能させるためには別のアプローチをとっているためである。
じゃあOnInspectorGUIがUnityのイベントメソッドではないのはなんでだろうか?答えは分からないが何かが整合性ご取れていないかレガシーのコードなのであろう。

SerializedObjectって何?
クラスのSerializedObjectはUnityオブジェクトのラッパー(wrapper)あるいはプロキシとして機能する。ブラックボックスのように何が入っているか分からずともデータをオブジェクトから抽出するのに使用することが出来る。Unityインスペクタが自身で作成した何かに対してもデフォルトのインスペクタを表示できるのはこのためである。元に戻す機能も無償で付属する。

EditorGUILayout?って何?
クラスのEditorGUILayoutはUnityエディタで表示するための便利ユーティリティである。さまざまな描画を行うメソッドが含まれ、デモのケースではSerializedPropertyを描画するためのみにしようしている。
EditorGUIクラスも似たような便利ユーティリティであるが、この場合は自らGUIレイアウトを処理する必要が出てくる。

GUIContentって何?
GUIContentはラッパー(wrapper)オブジェクトでありテキスト、テクスチャ、ツールチップ(ToolTip)などラベルに使用するものが対象。

GUILayoutをEditorGUILayoutの代わりに使用するのはなんで?
ゲーム開発に普段使っているUnity GUIを使用するので問題ない。GUILayoutは基本的なラベルやボタンの機能を提供する一方でEditorGUILayoutはエディタ特有の入力フィールドなど保持している。
-----------

次回はいよいよ最後のまとめ!プログラミングのポイントを押さえて、Editorを使いたおそう!

2012年9月26日水曜日

NGUI 2.2.xバージョンアップ時のUnityバージョンに注意


NGUI公式フォーラムにて、

・NGUI 2.1.6から2.2.1にバージョンアップした
・Unity3.5.5f3でないとエラーが出た

との報告があがっていますので共有します:

http://www.tasharen.com/forum/index.php?topic=1747.0
September 23, 2012, 04:00:54 AM

リンク先によればエラーメッセージは以下が表示されるとのこと。

"Assets/NGUI/Scripts/Internal/UIDrawCall.cs(272,38): error CS1061: Type `UnityEngine.Mesh' does not contain a definition for `colors32' and no extension method `colors32' of type `UnityEngine.Mesh' could be found (are you missing a using directive or an assembly reference?)"
---------

NGUI2.2.xあたりからcolor32入りましたが、これはUnity3.5.5から導入されたプロパティであるため、確かにこのバージョン以降でないとエラーが出るのは間違いありません。(color32についてはリンク先を参照のこと)

強火で進め:Color と Color32 の違い
http://d.hatena.ne.jp/nakamura001/20120822

そういやAsset StoreのNGUI説明もバージョンに関する記載がないなー?NGUIにかぎらず同様のエラーが出た場合はまずUnityバージョンの確認をしましょう!

2012年9月25日火曜日

Reflections EngineでUnityにリアルな光の反射を

Asset Storeで興味深いアセットがあったので紹介したい。

まずは恒例の紹介文の翻訳から:

http://u3d.as/content/tong-games/reflections-engine/2XP

想像力を生かして光を美麗に描画するゲームの仕組みを手に入れよう!このアセットであなたのゲームをより美しくする

デモに含まれる内容:
光線の作成
屈折
光線の複数反射
連鎖での反射
イベントの作成

Reflections Engineは反射光の物理計算の威力を発揮しあなたのゲームを強化する

アセットの提供内容:

*コードを一行も書かずに使える、簡単かつ強力なBehaviorスクリプト
*使いやすいイベントが用意されており、Unityのメッセージ(Start、OnCollisionEnterなど)とシームレスなコードが用意されておりプロジェクトに簡単に統合できる
*使用デモあり。
*readmeファイルと役に立つドキュメンテーション
------

おおっ!たった$10のアセットInspectorで光の量を調整したり反射の向きが変わるのはけっこう感動するので、ぜひ動画でみてほしい!

どれも2分程度の動画。最初の1分半でセットアップ、最後30秒で実行テスト。時間がない人は最後30秒づつをみるだけでも、十分威力は伝わるはず。

光線の作成

屈折

光線の複数反射

連鎖での反射


イベントの作成

この作者は学習型のAIのアセットもリリースしている様子。ニューラルネットワークと呼ばれるものでこれも興味深いのでまたの機会に紹介したい。

Reflections EngineでUnityにリアルな光の反射をゲームに取り込もう!

2012年9月23日日曜日

Unity 海外の活動:ヤングゲームデザイナーズ夏季教室

海外で若い人はどうやってUnity学んでいるのかな?とおもって外人のつぶやきをみていたら面白い動画みつかったので共有したい。

Unityテクノロジー社UKのBen Pitt氏がリードする形で英国バークシャイヤーのサウスヒルパークというところでヤングゲームデザイナーズ夏季教室と銘打ったゲーム開発ラボが行われて、動画が共有されている:


動画をみると、Unityを勉強している大学生もサポート役を担う形で少年たちに教えている様子があり、言っていたコメントとして「みんなゴッドオブウォーとか既成のFPS作りたがるかな?とおもったけど全然そんなことない。自分のアイデアを持っていてそれを作るための方法を知りたがっているんだ」とあって、この子達は期待できるなと感じる。

動画見ると高い完成度のものを作成していることが良く分かるのだが、子供たちのコメントも「凄く勉強になってて、特にスクリプトの書き方が良く分かった」と言っているあたり本当に感心だ。

日本もゲームジャムとか素晴らしい取組みはあるが、まだこのビデオに映ってるような年齢層の子供たちに対して同等レベルのイベントはない。吸収が早い子供たち向けに一種のエリート教育としてもっと力を入れてもよいのかも。WiiUの事例にかぎらずUnityがゲーム開発の標準言語となった今、いつか若きスタープログラマーがこのツールで最高のゲームを作ってくれるのは間違いないのだから。

外国の子供たちもUnityの勉強頑張って面白いゲームを世界に提供してくれ!

ブックマークに追加

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

自己紹介

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

ページビューの合計

過去7日間の人気投稿