強火で進め このページをアンテナに追加 RSSフィード

整理された情報は こちら へどうぞ。

2012年03月31日

[][]「Perfume global site project #001」のモーションデータをUnityで再生してみた

D

「Perfume global site project #001」で配布されてるモーションデータをDAZ Studio Proに取り込んでFBXファイルで出力したものをUnityで再生してみました。

Perfume global site project #001

http://perfume-dev.github.com/

同様にUnityで試してみた人のブログ

PerfumeをUnityで踊らせてみた - nszwryuichiのブログ

http://nszwryuichi.hatenablog.com/entry/2012/05/02/184130

2012年03月30日

[][]Cheetah3D経由で3Dモデルデータを取り込んだ時に位置がズレる問題の修正方法

昨日のエントリーで3DモデルデータをCheetah3D経由に取り込んだ場合には位置がズレる問題が解消したと書きました。この症状の解決方法が見つかったのでメモしておきます。

まずは3Dモデルデータの状態を確認。今回のデータはCheetah3Dで確認するとこの様な構造に成ります。

f:id:nakamura001:20120331001629p:image

主な部分を解説すると本体部分の「Madka」。ほとんどのデータはここに含まれますがスカートのひらひらした部分のうち2つが別パーツ(「polySurface42」と「polySurface43」)と成っています。ひらひらの部分の1つは「Madka」に含まれ、計3つ存在します。

このそれぞれ選択した所、「Madka」の部分はこの様に

f:id:nakamura001:20120331002051p:image

f:id:nakamura001:20120331002436p:image

ひらひらの部分はこの様になりました。

f:id:nakamura001:20120331002123p:image

f:id:nakamura001:20120331002500p:image

見比べてみるとピボットの位置が異なる事が確認出来ます。

このピボットの位置を全て同じ位置にした所、Unityに取り込んでも正しく位置にレンダリングされました。

修正の手順

修正の手順を説明します。まずは「Madka」の位置をキッチリ(0, 0, 0)の位置に移動させておきます。「Madka」を選択後、ピボット編集モードに切り替えます。

f:id:nakamura001:20120331002629p:image

ここで位置データを手打ちで0を入力して(0, 0, 0)の位置に設定したい所ですが手打ちした場合にはピボット編集モードにも関わらず、モデルデータも移動してしまいました(コレって回避する方法有るのかなぁ?)。

しょうが無いので「スナッピングの設定+マウスで移動」で位置調整を行いました。

まずはスナッピングの設定。ここの設定をグリッドにします。

f:id:nakamura001:20120331003044p:image

この状態でマウスで移動させて(0, 0, 0)の位置に設定します。それぞれの位置が微妙にズレている可能性も有るのでX,Y,Zそれぞれの軸で移動させた方が確実です。

同様に「polySurface42」と「polySurface43」のピボットを(0, 0, 0)の位置に移動すると修正は完了です。

[][]テクスチャカラーのみ設定して有る3DモデルデータをUnityに取り込む

f:id:nakamura001:20120330112312p:image

こちらの動画にて配布されていたモデルデータをUnityに取り込んでみました。

Unityでモデルデータを取り込む場合にはテクスチャファイルの扱いにちょっと気を付ける必要が有ります。3Dモデルデータのファイル(fbxファイルなど)を取り込んだ場合にはテクスチャファイルを一緒に取り込んでくれません

その為、「テクスチャをUnityに取り込む → モデルデータを取り込む」という手順が必要です。

今回の場合には Tex フォルダを先にドラッグしてこの様な状態にします。

f:id:nakamura001:20120330110806p:image

なお、テクスチャファイルは出来るだけPrefabと同じフォルダに置く様にした方が処理が速くなります。詳しくは以下のページの Textures の部分を参照下さい。

Unity - Meshes

http://unity3d.com/support/documentation/Manual/Meshes.html

次に Fbx_Obj_madoka フォルダに有る、 Madoka.fbx を取り込みます。

f:id:nakamura001:20120330111025p:image

MadokaというPrefabをSceneにドラッグしてみるとこの様な描画になります。動画で紹介されている状態とはちょっとレンダリング結果が異なるみたいです。

f:id:nakamura001:20120330111201p:image

思いつく所は動画で説明が有った「このモデルはパフォーマンスの面からテクスチャカラーしか使ってない」という話。それにも関わらず、ライティング処理が効いているのが問題に成っているのだと思われます。

それを考慮して修正を行います。具体的にはPrefabの法線(Normals)の設定を None に変更し、 「Apply」ボタンを押します。

f:id:nakamura001:20120330111413p:image

するとこの様なレンダリング結果になります。

f:id:nakamura001:20120330111547p:image

Cheetah3D

このモデルデータを一度、Cheetah3Dに取り込んでから出力するとスカートのひらひらの部分が離れてしまいました。

f:id:nakamura001:20120330112133p:image

かと言ってCheetah3D上でのレンダリングはこの様におかしくなっていません。

f:id:nakamura001:20120330112439p:image

その為、恐らくはUnityがデータを取り込む時のインポート処理でおかしく成っているだとは思います。でも、 Madoka.fbx をCheetah3Dを介さずに直接Unityに取り込むと大丈夫というのが… うーむ、分からない。

(2012/03/30 追記)

ピボットの位置を修正すると正しくレンダリングされる様になりました。

Cheetah3D経由で3Dモデルデータを取り込んだ時に位置がズレる問題の修正方法 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120330/1333121667

2012年03月29日

[][]「第3回 渋谷Unity技術勉強会」に参加してきました

【満員御礼/増員442名】第3回 渋谷Unity技術勉強会-Unity×Html/Unity 2D- : ATND

http://atnd.org/events/24710

2012/03/29_第3回 渋谷Unity技術勉強会-Unity×Html/Unity 2D-( #ShibuyaUnity ) - Togetter

http://togetter.com/li/280373

今回は仕事が長引いてしまって会場に到着するのが遅れてしまって余り聴けていないです。幸い、どの講演もスライド資料が公開されていますのでそのリンクを貼っておきます。後、聴いた部分については補足を書いておきます。

Unityテクニカル講座#2 「スクリプトによるオブジェクト制御」 - WisdomSoft 赤坂玲音さん

渋谷Unity勉強会02 Web公開版.pptx - Microsoft PowerPoint Web App

https://skydrive.live.com/view.aspx?cid=766FED1751719B1D&resid=766FED1751719B1D%21196

Unity×HtmlでiPhone向けオンラインゲーム開発事例発表 - 細田幸治さん

  • Mock(サーバーが無くてもテストが可能な環境)を作る
  • Appleのリジェクト。キャッシュファイルの保存場所が悪くてアウト → これはこのブログでも以前紹介したこちらの事だと思われます。
  • Appleのレビュアーは指定のアカウントを使ってくれない事も… → レビュー用のアカウントを準備したのに別のアカウントを使われた
  • バージョンアップ時にはレビュー中も既存のサービスを動かしておく必要が有る事に注意
  • In Review中はメンテの予定が有ってもリスケする
  • Unityで素早くゲームを作成し、早い段階でゲーム自体の面白さの追求に入る

【FAQ】

CIツールとは具体的に何ですか?

→Jenkins

【懇親会で聴いた内容】

  • MVCモデルでMVCをきっちり分けて作成
  • MについてはUnityに依存しない(MonoBehaviourから継承しないなど)様に作成し、テスト出来る様にする
  • Jenkinsでビルドしてサーバにアップ→大阪の営業所の人達がダウンロードし、iTunes経由でインストールしてテストという体制を作っている
  • Jenkinsでやっている主な処理はUnityのコマンドラインビルドとXcodeのコマンドラインビルドの2つ

「FlasherがUnity 2Dアニメーションに挑戦してみた」 - @asus4 さん

2012-03-28_shibuya.unity.pdf - Google ドキュメント

https://docs.google.com/file/d/0BzkrgJU_kB6HMlU1RWJwSWxRR1dVNVFwRkpKS1FJdw/edit?pli=1

Unity内に2D画像データを作成。

f:id:nakamura001:20120330020333p:image


観覧車や十字の装置が回転する部分などは3Dで作成したものを回転させている。

f:id:nakamura001:20120330020451p:image

f:id:nakamura001:20120330020449p:image


Unityのパーティクルが面白くて色々と作った。雪や排気ガスの演出で使用。

f:id:nakamura001:20120330021758p:image

f:id:nakamura001:20120330021756p:image

トラックなどは2連の排気ガス。

f:id:nakamura001:20120330021755p:image

  • タイムライン内にメソッドを設定可能

【FAQ】

カーブは全部エディタでやってのですか?

→はい

苦労した点は

→キーフレームのコピペが無いのが苦労した

キーフレームは階層構造を変更したり、名前を変えると壊れますがその対策などは有りますか?

→無い

【感想】

Unityのアニメーション機能っておまけ程度と思っていて、「アニメーションは3DCGツール側で付ければ良いかな?」と思ってましたが使い所を考えて、上手く使うと意外とデキる子っぽい印象。ちょっと、自分でもちゃんと試してみよう。

全体の感想

平日にやっているイベントいう事も有り、そもそもの時間が短い為、遅刻して会場に到着すると一瞬で終了してしまう印象。今回は仕事の為に遅れたのでしょうが無いけどやっぱり、最初から観たい!!

この「渋谷Unity〜」自分は1回目から参加してます。1回目からかなりの参加者が集まりましたが、正直「最近話題になってるUnityとはどんなものなんだろうか?」と市場調査的に参加している人が多くて2回目以降は徐々に参加人数が減って行くのでは?と予想していました。しかし、実際には減るどころか、毎回参加人数が増えて行ってる状況です。

予想は全く外れ、本気でUnityについて勉強に来ている実際にUnityを使って開発を行なっている人やこれから利用を検討している方々ばかりみたいです(懇親会で聞いた感じでもその様な印象です)。

リアルにUnityを使って開発をしたり、これから開発をしようという方が東京だけで400人近く集まる位になったのだなぁ。としみじみと実感した勉強会でした。

2012年03月28日

[]ARC対応と非対応の環境両方に対応するコードの書き方

今、何かと話題なOpenUDIDのARC対応と非対応の環境両方に対応するコードが良かったのでメモ。

https://github.com/ylechelle/OpenUDID/blob/master/OpenUDID.h

#if __has_feature(objc_arc)

#define HAS_ARC 1
#define RETAIN(_o) (_o)
#define RELEASE(_o) 
#define AUTORELEASE(_o) (_o)

#else

#define HAS_ARC 0
#define RETAIN(_o) [(_o) retain]
#define RELEASE(_o) [(_o) release]
#define AUTORELEASE(_o) [(_o) autorelease]

#endif

念の為、この記入の前にこの辺りの記述を入れておいた方が良いかな?

#ifndef __has_feature         // Optional of course.
  #define __has_feature(x) 0  // Compatibility with non-clang compilers.
#endif

関連情報

__has_feature() についての説明。

Clang Language Extensions

http://clang.llvm.org/docs/LanguageExtensions.html

[][]Flashエクスポート用のアドオンの料金が決定

まだ詳しい事は書かれていないですがFlashエクスポート用のアドオンのライセンス料金が発表されました。

Unity Technologies Blog » Blog Archive » Unity & Flash update

http://blogs.unity3d.com/2012/03/28/unity-flash-update/

Flash BasicとFlash Proの2つのライセンスが有り、400ドルと1500ドルです。

現在はPreview版なんで別途料金は発生していませんが正式版が出たらこちらのライセンスが必要になるのだと思われます。

ブログ記事には「我々は今までの価格モデルにこだわる」と書かれているのでこちらのライセンスも買い切りでメジャーアップデート以外は料金がかからないのかな? まぁ、詳細が発表されるまではどうなるか分からないですが…

関連情報

FlashやAIRにゲーム開発向けの機能が追加。使い方によってはライセンス料金発生 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120328/1332942191

[][]FlashやAIRにゲーム開発向けの機能が追加。使い方によってはライセンス料金発生

日本語のニュース記事。

iOSAndroid向けゲーム作成APIを追加:Adobe、「Flash Player 11.2」と「Adobe AIR 3.2」の正式版をリリース - ITmedia エンタープライズ

http://www.itmedia.co.jp/enterprise/articles/1203/28/news078.html

  • 8/1から有料。それまでは無料で使用可能

(2012/12/05 追記)

無料期間が延長されました。

Flash Player プレミアム機能の適用開始期限の延期について - akihiro kamijo

http://cuaoar.jp/2012/07/flash-player-13.html

(追記ここまで)

  • アプリケーションの収入が5万ドルまでは無料。5万ドル以上の収益の場合には超えた部分の9%がライセンス料として徴収
  • 収益に計算するものは「アプリ内購入、購読料、スポンサー、広告料での広告のために受け取ったもの」から「税金、支払処理の料金、ソーシャルネットワークプラットフォームの手数料」などが差し引かれたもの。
  • AIRを使用してiOS/Android/Widows/Mac OS向けのパッケージを制作した場合には無料で利用可能
  • プレミアム機能としてはAdobe Alchemy(C/C++のコードが使用可能。Domain memoryへのアクセスを提供。簡単にまとめるとサンドボックス内のメモリでC/C++のコードを実行出来る様です)とハードウェアアクセラレーションに対応したStage3D
  • プレミアム機能のいずれか一方のみ使用する場合にはライセンス料金の発生無し
  • プレミアムのライセンスを受けてない場合にはStage3Dはソフトウェアレンダリング

関連情報

akihiro kamijoさんのブログ。

Flash Player プレミアム機能の発表 - akihiro kamijo

http://cuaoar.jp/2012/03/flash-player-8.html

Flash Player プレミアム機能についての補足 - akihiro kamijo|http://cuaoar.jp/2012/03/flash-player-12.html

Adobeのブログ記事。

Adobe Introduces Premium Features for Gaming with Flash Player 11.2; Announces Collaboration with Unity Technologies | Digital Media Blog

http://blogs.adobe.com/digitalmedia/2012/03/adobe-introduces-premium-features-for-gaming-with-flash-player-11-2-announces-collaboration-with-unity-technologies-2/

Adobeのブログ記事(詳細版)。

Adobe Flash Player Premium Features for Gaming | Adobe Developer Connection

http://www.adobe.com/devnet/flashplayer/articles/premium-features.html

2012年03月27日

[][]動作環境や定数でプログラム処理を分ける方法

定数

UnityのIDE上での実行か実機上の違いやUnityのバージョンの違いで処理を分けたい場合にはこちらに記載されている定数を使って処理を分けます。

Unity - Platform Dependent Compilation

http://unity3d.com/support/documentation/Manual/Platform%20Dependent%20Compilation.html

EditorOnly

InspectorでTagの選択を EditorOnly にしておくとUnityのIDE内だけで存在するオブジェクトとなります。もちろん、そのオブジェクトに付けておいたスクリプトなども動作しません。

gmcs.rsp

以下のエントリーで上がっていた gmcs.rsp を使って自分が定義した定数で処理を分ける事も可能です。

Unityのエディタ拡張について丁寧に解説されているスライド「Extending the Unity Editor」 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120210/1328884599

[]ShiVaが4月のベータ版からFlash Exporterを搭載

また、Native Clientの出力にも対応しているみたいです。

Flash Exporter now in BETA testing | ShiVa 3D

http://www.stonetrip.com/developer/1784-flash-exporter-now-in-beta-testing

[][]UnityでBox2D「Farseer-Unity3D」

f:id:nakamura001:20120328004548p:image

f:id:nakamura001:20120328004555p:image

Box2DをXNA環境に移植した「Farseer Physics Engine」を更にUnityに移植したもの。

ソースコードはこちら。

gabstv/Farseer-Unity3D

https://github.com/gabstv/Farseer-Unity3D

関連情報

Cats in the Sky - Farseer Physics (Box2D) and Unity (Part #1 - The Setup)

http://www.catsinthesky.com/blog/article/2012/03/5/farseer-physics-box2d-and-unity-part-1

Cats in the Sky - Farseer Physics (Box2D) and Unity (Part #2)

http://www.catsinthesky.com/blog/article/2012/03/7/farseer-physics-box2d-and-unity-part-2

2012年03月26日

[][]フィールドに投影するタイプのカーソル

この様なフィールドに投影するタイプのカーソルの作り方の解説。

f:id:nakamura001:20120326224315p:image

青い丸がカーソルです。カーソルで指定した位置にプレイヤーの移動をさせる様なゲームで使う事を想定したカーソルです。

これは先日の「第5回 UnityのためのCGとか勉強会」で教わった方法です。とても良いアイディアだったのでここに作り方をまとめておきます。

これは「Blob Shadow Projector」を使って実装して有ります。その為、まずはProjectorsというパッケージをImportします。

f:id:nakamura001:20120325233420p:image

次にそのImportしたものの中から「Blob Shadow Projector」というPrefabをHierarchyにドラッグします。

f:id:nakamura001:20120326230603p:image

「Blob Shadow Projector」のInpectorを確認するとCookieという項目が有ります。これが投影される画像となります。透過したい部分はアルファで抜いている画像を準備します。

今回はこの様な青い丸の画像を使いました。白い色の部分は実際にはアルファで透過されている部分となっています。

f:id:nakamura001:20120326225540p:image

設定は取り敢えずこの様にしておきます。

f:id:nakamura001:20120326231843p:image

SceneにTerrainを配置→山を作成→山の斜面にカーソルが投影される位置に「Blob Shadow Projector」を移動させてみます。

この時、山の斜面に投影されたカーソルの描画が汚い場合には。「Aniso Level」の値を増やしてみて下さい。大体は2に上げる位で大丈夫だと思います。なお、ここでの変更は「Apply」ボタンを押すまで反映されないのでこまめに押しながら描画状態を確認して下さい。

f:id:nakamura001:20120326231928p:image

このままでは投影された画像が実際のマウスカーソルの動きに追随しないので以下の様なプログラムを「Blob Shadow Projector」に追加しました。CustomCursorなど分り易いファイル名のJavaScriptファイルを作成し、「Blob Shadow Projector」に追加して下さい。

#pragma strict


function Start () {
}

function Update () {
    var hit : RaycastHit;
    var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    if (Physics.Raycast (ray, hit)) {
    	transform.position = hit.point + new Vector3(0, 4, 0);
    }
}

プログラムの処理としてはマウスカーソルの位置からRayを飛ばし、ヒットした位置求めます。そのヒットした位置からちょっとだけ+Y方向(ここでは 4 )の位置に「Blob Shadow Projector」の位置を移動させる事でヒットした位置にカーソル画像を投影させています。

シーンに置いてあるオブジェクトが多い場合には本来投影させたい地面以外にも投影される様な事が有ります。その様な場合には前のエントリーで紹介した投影対象から除外する設定を行なって下さい。

これで完成です。完成したものはこの様な動作となります。

D

なお、完全にTerrainしか使用しない場合にはRaycastを使わずにTerrain.activeTerrain.SampleHeight()で位置を取得する事も可能です。

2012年03月25日

[][]「Blob Shadow Projector」の使う時の注意点

(2013/07/28 追記)

Unity 4.2でDirectonal Lightの影のみ無料版でも利用可能に成りました。

Unity 4.2で無料版でもリアルタイムの影の描画が可能に - 強火で進め

http://d.hatena.ne.jp/nakamura001/20130728/1374973505

(追記ここまで)

Unityのフリー版では3Dモデルの形状データを反映した影をリアルタイムに生成する事が出来ない為、代わりに丸影を使います。

丸影はProjectorsというパッケージをImportして使います。

f:id:nakamura001:20120325233420p:image

丸影を投影する場合はこの中から「Blob Shadow Projector」と言うものを使います。

このライブラリは名前にも有る様に指定の位置からライトを照らすように「影を照らす」とでも言う様なイメージの処理を行います。

その為、こちらの画像の様に「Blob Shadow Projector」→「UFO」→「床」というレイアウトにした場合に影がUFOの頭にも投影されてしまいます。

f:id:nakamura001:20120325233730p:image

この場合、UFO(Playerキャラ)には影を投影しない様にしないと変ですね。この場合には投影から除外するレイヤーを設定する事で回避出来ます。

AddLayarでPlayerというLayerを作成し、UFOのInspectorでそれを選択します。

f:id:nakamura001:20120325234127p:image

次に「Blob Shadow Projector」のInspectorの「Igono Layers」でPlayerを選択する事で投影対象から外す事が出来ます。

f:id:nakamura001:20120325234525p:image

その様に設定する事でこの様な理想的な描画になります。

f:id:nakamura001:20120325234212p:image

[][]「第5回 UnityのためのCGとか勉強会」に行って来ました

第5回 UnityのためのCGとか勉強会 : ATND

http://atnd.org/events/26817

今回もモチベーションの高い参加者が多くとっても面白かった&タメになったイベントでした。

今回は開始時間が10:00から13:00に変わってたのも自分的にはGood!!w

色々と気になった、タメになった、印象に残った話をメモ。

QCARについての話

QCAR(現Vuforia、ARのライブラリ)で使うマーカーに使う画像はかなり複雑な形状で無いとダメだという印象を持っていたけど実際にはそんなに複雑で無い画像でも特徴点の多いマーカーに適した画像の作成は可能。

サーバにアップした時に表示されるマーカーとして適してるかどうかの判定は星1つの場合でも関連ファイルの生成を強行する事も可能。星1つのマーカー画像でも使えない事は無い(実際には社内基準として星3つ以上という基準を設定)。

Blob Shadow Projectorの話

自分がBlob Shadow Projectorで丸影を落とす時の注意点の解説について発表しました。こちらは後ほどブログ記事書きます。

(2012/03/26 追記)

書きました!!

「Blob Shadow Projector」の使う時の注意点 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120325/1332686549

Blob Shadow Projectorを応用して移動位置を指定するマーカーを地面に投影するテクニックを紹介した方が。これは上手いテクニック。こちらについても別途、ブログ記事書く予定。

(2012/03/26 追記)

書きました!!

フィールドに投影するタイプのカーソル - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120326/1332771968

MMDとIKの話

MMDのデータはヒザだけは特別な処理(X方向にしか回転しない)が行われている。MMD for Unityは現在こちらに対応していないのでヒザのアニメーションが動作しない。

IKはノボットのアームが目的の物を掴む動作を実装するタメに開発された。

MMDのIKはちょっと変わっていて、IKの処理を1フレーム中に複数回実行して積分するような処理を行なっている。1フレームに回転できる量を制限する事も可能。

MMD on WebGL 踊れるようになった(あと IK について) - by edvakf in hatena

http://d.hatena.ne.jp/edvakf/20111102/1320268602

これらとは別に「CCD IK」というアニメーション向けに特化したIKも存在する。

2012年03月24日

[][]Unity製のハイクオリティゲーム「SHADOWGUN」のステージデータが公開

f:id:nakamura001:20120325002512p:image

あの、ハイクオリティのUnity製ゲーム「SHADOWGUN」のSample Level(サンプルステージ)が公開されました。Unityでモバイル向けゲームを作る時のノウハウが満載に間違い無いでしょう。これからしっかりノウハウを盗ませて貰おうと思いますw

Unity Technologies Blog » Blog Archive » ShadowGun: Optimizing for Mobile Sample Level

http://blogs.unity3d.com/2012/03/23/shadowgun-optimizing-for-mobile-sample-level/

2012年03月23日

[][]SharpUnitでUnityのプログラムの単体テストを行う記事

Unity SharpUnitって単体テストツール使ってみた - 鵺鳥鳴く - Yahoo!ブログ

http://blogs.yahoo.co.jp/nanashi_hippie/53071189.html

コネクタ類を綺麗に整理出来るアイテム「ケーブルKEEPER」

コネクタ類を机の一箇所に整理出来るツール。便利そう。

ケーブルKEEPER

http://shop.bird-electron.co.jp/shopdetail/016000000007/order/

2012年03月22日

[][]安全なマルチスレッドプログラムの書き方

Entity Crisis: Safe Multithreading in Unity3D.

http://entitycrisis.blogspot.jp/2010/08/safe-multithreading-in-unity3d.html

(2012/01/24 追記)

Unityユーザー助け合い所にてこのプログラムだとデバッグをする時にエラーが発生するという投稿が有りました。

こちらの「Spicy Pixel Concurrency Kit」を使うとデバッグ時にも問題無く動作するとの事です。

Spicy Pixel Concurrency Kit by Spicy Pixel -- Unity Asset Store

http://u3d.as/content/spicy-pixel/spicy-pixel-concurrency-kit/312

[][]カメラの位置をスライダーで移動させるエディタ拡張

エディタ拡張の内容

スクロールが多い横スクロールタイプのアクションゲームやシューティングゲームだとカメラの移動が結構面倒臭いのでスライダーで移動出来る様に作成。Z軸方向に 0〜1000 の範囲で移動させる事が出来ます。

Main Cameraでのみ使える様に作成して有ります。

Main CameraのInspectorでこちらのスライドを変更する事で移動させる事が出来ます。

f:id:nakamura001:20120323001120p:image

作成方法

ProjectビューでEditorフォルダを作成し、その中にプログラムのファイルを置く。C#JavaScriptの両方のプログラムを作りましたのでお好きな方をお使い下さい。

C#の場合】

以下のプログラムを CameraCustom というファイルで保存。

using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomEditor (typeof(Camera))]
public class CameraCustom : Editor {
	public override void OnInspectorGUI()
	{
		if (this.target == Camera.mainCamera) {
		    GUILayout.BeginHorizontal();
		    GUILayout.Label("Position Z");
			Camera mainCamera = Camera.mainCamera;
			if (mainCamera != null) {
				Vector3 pos = mainCamera.transform.position;
				pos.z = EditorGUILayout.Slider(pos.z, 0, 1000);
				mainCamera.transform.position = pos;
			}
		    GUILayout.EndHorizontal();
		}
	}
}

JavaScriptの場合】

以下のプログラムを CameraCustom というファイルで保存。

#pragma strict

@CustomEditor (Camera)
class CameraCustom extends Editor {
	function OnInspectorGUI() {
		if (this.target == Camera.mainCamera) {
		    GUILayout.BeginHorizontal();
		    GUILayout.Label("Position Z");
			var mainCamera : Camera = Camera.mainCamera;
			if (mainCamera != null) {
				var pos : Vector3 = mainCamera.transform.position;
				pos.z = EditorGUILayout.Slider(pos.z, 0, 1000);
				mainCamera.transform.position = pos;
			}
		    GUILayout.EndHorizontal();
	    }
	}
}

関連情報

Unity - Extending the Editor

http://unity3d.com/support/documentation/Components/gui-ExtendingEditor.html

[][]Unityでのシングルトンの実装例

Entity Crisis: Unity3D Pro Tip: Singletons

http://entitycrisis.blogspot.jp/2012/03/unity3d-pro-tip-singletons.html

[]遠藤雅伸さんがゲームデザインについての本「遠藤雅伸のゲームデザイン講義実況中継」を発売

ゼビウスやドルアーガの塔の制作で有名な遠藤雅伸さんがゲームデザインについての本が発売されるみたいです。

遠藤雅伸のゲームデザイン講義実況中継|遠藤雅伸公式blog「ゲームの神様」

http://ameblo.jp/evezoo/entry-11198069110.html

遠藤雅伸さんは最近でも「三択de乾杯」と言う、ちょっと変わった宴会コミュニケーションゲームなども作られていおり、今でもゲームデザインのセンスは顕在です。

宴会コミュニケーションゲーム「三択de乾杯」|遠藤雅伸公式blog「ゲームの神様」

http://ameblo.jp/evezoo/entry-11084905591.html

このゲームはゲームと言ってもクイズの様に質問の後に答えが出るものでは有りません。

例えば「灯油のタンクの色は?」という出題が出て「青」「赤」「その他」などの様な選択肢が表示されます。

そこで「そりゃ、青でしょ?」「いやいや、赤だよ」「茶色じゃない?」「えーっ??」などいうそれぞれの育って来た地域や環境によって結果が異なる様な質問が出され、会話のきっかけを作るゲームとなっています。

目次

第1回 ゲームって何?
 人は何を面白いと思うのか
 「遊び」は人にとって必要か
 ゲームは最初「競争」だった
 コンピュータが作った新しいゲームの概念
 人はなぜデジタルゲームで遊ぶのか
 ゲームデザインとは
 ゲームの難易度
 メカニクスデザインとレベルデザインの分化
 演習:いろんな遊びを分析しよう

第2回 ゲームシステムのいろいろ
 競争原理からシステムは生まれた
 ゲームの得点と結果
 インフレーション
 集める・揃える
 コントロール
 偶然と駆け引き
 繋げる・並べる
 制限と時間管理
 演習:システムからゲームを考えてみよう

第3回 レベルデザインの原点
 タイムコントロール
 スピードコントロール
 確率的手法と統計的手法
 適正なパラメータの比率
 難易度の変化が及ぼす影響
 演習:我慢の限界・RPG の時間設定

第4回 テーマデザインの基礎
 ユーザーへのフック
 パクリ、オマージュ、インスパイア
 知的所有権の尊重
 世界観の構築
 反社会的テーマの是非
 ネーミングセオリー
 演習:キャラクター命名

第5回 多人数対戦ゲームのレベルデザイン
 対戦相手=レベル
 ハンディキャップ
 不確定要素
 バランスブレイカー
 演習:周回型双六を使ったバランスブレイカー実践

第6回 ゲームAIとはどんなものか?
 評価関数
 アフォーダンス指向
 モンテカルロ法
 AIの演出
 演習:七並べを使った簡易AIの自作

第7回 カードゲームのゲームデザイン
 汎用カードを使うゲーム
 専用カードを使うゲーム
 デッキ構築型ゲーム
 カードゲームのコスト
 エクスパンション
 演習:簡単なデッキ構築を体感する

第8回 ユーザーインターフェイス
 アナログゲームのUI
 デジタルゲームのUIの歴史
 汎用機のUIデザイン
 新しいデバイスとUI

第9回 シューティングゲーム
 シューティングゲームの起源
 物理的シューティング
 固定画面シューティング
 縦スクロールシューティング
 横スクロールシューティング
 スクロールのバリエーション
 パワーアップシューティング
 避けゲー
 タイミングシューティング
 音ゲー
 FPS/TPS
 フライトシューティング
 ガンシューティング
 ノンターゲットシューティング

第10回 ドライブゲーム
 ドライブゲームのゲーム性
 物理的なドライブゲーム
 黎明期のドライブゲーム
 1970年代のドライブゲーム
 1980年代前半のドライブゲーム
 1980年代後半のドライブゲーム
 1990年代のドライブゲーム
 2000年以降のドライブゲーム

第11回 アクションゲーム
 物理的なアクションゲーム
 入力デバイスと操作性
 さまざまなアクション
 アクションの組み合わせ
 操作感
 物理的挙動のリアリティとファンタジー
 理論的限界点と難易度の上限
 ミスバイパス

第12回 ゲームにおけるサウンド
 音の分類
 SE.Sound Effect
 ジングルとファンファーレ
 BGM.Background Music
 サウンドの使い方
 ワンショットとループ
 技術の進歩と音源
 音とゲームデザインの関係
 ボイスと声優

第13回 モバイルゲーム
 モバイルゲームの誕生
 携帯電話の変遷
 アプリ端末の進化
 世界の携帯電話
 モバイルゲームのゲームデザイン
 モバイルゲームの変遷
 モバイルゲーム市場の変化
 モバイルの現状と未来

第14回 オンラインゲーム
 オンラインゲームの通信方式
 ウェブゲームとクライアント型ゲーム
 オンラインゲーム運営の実情
 MO、MMO、オンラインカジュアル
 チャット関連の機能
 初心者ユーザーへの対応
 課金について
 不正行為への対応
 依存症について
 課金について、補習

第15回 パズルゲームとテーブルゲーム
 パズルゲームのゲームデザイン
 言語系パズル
 数字系パズル
 図形系パズル
 その他いろいろなパズル
 ダイナミック系パズル
 落ち物系パズル
 アクションパズル
 テーブルゲームのゲームデザイン

[]「第1回 渋谷 HTML5+CSS3+JS de ゲーム勉強会 html5技術講座 x コロプラ事例発表」に行って来ました

【即日満員/増員400名】第1回 渋谷 HTML5+CSS3+JS de ゲーム勉強会 html5技術講座 x コロプラ事例発表 : ATND

http://atnd.org/events/25251

ソーシャル時代に見るWeb系エンジニア生き残り戦略 - mochrom クロカワ リュートさん

なぜ戦略が必要なのか

ターゲットユーザを明確にし

ターゲットユーザーに響く方法で告知をし

長く愛されるサービス/アプリを目指す

集客の方法・事例

MacBook Airは中華包丁としてつかえるのか。」

f:id:nakamura001:20120322001745p:image

  • 「これ、中華包丁みたいだ。」から始まった
  • 関連動画も含めた総再生数は100万再生超
  • 国内ではGIZMODO JAPAN、デイリーポータルZ、ねとらぼ、秒刊サンデー。海外ではGIZMODO、CNN、Yahoo!香港、ディスカバリーチャンネルなどで取り上げられた
気をつけている事

ティザーは打たない

  • サービスやアプリを作った際、一番最初の露出が一番アクセスが多い。

つまりティザーを打つとティザーが一番アクセス数が多くなり、サービスローンチ時の告知には熱が冷めているという事に

アクセス解析の結果】

f:id:nakamura001:20120322001758p:image

ネタ系は長続きしない

  • ネタっぽいサービスは長続きしない。バズの最大瞬間風速は出るが直ぐに話題から消えていく
  • 逆に言えば日にちや期間の決まっているものならネタ系は相性良し
  • バレンタイン、エイプリルフール、クリスマスなどなど

mochromではメディアクエリー(Media Query/Media Queries)を使ってサイトをデザイン。どの様な解像度のデバイスでも最適なレイアウトで表示される。

PCブラウザで表示した場合でもウィンドウサイズを変更するとリアルタイムにレイアウトが変更されるのが確認出来ます。

mochrom モクロム

http://mochrom.jp/

以下のサイトでもメインの画像がどの様な解像度のデバイスでも綺麗に表示される

発砲美人 ”とりあえず”な男どもに一斉発射!義理チョコ拡散サービス/ mochrom

http://happo-bijin.com/


この様なデザインは凝ったページでは難しい→画像をそもそも少ししか使っていない為、可能

選択肢は武器だ

メリット

  • デザイナーと密に連携できれば、複数端末に対応させるのが楽になる
  • 急に新しいデバイスが登場しても別途対応しないで済む場合が多い

※新しいiPadがリリースされた時も特に何もしなくても綺麗に表示された

デメリット

  • JavaScriptを沢山使ったリッチUIは組みにくい

(Androidが… コロプラさんのゲーム本当にすごい…

(IEが… IEこわい…

  • 突然の仕様変更に弱い場合が多い

きっちり設計しても手厳しい仕様変更が来ると大変

(受注案件では結構しんじゃいますよね :(

  • 完全分業だと難しい

スマフォを考慮しつつ、PCサイトのデザインのみをデザイナーが作る。

マークアップはPCのデザインベースにスマフォやタブレットのレイアウトを考えて組む。必要であればスマフォ用の素材も作る。

マークアップエンジニアの柔軟な対応がカギ。

上手く行けば短期間での制作が可能。


どの端末からでもアクセスできる作りとは、ユーザーに無意識の選択肢を与えている。

逆に言えば選択をさせる手間すら省いている。

Webのあり方から考える技術の取捨選択

そもそもHTMLで有る利点とは一体?

「ブラウザさえあれば情報にアクセスできる」

ゲーム機、テレビ、スマートフォン、PC、現在様々なデバイスにブラウザが搭載されています。どの端末でも情報にアクセスできる、非常に強力かつ素敵なメリットだと思います。


HTML5の数ある機能をどのように選び、どのように使いこなすか、どのレベルまで習得し武器とするか。

技術はあくまでツールで、それらをどう使うかを考えられる脳と、使える・武器となる技術でどのようにな選択肢が持てるか、それで何を作るかが何より大事だと考えます。

HTML5による開発事例 秘宝探偵キャリー - 株式会社コロプラ 村松 巌さん

iPhone/iPad

App Store - 秘宝探偵[登録不要の無料本格RPGカードバトル]

http://itunes.apple.com/jp/app/mi-bao-tan-zhen-deng-lu-bu/id499806652

Android

秘宝探偵 [登録不要の無料本格RPG] - Google Play の Android アプリ

https://play.google.com/store/apps/details?id=jp.colopl.cr2

  • 講演者さん→昔はコーエーテクモでPCゲームを制作

開発環境にはこの様なデバッグ機能を準備。

f:id:nakamura001:20120322002008p:image

  • ブラウザ上でゲーム対戦時のステータス情報を確認可能
  • 10倍速までの高速動作機能も有り、素早く動作確認が可能
コロプラの事業

『人を固定化させてモノを動かす』今までのインターネットから『モノを固定化させヒトを動かす』に変える

f:id:nakamura001:20120322002231p:image

コロプラの現在の主要なサービスは以下の3つ

制作についての話

2011年 9月

開発開始。他の開発もしつつの開発

2011年 9月中旬

  • プロジェクト予算承認
  • リリース予定日は12/15

2011年 10月

スモールチームにて基盤技術の研究開発

「SEいれようぜ! 音楽がないとシュールだよ」→ガラケーなら音楽が無いのは普通だけどスマートフォンだと可能なのだからやってみよう

2011年 11月

プロジェクトメンバー合流、本格的な開発へ

  • プランナー 1名
  • エンジニア 1名
  • インフラエンジニア 1名
  • UIデザイナ 1名
  • キャラクターデザイナ 1名

2011年 12月

新メンバー加入、全社デバッグ開始

  • エンジニア 1名

実際には「デバッグやって」と言ってもみんな忙しくてやってくれないので直接出向いてデバッグして貰った

2011年 12月末日

社長「スマートフォンは出た瞬間が勝負。今の品質ではダメです! OKを出すまで、リリースは延期してください!」

社長はかなりのゲーマーでゲームの面白さの部分のチェックが厳しい

2011年 納会

「まじすか! お正月、なくなっちゃいますよ?」

他の社員「がんばって!」

2011年 大晦日

f:id:nakamura001:20120322003610p:image

2011年 元日〜

  • 度重なるデバッグ
  • パフォーマンスチューニング
  • ゲームバランス調整
  • 仕様の組み直し

会社が近いので徒歩で通勤している。行き帰りの30分でもデバッグをした


無事リリース。

f:id:nakamura001:20120322003843p:image

リリースして3日で結果が良くなかったらチームが解散する事になっていた。その為、リリース後も引き続き改良を進める。

おかげさまでランキング1位に

f:id:nakamura001:20120322004103p:image

ここから実践的な話。

  • 動作を速く
    • WebStorage
    • Resource埋め込み
  • 見た目の演出
    • CSSアニメーション
  • 機種依存
    • 機種依存への取り組み

社長「3G回線でもさくさく動かないと駄目」

「高速なWebアプリにするにはどうすればいいんだろう?」

高速なWebアプリを実現するためにいくつかのHTMLの実装方法を試してみた

組み合わせ通信量応答速度
動的HTML
静的HTML+Ajax
静的HTML+Ajax+WebStorage ←採用!

WebStorageって?
  • クライアントにkey-value方式でデータを保存するための機構
  • 以下の2つの種類が有る
    • localStorage

ブラウザを閉じても保持される。同じWebサイトならウィンドウ間でも共有できる。

    • sessionStorage

ブラウザを閉じると消える。ウィンドウごとのセッションで有効


API
  • localStorage / sessionStorage は共有のAPI
  • キーと値をセットして連想配列のようにデータを保持

【setter】

localStorage.setItem('name', 'シャオ'); // メソッド
localStorage.name = 'シャオ'; // プロパティアクセス

【getter】

var value = localStorage.getItem('name'); // メソッド
var value = localStorage.name; // プロパティアクセス

WebStorage → クライアントのキャッシュ機構として利用

  • キャッシュに適したデータ

 ⇒各ページでよく参照されるデータ

  ユーザーの体力、お金/自分のカードデータ/クエストデータなど

  • キャッシュに適さないデータ

 ⇒参照頻度が少ないデータ、他人のアクションによって変更されるデータ

  掲示板/PVPのユーザーリスト

(筆者注:PvPの事かな?PvPとは「Player vs Player」、つまりユーザー同士の対戦の事)

  • 効果

 ⇒Webサービスは参照がほとんど

 ⇒通信状況の不安定なモバイルでは恩恵が大きい

 

 ページによっては電波がないところでもページ遷移ができることも!

秘宝探偵の基盤技術の1つとして広く使用されています


W3Cの仕様だとWebStorageはJSのオブジェクトも可

  しかし、実際は…

文字列しか対応していないブラウザも多い

 →オブジェクトはJSONにして保存した方がよい

バイナリデータ(全角文字等)を保存するとおかしくなる場合がある

 →Unicode Escapeしましょう(\u672c\u65e5 こんな感じ)


Application Cache

 ⇒HTML/CSS/JavaScriptをローカルにキャッシュする仕組み

 ⇒オフラインで動く

 ⇒超強力なキャッシュ機構として有力?!

今回、秘宝探偵プロジェクトでは使用しませんでした。

  • manifestを消す方法がiOSでは確立されてないようである

講演者「もし、可能な方法が有る様であればブログに書いて頂けると大変助かります」


AjaxとWebStorageにより、

アプリの実行中の動作速度は向上しました。

が…

アプリの起動が遅い

「アプリの起動が遅い!」


アプリの初回起動が遅い→なぜか

 ⇒オープニング画像や初期データがない

 ⇒サーバーからのリソース読み込み時間が問題(30s〜50s)

オープニング画像はアプリにいれてしまえ!

ネイティブアプリ内にImage,BGM,SEを組み込んでいる。JavaScriptを介してNativeからBase64のデータで取得

f:id:nakamura001:20120322143002j:image


〜動作を早く〜
  • WebStorageをキャッシュ機構として活用

⇒動作速度向上

  • アプリ内に画像リソースを予めアプリに組み込む

⇒起動速度向上


アニメーションの手法

1) フルレンダリングによるアニメーション

a) DOMオブジェクトをフレーム単位で描画

b) Canvas内をフレーム単位で描画

2) CSSアニメーション

CSS3により用意された Transitions, Animations機能 & GPUアクセラレーションの恩恵も受けられる

秘宝探偵ではCSSアニメーションを活用してます!


秘宝探偵ではアニメーション全般をJavaScriptで制御

サイト全般で使用する共通コードとして、座標変換/回転/拡大縮小を行うメソッドを準備

例)

function setMotion(o, left, top, rotate, scale, duration, delay, timing) {
  o.style.webkitTransformProperty = "all";
  o.style.webkitTransformDuration = duration + "s";
  o.style.webkitTransformDelay = delay + "s";
  o.style.webkitTransformTimingFunction = timing;
  o.style.webkitTransform = "translate3d(" + left + "px," + top + "px, 0) rotate(" + rotate + "deg) scale(" + scale + ")";
}

Tips
  • Transformプロパティ

iPhoneAndroidのタブレット端末で画面がちらつく事象が発生、座標の指定は translate3d を使用しています。

translate だとちらつくので translate3d に書き換え

-webkit-transform: translate(50px, 50px);

    ↓

-webkit-transform: translate3d(50px, 50px, 0px);

〜見た目の演出〜 補足
  • 角丸、半透明、グラデーションはCSS
  • 画像サイズは極力小さく
  • 画像をさらに圧縮 → ImageOptim

ImageOptim ? all image compression tools in one Mac app

http://imageoptim.com/

講演者「うちでは別のツールを使っています」

  • 画像は基本jpeg、部分的に(透過が必要な部分。角丸の部分のみなど)png画像を組み合わせ

異なる解像度への対応
  • iPhone/Android/タブレットではそれぞれ解像度が異なる
    • スタイルのプロパティ指定はできる限り%指定

講演者の方「自分は%指定はあまり好きでは無いが%で指定が鉄板」

    • 代替案として機種ごとにスタイルを読み替える

CSSアニメーション Transform scale(拡大縮小)の挙動について
  • Android端末はscale変換させると初期値に戻るという現象 bug?
  • 例) 拡大アニメーションを行った場合、アニメーションが完了した瞬間に最初のサイズに戻る
  • 対処方法:予め拡大後のサイズの画像も準備し、非表示にしておく。アニメーション完了時にそちらの画像と差し替え
QA
  • 圧縮ツールにImageOptimを使っていなとの事ですが何を使われているのでしょうか?

→ちょっと、ど忘れしちゃいました。

※後で「OPTPiX」と教えて頂きました。

  • アプリからデータを渡すとPCのブラウザ上でデバッグが難しくなると思いますがどの様にされているのでしょうか?

デバッグ時にはサーバのデータを読む様に切り替えている。ブラウザ上でBGMは鳴らしていない。

関連情報

Webアプリの高速化についてはこちらなども参考になります。

HTML5 のオフライン機能 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20111103/1320327036

2012年03月21日

ブラウザ上でIKを使った編集が可能な3DCGアプリ

「Fabric Engine」というエンジンで作成されたみたいです。

Character Animation Tool from Fabric Engine on Vimeo.

Developers | Fabric Engine

http://fabric-engine.com/developers/

2012年03月20日

[][][]3D空間を移動するUI

一般ユーザ向けの3D空間を移動するUIは究極的にはこんな感じにスライダーだけも良いのかも知れない。ボタンがゴチャゴチャしてると誰でも使えるUIには成らないと思うし… 隠し機能でマウスドラッグで周囲を見渡せる機能くらいは付けても良いかな?

D

Unityによる実動サンプルはこちら

[][]Unity 3.5で追加された新機能がふんだんに使われたフリーの3Dデータ「Medieval Village」

f:id:nakamura001:20120320224240p:image

この様な説明文が書かれていました。

Medieval Village is a complete environment project built on the Unity 3.5 platform. It uses the NEW LOD system, Beast Lightmapping, Prefabs, Interactive Cloth, and many other Unity/Pro features. Allegorithmic's Free Substance Pack was used for principle texturing.

Unity 3.5で追加された新機能が一通り使われている印象です。しかし、容量が111MBも有るみたいなので、その点にはご注意下さい。

Medieval Village by GearTech Games -- Unity Asset Store

http://u3d.as/content/gear-tech-games/medieval-village/2KB

[][]RigidBodyにAddForce()を行った場合のForceModeによる動作の違い

f:id:nakamura001:20120320151611p:image

rigidbody.AddForce() で使用出来るフォースのタイプは以下。

意味
Forceその質量を使用して、rigidbodyへの継続的な力を追加します。
Accelerationその質量を無視して、rigidbodyへの継続的な加速を追加します。
Impulseその質量を使用して、rigidbodyに瞬時に速度変化を追加します。
VelocityChangeその質量を無視して、rigidbodyに瞬時に速度変化を追加します。

主なプログラムはこちら。

	var dir: Vector3 = Vector3.right;
	if (GUILayout.Button("Force")) {
		bigCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Force);
		smallCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Force);
	}
	if (GUILayout.Button("Acceleration")) {
		bigCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Acceleration);
		smallCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Acceleration);
	}
	if (GUILayout.Button("Impulse")) {
		bigCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.Impulse);
		smallCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.Impulse);
	}
	if (GUILayout.Button("VelocityChange")) {
		bigCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.VelocityChange);
		smallCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.VelocityChange);
	}

瞬発的に力が加わるImpulseやVelocityChangeに比べ、ForceやAccelerationはより大きな力で連続的に力を加えないとオブジェクトが動かない。

実際に動作させた動画はこちら大きいCubeのmassは3、小さいCubeのmassは1に設定。

D

プログラム全体はこちら。

#pragma strict

var bigCube: GameObject;
var bigCubeStartPos: Vector3;
var bigCubeStartRot: Quaternion;
var smallCube: GameObject;
var smallCubeStartPos: Vector3;
var smallCubeStartRot: Quaternion;

function Start () {
	bigCubeStartPos = bigCube.transform.position;
	smallCubeStartPos = smallCube.transform.position;
	bigCubeStartRot = bigCube.transform.rotation;
	smallCubeStartRot = smallCube.transform.rotation;
	bigCube.rigidbody.Sleep();
	smallCube.rigidbody.Sleep();
}

function OnGUI () {
	if (GUILayout.Button("Reset")) {
		bigCube.rigidbody.Sleep();
		smallCube.rigidbody.Sleep();
		bigCube.transform.position = bigCubeStartPos;
		smallCube.transform.position = smallCubeStartPos;
		bigCube.transform.rotation = bigCubeStartRot;
		smallCube.transform.rotation = smallCubeStartRot;
	}
	
	var dir: Vector3 = Vector3.right;
	if (GUILayout.Button("Force")) {
		bigCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Force);
		smallCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Force);
	}
	if (GUILayout.Button("Acceleration")) {
		bigCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Acceleration);
		smallCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Acceleration);
	}
	if (GUILayout.Button("Impulse")) {
		bigCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.Impulse);
		smallCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.Impulse);
	}
	if (GUILayout.Button("VelocityChange")) {
		bigCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.VelocityChange);
		smallCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.VelocityChange);
	}
}

[][]音声ファイルを元にフェイシャル&リップシンクが可能なエディタ拡張「Speecher」が凄い

f:id:nakamura001:20120320141903p:image

こちらで動作している動画が公開されています。

Video

http://achest.pro/index.php/2012-03-15-19-15-06/mspeecher/video

このクオリティが$250で販売されているとは素晴らしい!! 是非、日本で同じ様なものを作ってるメーカーさんにも$250くらいで販売して欲しい所。

Asset StoreのURLはこちらになります。

Speecher 1.0 by ACHEST Software & Design -- Unity Asset Store

http://u3d.as/content/achest-software-design/speecher-1-0/2Lm

2012年03月19日

[][]Unityのエディタ拡張についての良記事「How to Add Your Own Tools to Unity’s Editor」

How to Add Your Own Tools to Unity’s Editor | Activetuts+

http://active.tutsplus.com/tutorials/workflow/how-to-add-your-own-tools-to-unitys-editor/

Unity 3.5で動作しない部分

ここに記載されている通りに試した所、Unity 3.5だと GridUpdate(SceneView sceneview) の以下の EditorUtility を使っている部分でWarningが発生して上手く動作しませんでした。

        GameObject obj;
        Object prefab = EditorUtility.GetPrefabParent(Selection.activeObject);
 
        if (prefab)
        {
            obj = (GameObject)EditorUtility.InstantiatePrefab(prefab);
            obj.transform.position = new Vector3(0.0f, 0.0f, 0.0f);
        }

こちらは以下の様に PrefabUtility に置き換えると正しく動作しました。

	        Object prefab = PrefabUtility.GetPrefabParent(Selection.activeObject);
	        if (prefab)
	        {
	            obj = (GameObject)PrefabUtility.InstantiatePrefab(prefab);
	            obj.transform.position = new Vector3(0.0f, 0.0f, 0.0f);
	        }

マウスカーソルの座標

マウスカーソルの座標はこの様なプログラムで取得可能。Y座標は下方向がプラス。

	void GridUpdate(SceneView sceneview)
	{
		Event e = Event.current;
		Debug.Log (string.Format("{0:F}, {1:F}", e.mousePosition.x, e.mousePosition.y));
	}

関連情報

Unityのエディタ拡張について丁寧に解説されているスライド「Extending the Unity Editor」 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120210/1328884599

2012年03月18日

[]iOS 5.1ではMMSで絵文字が使えないみたい

ソフトバンク、iOS5.1の絵文字問題について「MMSではご利用いただけません」とこっそり公式発表していた : iPhoneちゃんねる

http://iphonech.com/archives/53556761.html

2012年03月17日

[]「Python Developers Festa 2012.03」に参加して来ました。

Python Developers Festa 2012.03」に参加して来ました。

Python Developers Festa 2012.03 on Zusaar

http://www.zusaar.com/event/158001

今回も自分が日頃の業務で使わない様なジャンルでの最新事情などを知ることが出来て良かったです。

印象に残った話、技術などについてメモしておきます。

バナナ

\U0001F34C

バナナの絵文字の文字コード。MacのLionだとターミナル上でもちゃんと絵文字として表示される。

例題として使うとエロいと言われてしまう。

Python 3について

出来るなら今すぐ移行。難しい場合でも2.7に対応しておけば3への移行は楽。

GitのWebクライアント

GitのWebクライアントは既に沢山リリースされているみたい。Gitに標準で付属している「GitWeb」。Python製の「RhodeCode」辺りが気になった。

しかし、その後の「KoshiNuke」の紹介では度々、どよめきが発生。自分もこれは便利そうと思った。時間を見つけて試してみたい。

MOONGIFTで紹介されたとの事。

昨年のPyFesでのスライド。

社内向けgit Webフロント koshinukeについて

http://slides.nirvake.org/pyfes2011/

GitHubのダッシュボードのページを便利に拡張されるChrome拡張「Octoboard」。IssuesやDiffがダッシュボード上で確認出来るようになる。現在はGitHubがHTMLの構造を変更した為、ちゃんと動作しないらしい。近々、修正版がリリースされるとの事。

BP本出ます

BP(BeProud)本、「Python プロフェッショナル プログラミング」がこれから発売されるらしい。

ZooKeeper

ZooKeeperはゲームじゃないのも有る。ググるのは大変そう。

ZooKeeper: 面倒な分散システムのコーディネートを支援するサービス

http://oss.infoscience.co.jp/hadoop/zookeeper/docs/r3.3.1/

電子書籍の話

紙の本であれば遙か昔のものでも読む事が出来る。

ノモンハン事件。宮崎繁三郎が占領を示した石碑を残していため後の交渉に役立った。

宮崎繁三郎 - Wikipedia

http://ja.wikipedia.org/wiki/%E5%AE%AE%E5%B4%8E%E7%B9%81%E4%B8%89%E9%83%8E

[][]Boo言語でUnityプログラム

f:id:nakamura001:20120317215614p:image

Unityで使える言語の紹介で存在が忘れられていたり、使ってる人居るの?と言われ可哀想な状態になってるBooの事について書いておこうと思います。Pyfesに来てる事ですし…

BooはPythonの方言。Python+.NET(正確に言うとMono)な感じです。この辺はUnityのJavaScript(UnityScript)がJavaScript+.NETな感じと同じです。

UnityのAPIリファレンスにもちゃんと使用例付きで情報が有ります(マニアックな機能だと無い様な時も有りますが…)。

Booについての日本語の資料はこちらのスライドとかが良いですがこちらだとPythonやUntiyの他の言語について既に知ってる人以外には結構、難易度が高いと思います。ざっと読んでみて難しいかな?と感じたら慣れてきてからまた読みなおした方が良いかもしれません。

北海道のゲーム制作コミュニティ「Kawaz」でもBooについての記事が書かれました。

Kawaz - UnityでBooを使ってシューティングを作ろう:その1

http://www.kawaz.org/blogs/giginet/2012/03/15/266/

こちらを参考に自分でもちょっと作ってみました。こちらで試せます。キーボードの上下で自機の移動、左のCtrlキーで弾を発射します。

自機の動作処理を行なっているプログラムはこんな感じ。

import UnityEngine

class MyCharaController (MonoBehaviour): 
	public bulletPrefab as GameObject
	public bulletSpeed as single = 40.0f
	FiriingMouth as GameObject

	def Start ():
		FiriingMouth = GameObject.Find("FiriingMouth")
	
	def Update ():
		transform.position.y += Input.GetAxisRaw("Vertical") * Time.deltaTime * 3.0f
		if (transform.position.y > 5.0f):
			transform.position.y = 5.0f
		if (transform.position.y < -5.0f):
			transform.position.y = -5.0f
		if Input.GetButtonDown("Fire1"):
			bullet as GameObject = Instantiate(bulletPrefab, 
				FiriingMouth.transform.position, FiriingMouth.transform.rotation)
			velocity as Vector3 = Vector3.right * bulletSpeed
			bullet.rigidbody.velocity = velocity

こちらソースコードを置いておきます。ご自由にご活用下さい。

2012年03月16日

[][]「Unity Asia Bootcamp Tour」のチケット販売が開始

f:id:nakamura001:20120317020403p:image

以前はまだ出来ていなかった東京会場向けのページも出来、「Unity Asia Bootcamp Tour(Unity アジア・ブートキャンプ・ツアー)」のチケット販売が開始しました。

「Unity Asia Bootcamp Tour」はUnityの中の人からUnityについて教えて貰えるセミナーです。料金は2日で12,600円。

Unity - Asia Bootcamp Tour:東京

http://unity3d.co.jp/asiabootcamp/

2012年03月15日

[][]UnityのAsset Storeのセール情報のまとめサイト「ASSET STORE MADNESS」

f:id:nakamura001:20120315225405p:image

ASSET STORE MADNESS

http://www.assetstoremadness.com/

[]GDC2012で発表されたPlayStation Suite SDKのロードマップなどが書かれたスライドが公開

Developer Program for PlayStation®Suite

http://www.playstation.com/pss/developer/

ロードマップ以外にもどんなAPIが使えるかや簡単な使用例が書かれていました。開発環境のスクリーンショットなども有りました。

簡単に気になった所を書いておきます。

対応しているデータフォーマット

  • 3Dモデルのデータ:COLLADA,FBX,XSI,X
  • Texture:PNG,JPEG,GIF,BMP(標準ではDXT,PVRTCは非対応)
  • Audio(SFX):WAV(標準ではPCMのみ対応)
  • Audio(BGM):MP3

Game Engine2D

UI Toolkit / UI Composer

  • Widgetライブラリ、UIレイアウトツール
    • 簡単に使える
    • UIのスタイルのベースはPS Vitaのもの
  • ソースコードが提供される

ハイレベルAPI

  • 物理
    • 2Dベースの物理ライブラリ

ソースコードの例

  • グラフィック関連の初期化とレンダリング
  • オーディオ
  • ゲームパッドの入力
  • タッチ入力
  • モーション
  • 画像のロード
  • フォントのロードとレンダリング
  • GameEngine2Dの使用例
  • 3Dモデルのロードとレンダリング
  • UI

2012年03月14日

[]Walker.csのJavaScript

RagePixelに付属しているデモで使用している Walker.cs のJavaScript版。これを参考にすれば他のRagePixelのAPIについてもJavaScriptで使えるかと思います。

全ファイルJavaScriptに移植するのは面倒臭いのでベースとなる部分についてはC#のものをそのまま使います。

この様にJavaScriptC#を連携する場合はそのままだと上手くいかないので専用のフォルダに移動させます。今回は Standard Assets フォルダを使います。

Unity Script Reference – Overview: Script compilation (Advanced)

http://unity3d.com/support/documentation/ScriptReference/index.Script_compilation_28Advanced29.html

まずは Code のフォルダをルートの位置に移動させる為、何も無い所にドラッグします。

f:id:nakamura001:20120315042522p:image

するとこの様な並びになります。

f:id:nakamura001:20120315042541p:image

次に Code フォルダを Standard Assets にリネームします。

f:id:nakamura001:20120315042556p:image

これでRagePixelのAPIJavaScriptから呼べる様になりました。

Walker.cs の代わりのJavaScriptはこの様な記述となります。これでC#版と同様な処理が可能です。

#pragma strict
#pragma downcast

private var ragePixel: IRagePixel;

enum WalkingState {Standing=0, WalkRight, WalkLeft};
var state: WalkingState = WalkingState.Standing;
public var arrowLeft: RagePixelSprite;
public var arrowRight: RagePixelSprite;

public var walkingSpeed: float = 10f;

function Start () {
	ragePixel = GetComponent("RagePixelSprite");
}

function Update () {
    //Check the keyboard state and set the character state accordingly
    if (Input.GetKey(KeyCode.LeftArrow))
    {
        state = WalkingState.WalkLeft;
    }
    else if (Input.GetKey(KeyCode.RightArrow))
    {
        state = WalkingState.WalkRight;
    }
    else
    {
        state = WalkingState.Standing;
    }

    var moveDirection: Vector3 = new Vector3();
    
    switch (state)
    {
        case(WalkingState.Standing):
            //Reset the horizontal flip for clarity
            ragePixel.SetHorizontalFlip(false);
            ragePixel.PlayNamedAnimation("STAY", false);
            if (arrowLeft != null) arrowLeft.SetTintColor(Color.gray);
            if (arrowRight != null) arrowRight.SetTintColor(Color.gray);
            break;

        case (WalkingState.WalkLeft):
            //Flip horizontally. Our animation is drawn to walk right.
            ragePixel.SetHorizontalFlip(true);
            //PlayAnimation with forceRestart=false. If the WALK animation is already running, doesn't do anything. Otherwise restarts.
            ragePixel.PlayNamedAnimation("WALK", false);
            //Move direction. X grows right so left is -1.
            moveDirection = new Vector3(-1f, 0f, 0f);
            if (arrowLeft != null) arrowLeft.SetTintColor(Color.white);
            if (arrowRight != null) arrowRight.SetTintColor(Color.gray);
            break;

        case (WalkingState.WalkRight):
            //Not flipping horizontally. Our animation is drawn to walk right.
            ragePixel.SetHorizontalFlip(false);
            //PlayAnimation with forceRestart=false. If the WALK animation is already running, doesn't do anything. Otherwise restarts.
            ragePixel.PlayNamedAnimation("WALK", false);
            //Move direction. X grows right so left is +1.
            moveDirection = new Vector3(1f, 0f, 0f);
            if (arrowLeft != null) arrowLeft.SetTintColor(Color.gray);
            if (arrowRight != null) arrowRight.SetTintColor(Color.white);
            break;
    }

    //Move the sprite into moveDirection at walkingSpeed pixels/sec
    transform.Translate(moveDirection * Time.deltaTime * walkingSpeed);
}

関連情報

Unity3D: JavaScript -> C# or C# -> JavaScript access | 41 Post

http://www.41post.com/1935/programming/unity3d-js-cs-or-cs-js-access

[]キー入力に対応したキャラクターアニメーションの切り替え

RagePixelでキー入力に対応したキャラクターアニメーションの切り替えをする手順を解説します。

RagePixelをインポート

まずは、Asset StoreからRagePixelをインポートします。

この時、 RagePixel/Demo フォルダはチェックを外した後に Walker.cs にだけチェックを付けてImportします。

f:id:nakamura001:20120315005237p:image:w500

キャラクターのスプライトの作成

次にメニューから GameObject → Create Other → RagePixel Sprite と選択し、スプライトを追加します。

New Sprite をダブルクリックして以下の様に「正面を向いた時のアニメーション2フレーム」「右を向いた時のアニメーション2フレーム」の計4フレームの画像を作ります。

どんな絵でも良いですが自分はこんな4枚を描きました。

f:id:nakamura001:20120315005452p:image

f:id:nakamura001:20120315005501p:image

f:id:nakamura001:20120315005509p:image

f:id:nakamura001:20120315005517p:image

矢印のスプライトの作成

メニューから GameObject → Create Other → RagePixel Sprite で新しいスプライトを作成し、名前を New Sprite から Arrow_left に変更します。

次にInspectorで「NEW」ボタンを押し、

f:id:nakamura001:20120315012906p:image

新たに作成した枠を選択します。

f:id:nakamura001:20120315012920p:image

Arrow_left をダブルクリックし、左向きの矢印を描きます。

f:id:nakamura001:20120315013058p:image

キャラクターの画像と重なって描きづらい場合にはカーソルアイコンに切り替えて、この四角の部分をドラッグして描きやすい位置に移動させて下さい。

f:id:nakamura001:20120315013439p:image

同様にもう一つスプライトを作成し、名前を Arrow_right に変更します。

Inspectorで「NEW」ボタンを押す→新たに作成した枠を選択→ Arrow_right をダブルクリックし、右向きの矢印を描きます。

次に New Sprite とこの様な親子関係に設定し、

f:id:nakamura001:20120315013520p:image

この様な位置にそれぞれの矢印を移動させます。

f:id:nakamura001:20120315013552p:image

ピクセルサイズの変更

このままだと小さくて良く見えないのでピクセルのサイズを変更します。 Main Camera のInspectorの Pixel Size の値を 6 に変更した後に「Apply」ボタンを押します。

f:id:nakamura001:20120315005840p:image

アニメーションの設定

次にアニメーションの設定を行います。

New Sprite のInspectorで「EDIT」ボタンを押します。

f:id:nakamura001:20120315005948p:image

「Add」ボタンを押してアニメーションを追加します。

まずは正面を向いている時のアニメーションを作ります。名前を「STAY」、使用するフレームを 0〜1 、アニメーションのタイプは「Loop」で作成します。

以下の様に設定して下さい。

f:id:nakamura001:20120315010033p:image

もう一度、「Add」ボタンを押して下さい。

今度は右を向いて移動しているアニメーションを作ります。

名前を「WALK」、使用するフレームを 2〜3 、アニメーションのタイプは「Loop」で作成します。

実際に設定したものはこちらになります。

f:id:nakamura001:20120315010340p:image

キー入力に反応してアニメーションを切り替え

キー入力に反応してアニメーションを切り替える処理を設定します。

Demo フォルダにある Walker というC#のファイルを New Sprite にドラッグします。

f:id:nakamura001:20120315010609p:image

これで完成です。ゲームを実行して、キーボードのカーソルで左右キーを入力して移動させてみて下さい。

キー入力をしていない時は「STAY」のアニメーション、移動中は「WALK」のアニメーションが再生されているのが分かるかと思います。

プログラムの解説

プログラムの主な処理について解説します。

	void Start () {
        ragePixel = GetComponent<RagePixelSprite>();
	}

Start() でスプライトの処理を行なっているクラスのインスタンスを生成。


        if (Input.GetKey(KeyCode.LeftArrow))
        {
            state = WalkingState.WalkLeft;
        }
        else if (Input.GetKey(KeyCode.RightArrow))
        {
            state = WalkingState.WalkRight;
        }
        else
        {
            state = WalkingState.Standing;
        }

キー入力に対応してキャラクターの現在の状態情報を変更。


            case(WalkingState.Standing):
                //Reset the horizontal flip for clarity
                ragePixel.SetHorizontalFlip(false);

立ち止まってる時の処理。 ragePixel.SetHorizontalFlip(false) で画像の水平方向の反転は行わない事を指定。

                ragePixel.PlayNamedAnimation("STAY", false);

「STAY」のアニメーションを再生。 false が指定してあるので既に再生中の場合は何もしない。


                if (arrowLeft != null) arrowLeft.SetTintColor(Color.gray);
                if (arrowRight != null) arrowRight.SetTintColor(Color.gray);
                break;

arrowLeft.SetTintColor() では矢印の画像と灰色の合成を行なっています。その場にとどまっている時は左右、いずれの矢印も灰色を合成し、明るさを下げます。


            case (WalkingState.WalkLeft):
                //Flip horizontally. Our animation is drawn to walk right.
                ragePixel.SetHorizontalFlip(true);

左向きに移動している時は画像を水平方向に反転させます(元のWALKのアニメーションの画像が右向きの画像の為)。


                ragePixel.PlayNamedAnimation("WALK", false);
                //Move direction. X grows right so left is -1.
                moveDirection = new Vector3(-1f, 0f, 0f);

「WALK」のアニメーションを再生。 false が指定してあるので既に再生中の場合は何もしない。実際の位置も移動させる。


                if (arrowLeft != null) arrowLeft.SetTintColor(Color.white);
                if (arrowRight != null) arrowRight.SetTintColor(Color.gray);

左向きの矢印は通常表示、右向きの矢印は明るさを抑えた色で表示。

右側への移動については説明するまでも無いと思うので、省略

なお、今回使用した左右反転して右向きのアニメーションを流用するというテクニックはキャラクターの左右のデザインが異なる場合には使えません。その様な場合は素直に左側のアニメーションも準備しましょう。

関連情報

RagePixelで使用可能なメソッド - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120312/1331552545

[][]現在の規約ではUnity Pro+iOS Basic/Android Basicの組み合わせが可能

※ここで Basic と言っているものはPro版で無いバージョンの方を示しています。

※ここで Unity Free とはPro版で無い無料のバージョンの方を示しています。

どこかのタイミングで規約が変わったみたいで「Android BasicおよびiOS BasicについてはUnity Freeとの組み合わせでないといけない」という制限は無くなったとの事です(今まではUnity Pro+iOS Basic/Android Basicの組み合わせは出来なかった)。

Unity Pro+iOS Basic/Android Basicならどんな企業でもOK。Unity Free+iOS Basic/Android Basicだと前年度収益の制限についてクリアしている企業であれば使用可能。

詳しくはFacebookの「Unityユーザー助け合い所」に参加してこちらのページを確認下さい。

(2013/02/23 追記)

この規約は Unity 3.x までで、 Unity 4.x では前年度収益の制限についてクリアしている企業で無ければ Unity Pro+iOS Basic/Android Basic の組み合わせは出来なくなったみたいです。詳しくは上記のFacebookページを参考下さい。

(追記ここまで)

2012年03月13日

[]RagePixelでキャラクターのアニメーションを再生

RagePixelでキャラクターのアニメーションを再生する手順を解説します。

RagePixelをインポート

まずは、Asset StoreからRagePixelをインポートします。

この時、 RagePixel/Demo フォルダはチェックを外してImportします。既にImportしてしまった場合はProjectビューからDemoフォルダを削除して下さい。

f:id:nakamura001:20120313102423p:image

スプライトの作成

次にメニューから GameObject → Create Other → RagePixel Sprite と選択し、スプライトを追加します。

すると以下の様なダイアログが表示されます。

f:id:nakamura001:20120313102818p:image

「Create」ボタンを押して下さい。するとスプライトに使用するSpriteSheet(スプライトに使用するアニメーション画像の全フレームが格納されている画像ファイル)が作成されます。

※たまに表示されない場合が有ります。その場合には New Sprite をダブルクリックするかUnityを再起動した後に New Sprite を選択して下さい。

この処理で RagePixelAssets フォルダが作成され、中に以下のファイルが作成されます。

  • spritesheet_1.asset
  • spritesheet_1.mat
  • spritesheet_1.png

続いて以下のダイアログが表示されます。

f:id:nakamura001:20120313102956p:image

これはカメラの設定です。「Do It」ボタンを押して下さい。

この処理で Main Camera に Rage Pixel Camera (Script) が追加され、カメラが2Dキャラ表示に最適化されます。

Gameビューの表示設定を「Standalone (1024x768)」に切り替えます。

f:id:nakamura001:20120313235335p:image

スプライトのサイズ変更

RagePixelAssets フォルダ内の一番下の白い書類アイコンのファイルを選択。

f:id:nakamura001:20120313103540p:image

Element 0 のピクセル指定部分を全て 32 に変更します。これはデフォルトのサイズで有る 16 だと小さすぎてよく見えないので変更しているだけです。 16 でも問題無い場合は変更する必要は有りません。

f:id:nakamura001:20120313103832p:image

次にHierarchyビューの New Sprite を選択。

f:id:nakamura001:20120313103953p:image

Inspectorビューの「NEW」ボタンを押します。

f:id:nakamura001:20120313104131p:image

※この処理を入れないとちゃんと 32x32 として認識してない不具合が発生しました。

新しく追加された枠が選択された状態になっているので先頭の枠をクリックし、選択を切り替えます。

f:id:nakamura001:20120313104216p:image

ドット絵を作成

次にHierarchyビューの New Sprite をダブルクリック。

塗りつぶし(バケツ)アイコンを選択。色選択アイコンをクリックして白色を選択。

f:id:nakamura001:20120313104649p:image

アニメーションアイコンを選択し、「NEW」ボタンを2回押してフレームを3つにします。

f:id:nakamura001:20120313105339p:image

※フレームとはアニメーションで使うパラパラマンガ部分の1枚を表す用語です。今回は3つ使うのは3フレームのアニメとなります。

次に選択しているを青色に変更して下さい。なお、白色選択(左上の位置を選択)している状態だと色選択のバーの変更が出来ません。一度、左上以外の位置に移動した後に青色を選択して下さい。

f:id:nakamura001:20120313110038p:image

ペンアイコンを選択し、ペンの太さ「中」を選択(分りづらいですが赤枠で囲んだ所でペンの太さを変更出来ます)。青色でそれぞれのフレームに1、2、3と書いて下さい。

f:id:nakamura001:20120313105604p:image

アニメーションの設定

New Sprite を選択した状態でInspectorの「EDIT」ボタンを押します。

f:id:nakamura001:20120313110251p:image

するとこの様なビューが表示されます。ここでアニメーションの編集が出来ます。

f:id:nakamura001:20120313110519p:image

「Add」ボタンを押してアニメーションを追加します。

f:id:nakamura001:20120313110742p:image

Name に TEST_ANIMATION と入力します。

f:id:nakamura001:20120313110855p:image

Frame Time ではそのフレームが表示されている時間を設定出来ます。今回はアニメーションの動作が分かりやすい様にちょっと長めに変更します。1、2、3の画像を順番に選択し、全ての Frame Time の値を 1000 に変更して下さい。

f:id:nakamura001:20120313111228p:image

これでアニメーションの作成は完了です。次は実際にアニメーションを再生してみましょう。

アニメーションの再生

今回はボタンを押したらアニメーションを再生するプログラムを作ります。

C#のファイルを作成し、ファイル名を StartAnimation として下さい。

プログラムはこの様に記述します。

using UnityEngine;
using System.Collections;

public class StartAnimation : MonoBehaviour {
	
	private IRagePixel ragePixel;

	// Use this for initialization
	void Start () {
        ragePixel = GetComponent<RagePixelSprite>();
	}
	
	void OnGUI () {
		if(GUILayout.Button ("Test")) {
        	ragePixel.PlayNamedAnimation("TEST_ANIMATION", false);
		}
	}
}

StartAnimation を Main Camera にドラッグした後、ゲームを実行して下さい。

画面左上に「Test」ボタンが表示されるので押すとアニメーションが再生されます。

動作を確認出来たら他のアニメーションパターンについても確認しておきましょう。アニメーション編集のビューを表示し、Typeの部分を他のものに切り替えてからアニメーションを再生してみて下さい。

f:id:nakamura001:20120313112038p:image

Typeによる再生パターンは以下の様になっています。

Type再生パターン
Play Once1回だけ再生。1→2→3と再生される
Play Once Reverse1回だけ逆再生。3→2→1と再生される
Loop繰り返し再生。1→2→3と繰り返し再生される
Loop Reverse繰り返し逆再生。3→2→1と繰り返し再生される
Ping Pong再生、逆再生の順番で繰り返し再生。1→2→3→2→1→2…と繰り返し再生させれる

キャラクターアニメーションについては以上となります。画像をキャラクターに変えたり、表示時間の調整などをして気持ちの良い動きをするキャラクターアニメーションを作ってみて下さい。

次回はキー入力に対応したキャラクターアニメーションの切り替えについて解説する予定です。

[][]Xcode 4.3.1でUnityから出力したプロジェクトをビルドするとビルドに失敗するみたい

UnityのiOS版はiOS Pro版じゃないと起動時に表示されるスプラッシュ画像の変更がライセンス的に出来ません。それに関連してXcodeのバージョン4.3.1だと不具合が発生するみたいです。

UnityのiOS Proじゃない人はXcode4.3.1へのアップデートはやめよう | リンゴにかじられたブログ

http://applebite.me/archives/297

[][]Siriの読み上げ機能で色々と遊んでる人達が登場

日本語版Siriに歌わせてみた動画『ハローSiriたん』がすげぇ! - アップス!!!-iPhoneの小技やiOS系ニュースを配信

http://www.appps.jp/archives/1906462.html

きゃりーぱみゅぱみゅ」を認識して貰うのは難易度が高いみたいですw

ついにSiriさんに"きゃりーぱみゅぱみゅ"と言わせる事に成功しました! #sirinipamyu | iPhone | Yu_notes.

http://www.flavour47.com/iphone/siri_kyarypamyupamyu

ちなみに、Siriに希望する言葉を読み上げ貰うにはメールやメッセージの読み上げ機能を使うのが便利です。メールの場合には未読メールの数が多いと読み上げてくれないのでそういう人はメッセージの方を使いましょう。

メッセージでやる場合の手順はこんな感じ。

メッセージアプリに 〜@softbank.ne.jp (※auの人はauのアドレス)のアドレスを設定してない場合は設定

   ↓

PCなどから読み上げさせたい内容を書いたメールを 〜@softbank.ne.jp 宛に送る

   ↓

ホーム画面などでメッセージアプリでメッセージが受信されたの確認

   ↓

Siriを起動して「メッセージを読み上げ」

これでメールで送った内容を読み上げくれます。

2012年03月12日

[][]4/12,13に東京で「Unity Asia Bootcamp Tour」が開催

4月の12、13日にUnityのR&Dチームが1ダース(12個)以上の開発トピックを含むセッションを行うみたいです。これは楽しみ!!

Unity - Asia Bootcamp Tour

http://unity3d.com/asiabootcamp/

(2012/03/15 追記)

チケット売買、開始しました。

「Unity Asia Bootcamp Tour」のチケット販売が開始 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120316/1331917375

[][]Asset Storeからダウンロードしたファイル(.unitypackage)の保存場所

Asset StoreからDLしたファイルが保存されているパスは以下となります。ここに有るファイルを使う事でインターネットに接続されていない場合でも(既にダウンロード済みで有れば)ライブラリをImportする事が可能です。

【Mac】

~/Library/Unity/Asset Store

(2013/02/26 追記)

「わかりにくい」とのコメントを頂いたので追記。

Finderを開き、キーボードで Shift+Command+G (3つのキーを同時押し)を入力すると表示されるウィンドウに上記のパスを入力すると対象のフォルダが表示されます。

(追記ここまで)


【Windows】

C:\Users\%USERNAME%\AppData\Roaming\Unity\Asset Store\

Unity - Asset Store

http://unity3d.com/support/documentation/Manual/Asset%20Store.html

関連情報

デフォルトでインストールされているデモ(サンプル)ゲームのファイルの保存場所 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20110730/1312024258

[][]WindowsでMonoDevelopを使っていた時に遭遇した文字コード問題

WindowsでMonoDevelopを使っていた時に原因不明のバグに遭遇しました。

短いコードだし、何度見直しもおかしな箇所は見当たらないのですが if else の else 部分がおかしいとエラーが出ていました。

日本語のコメントも入れていたのでもしやと思い、文字コードを確認した所、UTF-8N(BOM無しのUTF-8)。

「むむっ、これは怪しい」とUTF-8に切り替えて保存した所、無事にエラーが消えました。

[]RagePixelで使用可能なメソッド

メソッド名動作
SetSprite指定のスプライトシートを設定
PlayAnimation指定したループモードでアニメーションを再生。既に再生中でforceRestartがfalseに設定してある場合には2回目の実行は無視される(アニメーションが先頭のフレームに戻ることは無い)
PlayNamedAnimationサブアニメを実行。既に再生中でforceRestartがfalseに設定してある場合には2回目の実行は無視される(アニメーションが先頭のフレームに戻ることは無い)
isPlaying現在再生中?
StopAnimationアニメーションを停止
SetSizeスプライトのサイズを指定。このサイズを元にタイリング処理などが行われる
GetRectスプライトのサイズを取得
SetHorizontalFlip水平方向へ反転設定(trueの時、画像を反転させる)
SetVerticalFlip垂直方向へ反転設定(trueの時、画像を反転させる)
SetTintColorTintカラーの設定

2012年03月11日

[][]Siri関連の情報まとめ

取り敢えず、初めに「ヘルプ」って言うとヘルプが表示される事について覚えてると便利です。

「ヘルプ」と言うとこの様にどのアプリが対応しているかの一覧が表示されます。タップするとそのアプリでの具体的に使える命令のサンプルが確認出来ます。

f:id:nakamura001:20120311234103p:image

f:id:nakamura001:20120311234129p:image

色々と試してみました。


残念、出来ないみたいです。

f:id:nakamura001:20120311234233p:image:w300


Siriは画面がロックされている時にも使えますがロック解除は出来ないみたいです。

f:id:nakamura001:20120311234328p:image:w300


「○○○を再生」で再生させる事は可能ですがこの様な指示はダメみたいです。

f:id:nakamura001:20120311234422p:image:w300


「次の次の月曜日」などの指定が可能です。「おとといは何日?」と質問して日付を確認する事も可能です。「さきおととい」までは対応してませんでした。

f:id:nakamura001:20120311234544p:image:w300


「5分後に知らせて」と言った時。これは便利に使えそう。

f:id:nakamura001:20120311235759j:image:w300


アラームをONに出来るのはもちろんですがOFFにする事も可能です。

f:id:nakamura001:20120311234757p:image:w300


「ニューヨークへの行き方」を質問。日本ではマップアプリ関連の機能は使えないみたいです。

f:id:nakamura001:20120311235939j:image:w300


メールやメッセージアプリに送信されたメッセージなどの読み上げに対応してますがメールの数が多いときや最近届いたメッセージが無い場合は読み上げてくれません。メールは最新の数件で良いので読み上げて欲しい所!!

f:id:nakamura001:20120312001514p:image


こちらのサイトを参考に「人生の意味ってなんだろうね?」を質問。はぐらさかれた? ちなみに、「渋谷でラーメン〜」はその1つ前にした質問です。

f:id:nakamura001:20120312000951j:image:w300

Siriについて書かれた記事

ASCII.jp:日本語対応した「Siri」でオトナの限界に挑む!

http://ascii.jp/elem/000/000/676/676975/

日本語Siriさんとのすごい会話まとめ - NAVER まとめ

http://matome.naver.jp/odai/2133118459624180301

ここでSiriさんが話してくれる話で出てくるELIZAは多分、これから来てるのかな?

ELIZA - Wikipedia

http://ja.wikipedia.org/wiki/ELIZA

[iPhone] 日本語版Siriの秀逸な返しまとめ。 | Appleちゃんねる

http://applech.info/iphone-siri-replay1/

ユーモアあふれるSiriの受け答え・おもしろ回答&萌え会話集【英語版の日本語訳】 - NAVER まとめ

http://matome.naver.jp/odai/2131867448945760901

iOS5.1 Siri日本語対応!パスコードロックの設定に注意!

http://simplelife.pya.jp/archives/3994

[][]Unity 3.5の特徴を紹介した動画

Unity 3.5 Feature Overview - Unity Videos

http://video.unity3d.com/video/4677424/unity-35-feature-overview

Unityの公式動画にUnity 3.5の特徴を紹介した動画が公開されました(GDC向けに作った動画かな?)。紹介されている機能についての説明を書いておきます。

Light Probes

事前に指定の位置のライトの当たり具合を計算しておいて(※)、そのデータをリアルタイムな描画を行なっている時に反映させる手法。

※Light Probeというものをシーンに配置し、その地点でのライトの当たり具合を事前計算。

太陽光が直接当たっている場所から建物の影に入った時にちゃんと陰影具合がリアルに切り替わっているのが確認出来ます。

Creating a Light Probe

http://steradian.co.jp/adv3d/3dcg/HDRShop/CreateLightProbe.html

西川善司の3Dゲームファンのための「2009&2010」グラフィックス講座 -GAME Watch

http://game.watch.impress.co.jp/docs/series/3dcg/20091228_340280.html

Unity - Light Probes

http://unity3d.com/support/documentation/Manual/LightProbes.html

Level of Detail System

視点からの距離に応じ、近くの場合はポリゴンの多いモデル、遠くの場合にはポリゴンの数が少ないモデルに切り替えて描画コストを抑える手法。

Unity - Level of Detail (Pro Only)

http://unity3d.com/support/documentation/Manual/Level%20Of%20Detail.html

Nav Mesh AI

Nav Mesh(NavMesh)はキャラクターが進入可能なエリアをシーン上にMeshで指定する手法。

Unreal Engineのサイトでの解説Nav Mesh(Navigation Mesh)の解説。

UDN - Three - NavigationMeshReferenceJP

http://udn.epicgames.com/Three/NavigationMeshReferenceJP.html

Unity - Navmesh and Pathfinding (Pro only)

http://unity3d.com/support/documentation/Manual/Navmesh%20and%20Pathfinding.html

Occlusion Culling

Occlusion Culling(オクルージョンカリング)とは視界に入っていないオブジェクトを描画しないで描画コストを抑える手法。Occlusion Culling自体は既に搭載されていたのですが今回のバージョンでは一から書き直されたものが搭載されています。

あくまで視界に入ってないものを描画しないという手法で有る為、視界にさえ入っていればかなり遠くに有るオブジェクトでも描画処理が行われます。そのシーンではオブジェクトカリングでは無くLOD(Level of Detail)でコストを抑える必要が有ります。

オクルージョンカリング: 日報あくせくジェ〜ムズ

http://www.accessgames-blog.com/blog/2010/10/post-6c2e.html

Unity - Occlusion Culling (Pro only)

http://unity3d.com/support/documentation/Manual/Occlusion%20Culling.html

New Particle System

パーティクルシステムがShurikenと呼ばれる新しいものに変わりました。内蔵のカーブエディタでパーティクルの動作を簡単に編集出来ます。

Unity - Particle Systems

http://unity3d.com/support/documentation/Manual/Particle%20Systems.html

関連情報

けいごのなんとか ? Unity3.5のWhat's new の実装部分を訳した

http://anchan828.tumblr.com/post/17637687450/unity3-5-whats-new

[]ドットキャラの作成方法

まずは、Asset StoreからRagePixelをインポートします。

次にメニューから GameObject → Create Other → RagePixel Sprite と選択し、スプライトを追加します。

この時、Gizmo(Sceneビューの右上に有る3Dアイコン)で指定している向きが「Back」以外の場合にはこの様な警告が表示されます。

f:id:nakamura001:20120311185237p:image

ここのパーツを使って回転させるか、右クリックメニューから「Back」を選択する事で「Back」に変更して下さい。

f:id:nakamura001:20120311185714p:image

ツールの説明

f:id:nakamura001:20120311192915p:image

ペンアイコンを選択時に可能な操作
操作動作
マウスの左ボタン描画
マウスの左ボタン色の選択
Ctrl+Alt+ZUndo
1、2、3、[、]のキーブラシサイズの変更
色選択領域でCtrl+マウスの右ボタン透過色の選択

※Macの場合はCtrlの代わりにcommandキーを使用。

カラーピッカーのこの部分がアルファ値の選択になります。ここの設定を一番左に移動させると透過色を使えます。

f:id:nakamura001:20120311193209p:image

選択アイコンを選択時に可能な操作

操作動作
マウスの左ボタンでドラッグエリア範囲
選択済みの部分をマウスの左ボタンでドラッグ選択したエリアを移動
Ctrl+Alt+cクリップボードにコピー
Ctrl+Alt+x切り取り+クリップボードにコピー
Ctrl+Alt+v貼り付け
Ctrl+Alt+d選択範囲を複製

※Macの場合はCtrlの代わりにcommandキーを使用。

アニメーションアイコンを選択時に可能な操作

操作動作
マウスの左ボタン編集するフレームを選択
Ctrl+右キー次のフレームに移動
Ctrl+左キー前のフレームに移動

※Macの場合はCtrlの代わりにcommandキーを使用。

パレット

よく使う色などは直ぐに使える様にパレットに保存しておくと便利です。

操作動作
マウスの左ボタン色の選択
Ctrl+マウスの右ボタン色をパレットに追加
Ctrl+マウスの左ボタンパレットから削除

※Macの場合はCtrlの代わりにcommandキーを使用。

[][][]無料で強力な2Dゲーム向けドットキャラ制作環境&ライブラリ「RagePixel」がリリース

デモ。

D

プロトタイプ時代のデモ。

D

RagePixel by Juhakiili Oy -- Unity Asset Store

http://u3d.as/content/juhakiili-oy/rage-pixel/2Jw

RagePixelの制作者はRageSplineを制作されたJuhakiili Oyさん。ちなみに、現在RageSplineは66% OFFセール中みたいです。

RageSpline by Juhakiili Oy -- Unity Asset Store

http://u3d.as/content/juhakiili-oy/rage-spline/1DK

資料

クイックスタート。

RagePixel quickstart

http://ragepixel.com/quickstart/

ドキュメント。

RagePixel documentation

http://ragepixel.com/doc/

使い方

ドットキャラの作成方法 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120311/1331462955

RagePixelで使用可能なメソッド - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120312/1331552545

2012年03月10日

メビウスことジャン・ジロー先生が亡くなる

メビウスというフランスでバンド・デシネ(フランスのマンガ)を描かれていた方が亡くなられたそうです。

自分はTwitterで話が流れて来るまではまったく名前を聞いた事が有りませんでした。

しかし、TLにRTされて来たこちらの映像を観て、一目でとんでもない人だなというのが理解出来ました。

D

即、DVDを購入しました。ご存命の頃から追っかけておきたかった。

アルザック 宮崎駿大友克洋、松本太陽が憧れたアートコミック | デザインブログ バードヤード

http://www.albatro.jp/birdyard/illustration-art/arzach-moebius-art-comic/index.htm

自分はYouTubeの映像でもかなりショックを受けたんですが他の方のブログなんかだとイマイチ不評でこちらの画集などの方が評価が高いみたいですね。

B砂漠の40日間

B砂漠の40日間

D

ジャン・ジロー - Wikipedia

http://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%A3%E3%83%B3%E3%83%BB%E3%82%B8%E3%83%AD%E3%83%BC

[]iOSアプリを一括導入出来るボリュームライセンスの販売ってもう可能だったみたい

自分はサッパリ知らなかったのですがiOSアプリのボリュームライセンス、既に可能だったんですね。

(追記)

残念ながらこれってまだ米国のみ提供されてるみたいです。早く、日本にも導入して欲しい!!

(追記ここまで)

企業向けにiOSアプリを一括導入 - App Store Volume Purchase Program開始 | パソコン | マイナビニュース

http://news.mynavi.jp/news/2011/07/14/092/index.html

最近発表された法人向けのiOSデバイス管理ツールの「Apple Configurator」なんかと組み合わせると便利に使えそうですね。

アップル、新iPad発表の裏でひっそりと法人向けiPad管理ツールもリリース - ZDNet Japan

http://japan.zdnet.com/mobile/analysis/35014957/?tag=zdnw&utm_source=zdnet&utm_medium=newsletter&utm_campaign=newsletter

2012年03月09日

[]Unreal Engineが凄く進化してた

Unreal Engine、こんなに進化してたんですね。モバイルにも強そう。

D

[][]GDC 2012で発表されたキャラクターアニメーションのデモが凄い

Nodeベースでアニメーションを組み立てれるみたいです。これは早く製品に載せて欲しい!!

Unity Character Animation GDC 2012 Feature Preview - Unity Videos

http://video.unity3d.com/video/4655480/unity-character-animation-gdc

4Gamer.net ― [GDC 2012]次世代Unityはアニメーションシステムが大幅進化。「ステートマシン」と「ブレンドツリー」でアニメーションはどう変わるか

http://www.4gamer.net/games/032/G003263/20120307097/

[][]KAYAC制作のUnityでリップシンクする3Dモデルを再生している「りのんちゃん」が凄い

動画の説明欄によると使用した技術はUnity,Maya,openFrameworksとの事。

oFによって取得された音声をUnity側で解析し、リップシンクに反映しています。表情やポーズはキー操作で行います。

りのんちゃんリアルタイムコミュニケーションシステム from BMCL on Vimeo.

2012年03月08日

[]iPhoneにOS 5.1をインストールすると再起動を繰り返す問題とその解消方法

iOS 5.1をインストールした後に再起動を繰り返す不具合が発生する場合が有るみたいです。幸い、自分は遭遇しませんでしたが解消方法が書かれている記事を見かけたのでメモっておきます。

iOS5.1の林檎ループから抜け出せる方法が発見か? : iPhoneちゃんねる

http://iphonech.com/archives/53541699.html

[]Siriの日本語版は一部機能に制限が有るみたい

「ニューヨークへの行き方は?」と尋ねたら、こんな結果に…

f:id:nakamura001:20120308091646p:image

しょうが無い、自分で調べるか、と「マップアプリを起動」と言った所…

f:id:nakamura001:20120308092547p:image

2012年03月06日

[][]Macで「NyARToolkit4.0.0a for Unity3D」を試してみた

サンプルを動かした所、以下のエラーが発生。

Input color array length needs to match width * height, but 76800 != 320 * 320
UnityEngine.WebCamTexture:GetPixels32(Color32[])
NyARUnityUtils.NyARUnityRaster:updateByWebCamTexture(WebCamTexture) (at Assets/NyARUnityUtils/NyARUnityRaster.cs:66)
NyARUnityUtils.NyARUnityWebCam:update() (at Assets/NyARUnityUtils/NyARUnityWebCam.cs:44)

このエラーはプログラムだと 320x240 を指定しているけどMacだとWebカメラが 320x320 の画像データを返すみたいでエラーが発生しているみたいでした。

ARCameraBehaviour.cs の以下の部分を 320x320 に変更して解決。

			w=new WebCamTexture(320, 240, 15);

   ↓

			w=new WebCamTexture(320, 320, 15);

すると次にこちらのエラーが発生。

indexOutOfRangeException: Array index is out of range.
jp.nyatla.nyartoolkit.cs.core.NyARObserv2IdealMap.observ2IdealBatch (jp.nyatla.nyartoolkit.cs.core.NyARIntPoint2d[] i_coord, Int32 i_start, Int32 i_num, System.Double[] o_x_coord, System.Double[] o_y_coord, Int32 i_out_start_index) (at Assets/NyARToolkitCS/src/cs/core/param/NyARObserv2IdealMap.cs:141)
jp.nyatla.nyartoolkit.cs.core.NyARCoord2Linear.coord2Line (Int32 i_st, Int32 i_ed, jp.nyatla.nyartoolkit.cs.core.NyARIntCoordinates i_coord, jp.nyatla.nyartoolkit.cs.core.NyARLinear o_line) (at Assets/NyARToolkitCS/src/cs/core/squaredetect/NyARCoord2Linear.cs:122)
jp.nyatla.nyartoolkit.cs.markersystem.RleDetector.onSquareDetect (jp.nyatla.nyartoolkit.cs.core.NyARIntCoordinates i_coord, System.Int32[] i_vertex_index) (at Assets/NyARToolkitCS/src.markersystem/cs/markersystem/NyARMarkerSystem.cs:570)
jp.nyatla.nyartoolkit.cs.core.NyARSquareContourDetector_Rle.detectMarker (INyARGrayscaleRaster i_raster, Int32 i_th) (at Assets/NyARToolkitCS/src/cs/core/squaredetect/NyARSquareContourDetector_Rle.cs:254)
jp.nyatla.nyartoolkit.cs.markersystem.RleDetector.detectMarker (jp.nyatla.nyartoolkit.cs.markersystem.NyARSensor i_sensor, Int64 i_time_stamp, Int32 i_th) (at Assets/NyARToolkitCS/src.markersystem/cs/markersystem/NyARMarkerSystem.cs:606)
jp.nyatla.nyartoolkit.cs.markersystem.NyARMarkerSystem.update (jp.nyatla.nyartoolkit.cs.markersystem.NyARSensor i_sensor) (at Assets/NyARToolkitCS/src.markersystem/cs/markersystem/NyARMarkerSystem.cs:474)
ARCameraBehaviour.Update () (at Assets/ARCameraBehaviour.cs:66)

自分ではここで挫折して、「Windowsで試すかな?」って思っていたのですが作者さんよりアドバイスを受けて解決しました。

ARCameraBehaviour.cs の以下の部分を 320x320 に変更すると無事にMacでもエラーが無くなり、ちゃんと赤いボックスが表示されました。

		NyARMarkerSystemConfig config = new NyARMarkerSystemConfig(320,240);

   ↓

		NyARMarkerSystemConfig config = new NyARMarkerSystemConfig(320,320);

[][]MacのMonoDevelopの日本語表示の文字化けの直し方(3.5に同梱されているものの場合)

以前もこの件は書いていますがバージョン3.5に同梱されているものだとちょっと設定する場所が変わっているので改めて書いておきます。

(2012/07/18 追記)

以下の font_name を追加する処理を行うコマンドを作りました。こちらで簡単に追加可能です。

ターミナルから簡単にMonoDevelopの日本語表示の文字化けを直す為のコマンド - 強火で進め

http://d.hatena.ne.jp/nakamura001/20120718/1342616210

(追記ここまで)

MonoDevelopアプリの「内容を表示」の後、以下のパスをエディタで開く。

Contents/Frameworks/Mono.framework/Versions/Current/etc/gtk-2.0/gtkrc

フルパスはこちら。

/Applications/Unity/MonoDevelop.app/Contents/Frameworks/Mono.framework/Versions/2.10.2/etc/gtk-2.0/gtkrc

以下の記述の次の行に

    font              = "Lucida Grande 14"

以下の様な記述を1行追加します。

    font              = "Lucida Grande 14"
    font_name ="Hiragino Kaku Gothic Pro 10"

次にMonoDevelopを起動した後にショートカット command+, で「Preferences」を表示。

「ビジュアル スタイル」の項目を以下の様に設定。

f:id:nakamura001:20120307000651p:image

「Fonts」の項目を以下の様に設定。ここはエディタの設定なのでOsakaなどの等幅フォントを設定しましょう。

f:id:nakamura001:20120307000740p:image

設定が完了したらMonoDevelopを再起動すると日本語が正しく表示される様になります。

因みに日本語の入力は相変わらず対応していないみたいです。コピペはOK。

AdobeがAIR製のSWF解析ツール「Adobe SWF Investigator」を公開(プレビュー版)

窓の杜 - 【NEWS】AdobeAdobe AIR製のSWF解析ツール「Adobe SWF Investigator」をプレビュー公開

http://www.forest.impress.co.jp/docs/news/20120306_516742.html

オープンソースで、ソースコードはこちらで公開されています。

SWF Investigator / Code / [r11]

http://sourceforge.net/adobe/swfinvestigator/code/11/tree/

[][]UnityのWebPlayerはMac版ではIMEが使えない

(2013/06/24 追記)

コメント欄にてUnity 4.0からMacのWebPlayerでもIMEが使用可能になったという事を教えて頂きました。ありがとうございます。

"Mac OS X Web Player: Made IME support work in all Mac browsers."

http://unity3d.com/unity/whats-new/unity-4.0

(追記ここまで)

自分がハマったので他の人の落とし穴回避用に書いときます。

今のところ、UnityのWebPlayerはMac版ではIMEが使えないみたいです。スタンドアローン(.appファイル)の場合は使えます。

公式のこちらのページに "Note: IME on Unity is not supported on mac webplayers at the moment. " と記載されています。

[]シングルトンを実装する時には @synchronized(self)

Objective-Cでシングルトンを実装するのってどう書くんだっけ?と参考になるコードをcocos2dで探していたらこの様な記述がされていました。

static GameSoundManager *sharedManager = nil;

+ (GameSoundManager *) sharedManager
{
	@synchronized(self)     {
		if (!sharedManager)
			sharedManager = [[GameSoundManager alloc] init];
		return sharedManager;
	}
	return nil;
}

他の人の記述を見てなかったら @synchronized(self) の記述を抜かして書く所でした。他の人のコード読むの重要!!

このコードの様に @synchronized(self) {} を行う事で、selfに対する処理が {} の間は別のスレッドから行えないようになります。

この辺りの話については以下を参照。

The Objective-C Programming Language: Threading

https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocThreading.html

mutexについてはこちらを参照。スレッドを使ったプログラムでは重要な要素です。

ミューテックス - Wikipedia

http://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A5%E3%83%BC%E3%83%86%E3%83%83%E3%82%AF%E3%82%B9

同様の事例としてはこちらのブログの記事などもお勧め。

Objective-Cでatomicな宣言プロパティがatomicであるとは限らない話|中村智武のCTO記

http://ameblo.jp/tomotaken/entry-10818354164.html

[][]Unityとmodoの連携についての記事

modoとは3DCG作成ツールです。

Life with modo: modo 601: Unity+modoパイプライン

http://lifewithmodo.blogspot.com/2012/03/modo-601-unity.html

modoはこちらエントリーで紹介した書籍でもUnityとの連携についての記述が有ります。

目次を観ただけでワクワクしてくるUnity本「Creating 3D Game Art for the iPhone with Unity: Featuring modo and Blender pipelines 」 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20101023/1287838790

modo 501 日本語/通常版/スタンドアロン

modo 501 日本語/通常版/スタンドアロン

[][]UnityのiOSAndroidのライセンスが4/8まで無料

Unityのストアのデザインがリニューアルされていました。

f:id:nakamura001:20120306101648p:image

そして現在、「iOSAndroidのライセンスが4/8まで無料」というのをやってるみたいです。GDC関連でやってるのかな?

f:id:nakamura001:20120306101654p:image

今の所、サイトがかなり重くなっていて接続してもエラーになってしまいました。4/8までなので気長にトライしてみます。

ちなみに、iOSAndroidのライセンスはこの無印のものの他にProと付いている上位版も有ります(そっちは無料じゃないです)。

Unityの場合は「Unity本体のライセンス+iOS/Android向けのライセンス」という構成に成っています。今回の場合はUnityのフリー版+iOS/Androidのライセンスを購入(無料だけど)という形になります。まずはUnityフリー版を選択しないとiOS/Androidのライセンスは選択出来ないので注意して下さい。

詳しい購入とアクティベーションの手順はこちらのサイトが詳しく解説されていてお勧めです。

O-Planning ゲーム制作のちょっといい話: Unity iOS,Androidライセンスが無料!(4/8まで)

http://o-planning.sblo.jp/article/54322516.html


既にいずれかのライセンスを購入済みの場合はこちらの Upgrade のリンクから購入する事で、既存のライセンスにライセンスを追加出来ます。

f:id:nakamura001:20120307014905p:image

なお、ライセンスによる出来る事の違いについてはこちらのエントリーをご覧下さい。

ライセンスごとの機能の違い - 強火で進め

http://d.hatena.ne.jp/nakamura001/20110710/1310292561

念のために書いておくと今回のキャンペーンは4/8までのトライアル(体験版)という意味では無く、購入すればそれ以降ずっと使えるというものです。以下のツイートは同様のコメントに対するUnity公式アカウントの返信。

書籍

書籍も既に沢山出てるので皆さんも是非、これをきっかけにゲームを作りましょう!!

バンダイナムコゲームスさんのUnity本、そろそろ発売 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20111028/1319815525

和泉先生のUnity本「Unityマスターブック」 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20110916/1316173571

Radium Softwareの高橋 啓治郎さんのUnity本「Unity入門 ~高機能ゲームエンジンによるマルチプラットフォーム開発~」 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20110831/1314806250

遂に初の日本語のUnity本「Unityによる3Dゲーム開発入門」が9/10に発売 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20110829/1314590236

2012年03月05日

[][]Unityでバージョン管理ツールを使う

Unityでバージョン管理ツールを使うの役立ちそうなリンクのまとめ。SVNだとトラブル無く使えるみたいです。

あさいちのーと 【Unity】SVNに対応してみた(Windows編)

http://asaichi256.blog.fc2.com/blog-entry-25.html

A-Liaison BLOG: Unity 3.5でバージョン管理をする

http://akisute.com/2012/03/unity-35.html

2012年03月04日

[]NGUIのチュートリアル「Part 1 ー Basics」

公式のチュートリアルの解説。このチュートリアルで作るのはこの様なウィンドウ。

f:id:nakamura001:20120304171914p:image

元の動画はこちらYouTubeにも上がってますがこちらはちょっと解像度が低くて見づらいです。

それでは早速、動画の内容を順番に説明して行きます。

プロジェクトの作成

まずは新しいプロジェクトを作成して、NGUIをインポートして下さい。

するとメニューに NGUI の項目が追加されます(追加されて無い場合もメニューを触ると追加されるはずです)。

Panel作成

メニューから「NGUI」→「Create a New UI」でUI作成用のビューを表示します。

f:id:nakamura001:20120304172139p:image

デフォルトの選択状態のままで「Create Your UI」ボタンを押します。

するとこの様な階層構造で Panel が生成されます。

f:id:nakamura001:20120304160430p:image

Wedget作成用のビューをドッキング

メニューから「NGUI」→「Create a Wedget」でWedget作成用のビューを表示します。

これはよく使うのでこの様に使い易い位置にドラッグしてドッキングしておきましょう。

f:id:nakamura001:20120304160633p:image

ウィンドウの背景用スプライトの作成

Wedget作成用のビューの「Atlas」と「Font」の項目にはそれぞれ「SciFi Atlas」と「SciFi Font - Normal」を設定(ドラッグ)し、

f:id:nakamura001:20120304161051p:image

「Template」と「Sprite」の項目は以下の様に設定して、「Add To」ボタンを押します。今回のチュートリアルではこれ以降、「Atlas」と「Font」の項目は変更しません。

f:id:nakamura001:20120304161336p:image

これはウィンドウの背景用に使うパーツです。Unityの標準のScaleツールでこの様にリサイズします。

f:id:nakamura001:20120304162310p:image

いい感じにリサイズ出来たらInspectorの「Make Pixel-Perfect」ボタンを押します。するとTransformの値から小数点以下の値が切り捨てられ、整数に整形されます。

f:id:nakamura001:20120304170749p:image

ウィンドウの背景に模様を追加

Wedgetのビューで以下の様な設定を行い、「Add To」ボタンを押します。

f:id:nakamura001:20120304170918p:image

背景用のスプライトと同じサイズにリサイズします。

f:id:nakamura001:20120304170935p:image

Inspectorの「Color Tint」の項目で黒を選択し、背景が目立たない様にします。

f:id:nakamura001:20120304171029p:image

f:id:nakamura001:20120304171039p:image

「Make Pixel-Perfect」ボタンを押します。

タイトルバーの作成

Wedgetのビューで以下の様な設定を行い、「Add To」ボタンを押します。

f:id:nakamura001:20120304171114p:image

以下の様にリサイズ&移動でレイアウトします。

f:id:nakamura001:20120304171414p:image

「Color Tint」の項目で色を緑に設定します。

f:id:nakamura001:20120304171434p:image

「Make Pixel-Perfect」ボタンを押します。

ボタンの作成

Wedgetのビューで以下の様な設定を行い、「Add To」ボタンを押します。

f:id:nakamura001:20120304171458p:image

以下の位置に配置します。

f:id:nakamura001:20120304171518p:image

ここでゲームを再生してボタンがカーソルを重ねた時やクリックに反応する事を確認しましょう。

ボタンの色の変更

ボタンのBackgroundを選択し、

f:id:nakamura001:20120304171532p:image

Inspectorの「Color Tint」の項目で色を青に設定します。

f:id:nakamura001:20120304171556p:image

「Make Pixel-Perfect」ボタンを押します。

スライダーの作成

HierarchyビューでPanelを選択します。

Wedgetのビューで以下の様な設定を行い、「Add To」ボタンを押します。

f:id:nakamura001:20120304171615p:image

以下の位置に配置します。

f:id:nakamura001:20120304171628p:image

ここでゲームを再生してスライダーが動作する事を確認しましょう。

スライダーの色の変更

スライダーのForgroundを選択し、

f:id:nakamura001:20120304171723p:image

Inspectorの「Color Tint」の項目で色をオレンジに設定します。

f:id:nakamura001:20120304171742p:image

「Make Pixel-Perfect」ボタンを押します。

タイトルバーにタイトルを記述

HierarchyビューでPanelを選択します。

Wedgetのビューで以下の様な設定を行い、「Add To」ボタンを押します。

f:id:nakamura001:20120304171754p:image

以下の位置に配置します。

f:id:nakamura001:20120304171810p:image

Inspectorの以下の部分に「Window Text」と入力します。

f:id:nakamura001:20120304171835p:image

ここでは途中で文字の色を変更する事も出来ます。「Window [FF0000]Text」と変更してみて下さい。Textの文字が赤になったはずです。

f:id:nakamura001:20120304171847p:image

チェックボックスを作成

HierarchyビューでPanelを選択します。

Wedgetのビューで以下の様な設定を行い、「Add To」ボタンを押します。

f:id:nakamura001:20120304171901p:image

以下の位置に配置します。

f:id:nakamura001:20120304171914p:image

ここでゲームを再生してチェックボックスが動作する事を確認しましょう。

以上でチュートリアル「Part 1 ー Basics」は終了です。

2012年03月03日

[][]Unity向けのGUIライブラリ「NGUI: Next-Gen UI」が凄い!!

f:id:nakamura001:20120304015421p:image

f:id:nakamura001:20120304015427p:image

最近、Unityをガンガン使ってる人達のツイートで度々見かけるNGUIというライブラリ。この所、Asset Storeで常に1位に居たりします。

この前の勉強会のLTでも絶賛されていました。

と言う事でこれは買うしか無いでしょ?と思い、購入しました。

まだサンプルを動かした位ですが確かにこれは凄いライブラリでした。付属のサンプルを動かした動画を作成しましたのでこちらでその機能を確認してみて下さい。

D

スクロールとクリッピングのサンプルが動画を見ただけでは同じ事をしている様に見えますが編集画面を見るとその違いが分かります。

スクロールの場合はスクロール内のアイテムは別の場所に確保し、そこをメインカメラとは別のカメラで撮影しています。クリッピングでは実際に見える場所と同じ位置に配置されています。

【スクロール】

f:id:nakamura001:20120304020332p:image

【クリッピング】

f:id:nakamura001:20120304020342p:image

自分の好きなフォントで日本語入力が可能なInput Boxを作ることも可能です。

MacのWebPlayerは現在、IMEによる入力に非対応なためMacでは正しく動作しません(スタンドアローンアプリの場合には使用可能)。こちらのサンプルはWindowsで見て下さい。

f:id:nakamura001:20120305221403p:image

チュートリアルや詳しい機能についてはこちらを参照して下さい。

NGUI (Next-Gen UI) -- demo & final feedback request

http://forum.unity3d.com/threads/114833-NGUI-%28Next-Gen-UI%29-demo-amp-final-feedback-request

NGUI: Next-Gen UI kit » Tasharen Entertainment

http://www.tasharen.com/?page_id=140

2012年03月02日

[]「JavaScriptグラフィックス――ゲーム・スマートフォン・ウェブで使う最新テクニック」

3月16日発売予定みたいです。

自分としては以下の辺りが書かれてるが良いなと思いました。

  • ExtJSを用いた強力なUI
  • CanvasとSVGの比較
  • CanvasとFlashの違い
  • CanvasとWebSocketを使ったグラフィカルなチャットアプリ
  • ベクトル計算
  • 大砲シミュレーション
  • 衝突処理
  • PhoneGapの使い方

目次

1章 コードの再利用と最適化
    1.1 高速化
    1.2 何をいつ最適化するか
    1.3 自家製コードプロファイリング
    1.4 JavaScriptの最適化
        1.4.1 ルックアップテーブル
        1.4.2 ビット演算、整数、2進数
    1.5 jQueryとDOM操作の最適化
        1.5.1 CSSスタイル変更の最適化
        1.5.2 DOM挿入の最適化
    1.6 その他の情報

2章  DHTML
    2.1 DHTMLスプライトの作成
        2.1.1 アニメーション
        2.1.2 カプセル化と描画の抽象化(詳細隠蔽)
        2.1.3 DOMの挿入と削除を最小化
        2.1.4 スプライトのコード
        2.1.5 簡単な Spriteアプリ
        2.1.6 より動きのあるスプライト
    2.2 jQueryプラグインに変換
    2.3 タイマー、スピード、フレームレート
        2.3.1 setIntervalとsetTimeoutの使用
        2.3.2 タイマーの精度
        2.3.3 一定スピードの実現
        2.3.4 InternetExplorer6の背景画像キャッシュ

3章 スクロール
    3.1 CSSだけを使ったスクロール効果
    3.2 JavaScriptを使ったスクロール
        3.2.1 背景画像のスクロール
        3.2.2 タイルベース画像のスクロール

4章 高度な UI
    4.1 HTML5のフォーム
    4.2 JavaScriptのUIライブラリ
        4.2.1 jQueryUIを用いた Webインタフェース強化
        4.2.2 ExtJSを用いた強力なUI
    4.3 UI要素の自作
        4.3.1 3D回転木馬の作成

5章  JavaScriptゲーム
    5.1 ゲームで使うオブジェクトの概要
    5.2 ゲームのコード
        5.2.1 ゲーム全体で用いる変数
        5.2.2 キーの読み込み
        5.2.3 キャラクタの移動
        5.2.4 簡単なアニメーション効果
        5.2.5 衝突判定
        5.2.6 インベーダー
        5.2.7 プレイヤー
        5.2.8 シールド
        5.2.9 UFO
        5.2.10 gameオブジェクト
        5.2.11 ひとつにまとめる

6章  HTML5Canvas
    6.1 Canvasのサポート
    6.2ビットマップかベクターか?あるいは、その両方か?
    6.3 Canvasの制限
    6.4 CanvasとSVGの比較
    6.5 CanvasとFlashの違い
    6.6 Canvasエクスポータ
    6.7 Canvasの描画の基本
        6.7.1 Canvas要素
        6.7.2 描画コンテクスト
        6.7.3 矩形の描画
        6.7.4 直線と曲線を使ったパスの描画
        6.7.5 ビットマップ画像の描画
        6.7.6 色、境界線、塗り潰し
    6.8 Canvasを使ったアニメーション
    6.9 Canvasと再帰的な描画
        6.9.1 Canvasによる樹木のページレイアウト
    6.10 DHTMLスプライトをCanvasのスプライトに置き換える
        6.10.1 CanvasSpriteオブジェクト
        6.10.2 他のコード修正
    6.11 CanvasとWebSocketを使ったグラフィカルなチャットアプリ
        6.11.1 WebSocketの利点
        6.11.2 WebSocketのサポートとセキュリティ
        6.11.3 チャットアプリ

7章 ベクトル計算
    7.1 ベクトルの演算
        7.1.1 足し算と引き算
        7.1.2 拡大・縮小
        7.1.3 正規化
        7.1.4 回転
        7.1.5 内積
    7.2 JavaScriptによるベクトルオブジェクトの作成
    7.3 ベクトルを使った大砲シミュレーション
        7.3.1 シミュレーション全体で用いる変数
        7.3.2 弾丸
        7.3.3 大砲
        7.3.4 背景
        7.3.5 メインループ
        7.3.6 ページレイアウト
    7.4 ロケットのシミュレーション
        7.4.1 ゲームオブジェクト
        7.4.2 障害物オブジェクト
        7.4.3 ロケットオブジェクト
        7.4.4 背景
        7.4.5 衝突判定と反作用
        7.4.6 ページレイアウト
        7.4.7 改良・改造のアイデア

8章  GoogleChartTools
    8.1 制限事項
    8.2 グラフ一覧
    8.3 画像グラフ
        8.3.1 データ形式とグラフ分解能
        8.3.2 動的なデータの使用
        8.3.3 まとめ
    8.4 インタラクティブなグラフ
        8.4.1 インタラクティブなグラフのイベント

9章  jQueryMobile
    9.1 jQueryMobileの基本
    9.2 TilePic:モバイル向けのWebアプリ
        9.2.1 TilePicゲームの説明
        9.2.2 TilePicゲームのコード
    9.3 PhoneGapとは

10章  PhoneGap
    10.1 インストール
        10.1.1 JDKのインストール
        10.1.2 AndroidSDKのインストール
        10.1.3 Eclipseのインストール
        10.1.4 ADTのインストール
        10.1.5 PhoneGapのインストール
    10.2 Eclipseでの PhoneGapプロジェクトの作成
        10.2.1 App.javaファイルの変更
        10.2.2 AndroidManifest.xmlファイルの変更
        10.2.3 簡単な Webアプリを作成してのテスト
        10.2.4 TilePicアプリのテスト

付録 A ソケットサーバのソースコード

付録 B モバイル版 OrbitAssault
    B.1 jQueryMobileによるモバイル対応
        B.1.1 タッチによる砲台操作
        B.1.2 画面回転の対応
        B.1.3 ページレイアウト
    B.2 PhoneGapによるネイティブアプリ化

[]iOSAndroid向けのOpenGL ES 2.0本「Game and Graphics Programming for iOS and Android with OpenGL ES 2.0」

ゲーム、グラフィック向けの内容。iOSAndroid向けのOpenGL ES 2.0本。

iPhoneで一般ユーザがアプリを作成可能になってからの早い時期に作られたハイクオリティのゲームエンジンにSIO2というエンジンが有ります。

著者はそのゲームエンジンの作者みたいです。

現時点で最強のiPhone向けゲームエンジンはSIO2だと思う - 強火で進め

http://d.hatena.ne.jp/nakamura001/20081029/1225287233

Game and Graphics Programming for iOS and Android with OpenGL ES 2.0 (Wrox Programmer to Programmer)

Game and Graphics Programming for iOS and Android with OpenGL ES 2.0 (Wrox Programmer to Programmer)

2012年03月01日

[][]「第2回 渋谷Unity勉強会xコロプラUnity事例発表」に参加してきました

【満員御礼/増員350名】第2回 渋谷Unity技術勉強会xコロプラ事例発表 : ATND

http://atnd.org/events/24706

Togetterまとめ。

2012/03/01_第2回 渋谷Unity技術勉強会xコロプラ事例発表( #ShibuyaUnity ) - Togetter

http://togetter.com/li/266118

Unity入門 第1回 - 赤坂玲音(@LeonAkasaka)さん

スライド資料はこちら

※赤坂玲音さんの講演はスライド資料が公開されているので自分が特に気になった部分とスライドに含まれていない解説やQAの部分についてだけ記述して置きます。

  • 以下の様な本を出されています。
Windowsゲームプログラミング 第2版 Game Developer

Windowsゲームプログラミング 第2版 Game Developer

これからはじめるVisual C++ 2010 forマネージコードC++/CLI

これからはじめるVisual C++ 2010 forマネージコードC++/CLI

  • 自身でゲームを作るような事はほとんど無いけどゲーム会社に新しい技術の指導に行く様な事は有るとの事でした
  • フリーランス

こちらのサイトでUnityの入門記事を掲載中。

本勉強会のこれからの予定

3月1日(本日)

  • Unityの基本的な構造を俯瞰
  • 構造上の注意点など

3月29日

  • グラフィックス
  • リソースの実行時生成などプロシージャルな手法

4月26日

  • Unity Editorの拡張
.NET Framework によくある誤解

iOSでは規約の問題でAOTによる事前コンパイルのみ

(筆者注)

AOT(Ahead-Of-Time)

事前コンパイラ - Wikipedia

http://ja.wikipedia.org/wiki/%E4%BA%8B%E5%89%8D%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9

アセンブラの実演

Visual Stduioに付属している逆アセンブラでメソッドを確認する実演。

f:id:nakamura001:20120302001748j:image

f:id:nakamura001:20120302001757j:image

会場への質問

プロジェクトにBooを使っている人居ますか?→会場の挙手 0

他のC#を使ったプロジェクトにも使える汎用的なライブラリを作る時の注意点
  • 作成するものは一般的な.NET FrameworkのDLLでOK
  • MonoBehaviourを継承する様なものだと他の環境では使えない
  • .NET Framework 2.0相当の機能に限定する
    • 最新バージョンは4.0だが、Unityで利用することを考えるとスマートフォン向けのプロファイルが2.0相当
Unity依存のライブラリを作成する時の注意点
  • 可能な限り型安全に。SendMessageなどは極力避ける
Unityでオブジェクトと言っている場合には全部で3つの可能が有るので注意
  • System.Object
    • 全てのオブジェクトの基底クラス
  • UnityEngine.Object
    • UnityEngineによって管理されるオブジェクト
    • ゲームオブジェクト、コンポーネント、アセットの基底クラス
  • UnityEngine.GameObject
    • UnityEngine.Objectから派生
    • シーンに配置されているオブジェクト
GCの話
  • GameObjectは常にUnityエンジンから参照されている
    • スクリプトで参照が失われてもGCの対象にならない
    • Destroy()メソッドによる明示的な削除
      • 複数のスクリプトで共有しているオブジェクトの破棄に注意
勘違いされがちな this
  • スクリプト自身はMonoBehaviourのインスタンス
    • よくthisの結果をゲームオブジェクトと混同している
      • Destroy(this) は何を消すのか
    • thisはスクリプト自身でありゲームオブジェクトではない
      • ゲームオブジェクトは this.gameObject
自動メモリ管理でもメモリリークする
  • 不要なオブジェクトを参照し続けるとガベージとしてマークできないためメモリリークする
    • 配列の要素として格納したまま忘れる
    • デリゲートをイベントに追加したまま忘れる
参考資料

Scripting Overview

http://unity3d.com/support/documentation/ScriptReference/

.NET Frameworkの概要

http://msdn.microsoft.com/ja-jp/library/a4t23ktk(v=VS.90).aspx

Mono

http://www.mono-project.com/Main_Page

QA

UnityのUnitテストはどの様にしてますか?

  • オープンソースの物を使う
  • ライブラリ化し、ライブラリをしっかりテストする

コロプラのUnity事情2 〜リズムコイン!〜 - 株式会社コロプラ 馬場 功淳さん

  • 月に3本ゲームをリリースするのが目標
  • Unityチームは現在13人
  • Unity製のゲームは全世界合計で250万〜300万DLくらい
難易度調整Tips
  • プレイの完全自動化と高速化をしよう
  • 注意点
    • ゲーム内の時間に左右される処理は「Time.deltaTime」等の値を考慮してスクリプトを組む
    • Animationが正しく挙動しないことがある
    • コリジョン、物理計算などが不安定になる
  • メリット
    • バランス調整という、一番時間が掛かり尚かつ重要な作業を短縮できる
    • 複数台の端末でゴリゴリ回すと、眠っていた不具合が突然出てくる事などもある
  • テスト用に自動でコインを落とすモード
  • 10倍速度で動作するモード
  • 自動的に何時間も動作させる様なテストも行った
  • 結果データを保存していて後でExcelで見れる様にしている
  • 特定の機種のみ発生するバグ→このモードで動かす事でデバッグした
チューニング1
  • Deep Profileで(ONにした状態で)プロファイリングしながら探す
  • Deep profileはONでメソッドの奥まで確認出来る。
  • 感覚で探さない。プロファイリングして負荷の上位(ボトルネック)から順に最適化しよう!
チューニング2

ヒエラルキーなどツリーを検索する以下のメソッドは極力使わない

GameObject.Find("Name")

GameObject.FindObjectsWithTag("TagName")

GameObject.GetComponents<T>()

GameObject.SetActiveRecursively(bool)

※特にUpdate()では絶対に使用禁止☆

× GameObject obj = GameObject.Find("Wall");

◯ public GameObject wall;

チューニング3

DateTime型/TimeSpan型を使わない

TimeSpan delta = DateTime.Now - startTime;

long elapsed = delta.TotalMilliseconds;

といった処理をUpdate()で毎フレーム行うと計算コストが非常に高い。しかもこれだとゲーム内時間ではなく実経過時間となってしまうので、ゲームオブジェクトの管理に使うにはとても都合が悪い。

private float delta = 0.0f;

delta += Time.deltaTime;

など

(※関連するTwitterでのツイート)

チューニング5

(筆者注:あれ?チューニング4をメモするの忘れたかな?)

  • RayCastを節約する
  • くまの影(の板ポリ)の座標を求めるためにUpdate毎にRayCastしていた(Deep ProfileでCPU Load 2.5%くらい)
  • RayCastする回数を抑える。ジャンプする以外は使わないので、状態判定を行なって飛んでないときは処理をカット → 2%改善

f:id:nakamura001:20120302004121p:image

チューニング6

パーティクルは大きく少なく

処理負荷はパーティクルの数に比例する

→粒の数を減らして大粒にする。表示されない方向に飛ばないように速度を与えるように設定値をしっかり見直す

例) コインの変化等のパーティクルが200出てた(とんでもなく重い)→20まで減らして大粒に

機種依存情報1

フィーバータイム中の背景のクマスクリーン

  • Screenモデルを用意
  • Mesh RendererのマテリアルにRender Texture

▲現象

該当機種:Docomo Galaxy S

フィーバータイム開始時、もしくは終了時にアプリケーションが停止する。(GUITextureに転送して2Dとして表示するぶんには問題無し)

▲原因

起動時にセットするとフリーズ

▲対処

必要な時に設定する。不要になったら削除

KumaCamera.camera.targetTexture = RenderTexture;

KumaCamera.active = true;

f:id:nakamura001:20120302004823p:image

機種依存情報2

▲現象

該当機種:Docomo Galaxy S2

極まれに端末リブート

▲原因

Audio Sourceが付加されたゲームオブジェクトで

audio.clip = Source

audio.Play()

というロジックでサウンドを短いスパン(1秒間に複数回)を何度も繰り返すことによって発生

▲回避方法

元からAudio Sourceに対してAudio Clipを設定しておき

audio.PlayOnShot();

に変更することによってクラッシュを回避

  • コードを1個1個削っては自動動作を2時間位流してクラッシュするを繰り返して確認。バグを見つけるのに2日かかった。
  • 本などでは「回避方法」の様な記述が書かれている。しかし、今回は音のクロスフェードをしたかった為にこの様な実装にしていた。

(筆者注:LTが懇親会の時に行われていて、他の方々と話ていてLTが始まっているの気がつくのが遅れてあまりメモが取れていません。メモれた部分だけ書いときます)

(LT)三次元解剖学書ネタか、今作ってる猫アプリのネタ by 金田さん

  • 3Dの人体模型アプリを作った時の話
  • 作成する必要が有る3Dモデルの数が膨大で有ったため依頼を受けた大学でアルバイトを募った
  • 80人もの応募が有った
  • そんなには面接は出来ない為、指定した部位の筋肉のモデルをメタセコイアで作って貰う事
  • 40人も提出が有った
  • その中から数人(※人数を言われていたはずですが忘れちゃいました。3人くらいだったと思います)を採用

(LT)2Dアセット系まとめ - 時村 良平さん

スライド資料はこちら

こちらもスライド資料が有るので自分が気になった所だけ。

  • 2DToolKitは「2Dの見た目とPhysicsの組み合わせが可能」。Angly Birdsみたいな簡単に作成出来る。この時、物理演算はUnity標準のものが使用可能
  • 2Dの見た目とPhysicsが一致しているためこの様なトゲトゲなもの場合にもトゲの部分にのみ当たり判定が有る

f:id:nakamura001:20120302011032j:image

  • ex2DはUIについては×(筆者注:一応、ボタンくらいは作れる仕組みが有ります。でもまぁ、基本的には非対応な感じです)
まとめ
  • 2DToolKit
    • 絵に合わせた当り判定が必要なアプリ
    • AngryBirdsなど
  • eX2D
    • ちゃんとしたコマ送りアニメが必要な2Dゲーム
  • NGUI
    • GUI主体のゲームならこれがベター
  • EZGUI
    • もう役割は終えた?

[][][]簡単に様々なアニメーションを付ける事が出来るツール「iClone5」はUnityとの連携が可能みたい

中の人のツイートで知りました。

Kinectを使ってモーションを付けたりも出来るみたいです。

D

3D Animation and 2D Cartoons Made Simple - Reallusion Animation Software

http://www.reallusion.com/