MobileSocial

海賊王をめざす男 マツです。こんにちは。

Unity をはじめたころにやりたいことで、Scene に配置されている GameObject を子も含めて一括でアクティブ/非アクティブを変更するのがあります。

function Awake () {
	ActiveChange(gameObject.transform, false);
}
function ActiveChange(targetGO : Transform, activedFlag : boolean) {
	targetGO.active = activedFlag;
	for (var child : Transform in targetGO) {
		ActiveChange(child, activedFlag);
	}
}

しかし、これはすぐにやめました。リファレンスをよく読んでみると SetActiveRecursively というのがあります。

targetGO.gameObject.SetActiveRecursively(false);

これで、子も含めて一括でアクティブ/非アクティブを変更することが可能です。


Unity Script Reference ? GameObject.SetActiveRecursively
http://unity3d.com/support/documentation/ScriptReference/GameObject.SetActiveRecursively.html

Unity GameObject の子を含め一括でアクティブ/非アクティブを変更する

MobileSocial

皆さんこんにちは、kijimaです。
世の中ではスマートフォンで盛り上がっていますね。
電車内でスマートフォンの広告を見ない日はありません。

しかし、フューチャーフォン(通称ガラケー)による
携帯ソーシャルゲームもまだまだ熱いようです。

そんな状況で、
FlashLite1.1コンテンツ開発における知識やテクニックは
まだまだ必要とされているな
、と感じます。

そこで、今回は
「FlashLite1.1についてはこの記事さえ押さえとけばOK!!!」
というコンセプトで記事を書いてみました。

これで、FlashLite初心者な後輩に教えるのにも便利になります(笑)
「この記事さえ見とけば、できるようになるから」と。(笑)

■FlashLite1.1初心者はこれを読もう!

FlashLite初心者向けや入門記事はとても多いので、
検索すればすぐにヒットします。
情報が重複しているとは思いますが、複数の記事を見比べてみて
「FlashLiteってこういうもの」と理解してみましょう。


■FlashLite1.1やるなら覚えておきたい便利なお作法

FlashLite1.1に慣れてきて、ゲームなどで複雑な処理を作るとき
必ずぶち当たる"tellTarget","call",変数の扱いなどの壁を壊すための
"お作法"について紹介されている記事です。


■知ってると便利なテクニック

フレームと変数を使った単純なゲームから
ステップアップするために便利なテクニックたちです。
特に衝突判定は使えるとゲームの幅がかなり広がるので
ぜひ身につけたいところです。


■FlashLite開発には、デザイナーの協力も不可欠です

FlashLite開発で気を付けなくてはならないのは、
プログラミングだけではありません。
デザイン作業においても、
FlashLite上で扱いやすいデータ形式に最適化したり
画像容量の軽量化を施すことは、必須となります。

BitmapFontはアウトライン化してもパスが少ないので 埋め込みフォントとしてではなくパスデータで扱うこともあります。


■サクサク動作、容量軽量化を極めたい人向けテクニック

ゲームはできたけど、
動作が重い・容量が100KB近くなっちゃった!という方は必読です。
特に一番上の@ITさまの記事は、FlashLite中級者以上にはたまらない内容、
今まで見たFlashLite系記事の中でも
特にコアな部分まで解説されていて秀逸!だと思います。


■FlashLite作成時の落とし穴

そんな感じで複雑なロジックやボタン操作の絡むゲームを作っていると、
思わぬバグやFlashLite独自の仕様の罠にひっかかりがちです。
「ん?おかしいな」と思ったら、こちらを参考にしてみてください。


■【おまけ1】ゲームアイデア発想の手引き的な。

手前味噌で恐縮ですが、
技術ネタがない時によく自分がこのleve0.kayac.comで書いている
ゲームの本質的面白さを考察してみた記事です。


■【おまけ2】FlashLite1.1コンテンツ開発時の自分ルール

最後に、これまでに自分が学んできた上での
作成時のルールをご紹介します。
全てにおいてこれが最適!と胸をはっては言えないですが、
参考になれば幸いです。

携帯ソーシャルゲーム内で使われるという前提で決めたルールなので、
待受Flashやモバイルサイトには最適とは言えない部分もあります。

・画面サイズは最大横幅240px 高さ300pxで。
・使用するデバイスフォントサイズは12・16・24px
・フレームレートは10fpsが基本。
過去には12fpsも使っていましたが、
SWFをiOS用に変換する時、10以上のfpsは変換できない確率がグッと上がるためや
端末のスペック差によって
アニメーションの再生スピードが大きく異なるという理由で
現在は10fpsを基本としています。

・定数はrootの1フレーム目に記述
flaファイルを開いたとき、SWF合成の際もコード全体の見通しも良くなります。

・アニメーションのレンダリング品質はひとまず"middle"で。
lowにするとがくっと汚くなるので、
予めlowで使用する前提でデザインをするか、
演出的に使う以外は再生中の切り替えはしません。
例)fscommand2("SetQuality", "middle");

・1フレーム内にたくさんの処理をさせない。
たくさんのActionScriptの処理とアニメーションの描画を
同時にしようとすると、
そのフレームの再生がガクッと遅くなります。
そんな時は、画面内の描画が大きく変更されるアニメーションと
スクリプト処理を複数のフレームに分散させています。

今回、当level0.kayac.comで過去に書かれた記事も
改めて紹介させて頂きました。

携帯ソーシャルゲームにおいては
たくさんのユーザーに遊んでもらうことが大事なことなので、
確実に対応している端末が多いから、という理由が
FlashLite1.1がまだまだ現役である要因です。


次回は、最近特に動きが活発な、
携帯ソーシャルゲームにおける
フューチャーフォンからスマートフォンへの転換について
Flashコンテンツ開発者側からのアプローチ方法などを
まとめてみたいと思います。

FlashLite1.1コンテンツ開発ならこの記事を見れば大丈夫。(2011年8月版)

MobileSocial

海賊王をめざす男 マツです。こんにちは。

Unity で、ツイートするサンプルがあったのでためしてみました。
http://u3d.as/content/young-wook-yang/let-s-tweet-in-unity/1Dq

簡単に Twitter アカウントの "access token & secret" を取得&保存することができ、OAuth 認証を必要とする全ての Twitter 機能を扱うことが可能になります。


手順

1. Create an application
Twitter にアプリ登録
http://dev.twitter.com/apps/new
Twitter アカウントでログイン

2. Application details を入力
Name:M3UnityTest0
Description:Unity Game Test
WebSite:http://creator.ms
Callback URL:

3. Developer Rules of the Road
Yes, I agree 同意するチェックを入れる。

4. CAPTCHA を入力。

5. [Create your Twitter application]ボタンをクリック。

6. My applications
"Consumer key", "Consumer secret" のそれぞれが表記されます。

7. Settings
Application type
Access:Read, Write and Access direct messages
に変更します。

8. Unity サンプルの Demo シーン ( demo.unity ) を開く。

9. Hierarchy の Demo という GameObject を選択します。

10. Inspector の CONSUMER_KEY, CONSUMER_SECRET に取得した "Consumer key", "Consumer secret" を入力します。

11. Demo シーンを実行。

12. [You need to register your game or application first.]ボタンをクリック。

13. ブラウザが立ち上がって、twitter がアカウント許可を求めてきます。

14. [連携アプリを認証]ボタンをクリック。

15. PIN コードが表示されます。

16. [Please enter your PIN here.]テキストエリアに取得した PIN コードを入力し、[Enter PIN]ボタン

17. [Please enter your tweet here.]テキストエリアにつぶやく内容をエントリーして、[Post Tweet]ボタン

18. Tweet 完了


サンプルソースでは、GetHeaderWithAccessToken() で Twitter API の url を実行していました。

GetHeaderWithAccessToken(
	string httpRequestType, 
	string apiURL, 
	string consumerKey, 
	string consumerSecret, 
	AccessTokenResponse response, 
	Dictionary parameters)


Android テスト

Android にアプリをビルドして、テストしてみたところ、無事ツイートできました。
ただし、現時点で Unity の GUI.TextField は、モバイルだとダイナミックテキストは使えないので、日本語は使用できません。

Unity で Twitter テスト

MobileSocial

海賊王をめざす男 マツです。こんにちは。

最新各地で動きのある Unity ですが、初歩の進めとしてアングリーバード的なゲームをつくる簡単なデモを紹介します。

Demo
画面をクリックするとボールが発射します。

ブラウザでも確認できるように Unity の Web プレイヤーで書きだしています。
Unity Web Player ダウンロード
http://unity3d.com/webplayer/

これが今回のサンプルの完成形

グラウンドとボール、ブロックだけのシンプルなものです。

Unity を起動し、[File]_[New Project] でプロジェクトを新規作成をしたら TestScene という名前のシーンを保存します。


Hierarchy

このような GameObject 構成です。それぞれの作成方法は―

Player となるボール Sphere を作成
[GameObject]_[Create Other]_[Sphere]
Sphere に Rigidbody コンポーネントを追加
[Component]_[Physics]_[Rigidbody]
Sphere から Player に名前を変更。
(名前は、適当なもので OK です。)


Ground となる Cube を作成
[GameObject]_[Create Other]_[Cube]
Scale を調整して、地面とみたてます。


ブロック となる Cube を作成
[GameObject]_[Create Other]_[Cube]
Cube に Rigidbody コンポーネントを追加
[Component]_[Physics]_[Rigidbody]

Inspector の Mass で、Cube の質量を調整します。
値が小さくなると軽い Cube となります。
Cube を複製してブロックを積み上げます。
それぞれの Cube の Scale を調整して、縦長、横長のブロックを用意します。


明りとなる Point Light を作成
[GameObject]_[Create Other]_[Point Light]
GameObject がよくみえるところに配置してください。


ボールを発射する

PlayerConntroller となる空の GameObject を作成
[GameObject]_[Create Empty]

Project に JavaScript ファイルを作成します。
Project [右クリック]_[Create]_[JavaScript]

PlayerController.js

var player : GameObject;
var shootPowerX : float = 400.0;
var shootPowerY : float = 400.0;
function Update () {
	if ( Input.GetButtonDown("Fire1") ) {
		player.rigidbody.AddForce(shootPowerX, shootPowerY, 0);
	}
}

マウスクリックされたら、player に対して、力を加えるという簡単なお仕事です。

PlayerController.js を Hierarchy の PlayerConntroller(空の GameObject) にドラッグ&ドロップします。
自作のコンポーネントをつくり、GameObject に対して適応させたということになります。
Hierarchy の PlayerConntroller を選択すると Inspector にコンポーネントのパラメータが表示されます。

Player のところに Hierarchy の Player をドラッグしましょう。


リセットボタンをつくる

空の GameObject を作成
[GameObject]_[Create Empty]
名前を Trigger とします。

Project に JavaScript ファイルを作成します。
Project [右クリック]_[Create]_[JavaScript]
名前を Trigger.js とします。

Trigger.js

function OnGUI () {
	if ( GUI.Button(Rect(10, 10, 50, 50), "Reset") ) {
		Application.LoadLevel("TestScene");
	}
}

Reset ボタンをクリックしたら、シーンを再読み込みをするものです。

Trigger.js を Hierarchy の Trigger(空の GameObject) にドラッグ&ドロップします。


デモ

Demo
画面をクリックするとボールが発射します。

ブラウザでも確認できるように Unity の Web プレイヤーで書きだしています。
Unity Web Player ダウンロード
http://unity3d.com/webplayer/


ボールやブロックの数や設定を調整することで面白いゲームがつくれると思います。
Unity のゲームエンジンの可能性がなんとなくつかめたでしょうか。
Unity は 3D 描画や物理演算に加えて、パーティクルなどの GUI もそろっています。

今年の夏休みの自由研究は、Unity で決まりです!

爆速! Unity でアングリーバード的なゲームをつくる。

MobileSocial

海賊王をめざす男 マツです。こんにちは。

Unity で iPhone & Android アプリをつくろう。

Unity for iPhone and Android
http://unity3d.com/japan/mobile.html

Unity Spring 2010 Highlight Reel from Unity3D on Vimeo.

Unity は、本格的なゲームの開発を誰でも可能にすることを目標に作られたゲーム開発ツールです。
iPhone や Android などのプラットフォームに対して効率よくゲームを提供することが可能です。


ダウンロード

UNITY: Download and Start Creating Games
http://unity3d.com/unity/download/


Unity から MonoDevelop を関連付ける

Unity といっしょにインストールされる MonoDevelop を Unity のエディタとして関連付けます。

Windows の場合
Unity [Edit]_[Preferences]_[External Script Editor]
Unity\MonoDevelop\bin\MonoDevelop.exe を選択

Mac の場合
Unity [Unity]_[Preferences]_[External Script Editor]
アプリケーション/Unity/MonoDevelop.app を選択

これで、Unity の Project パネルから js, C# ファイルを MonoDevelop で開くことができます。


Mac MonoDevelop の GUI 日本語 文字化け対応

MonoDevelop.app を右クリックで、[パッケージの内容を表示]
/Contents/Frameworks/Mono.framework/Versions/Current/etc/gtk-2.0/gtkrc
font = "Lucida Grande 12"
の下に
font_name ="Hiragino Kaku Gothic Pro 12"
を追加する。

sd-tech: MonoDevelop(Unity) for Macの日本語文字化けを直す
http://www.sd-tech-blog.com/2011/01/monodevelopunity-for-mac.html


Mac MonoDevelop の 日本語 文字化け対応(表示)

MonoDevelop [Prefarences]_[テキストエディタ]_[一般]_[フォント]_[カスタム]
"Hiragino Kaku Gothic Pro W3, 12" を選択。
ただし、表示だけで、直接 日本語の入力はできません。テキストエディット等をコピペで入力は可能。


デバッグ

ブレークポイントを指定してデバッグするには、Unity を MonoDevelop から起動する必要があるみたいです。一度、Unity を閉じて、
MonoDevelop [Run]_[Debug] を実行すると Unity が起動して、デバッグが開始します。


Unity の基本

Unity は、GameObject と Component の関係を理解することがまず一歩目。

Component
メッシュ、マテリアル、地形データ、パーティクルシステムなどの描画要素を表します。
カメラ、ライトなどの抽象的なものもあります。

GameObject
Componentのコンテナ。
全ての GameObject は、位置と向きを指定する transform コンポーネントを持ちます。
複数の Component をひとつの GameObject に付加できます。また、複数のスクリプトも格納できます。
しかし、パーティクルシステムを定義するようなコンポーネントは、1つの GameObject に1つだけです。
もし、複数のパーティクルシステムを使用したい場合は、ゲームオブジェクトを階層化し、複数がパーティクルシステムを保持するようにします。

Prefabs
テンプレート定義されたアセット。
Project で、Prefabs をクリックし、設定(Inspector)を変更すると Scene 中の全てのインスタンスに即座に適応されます。
ゲームに登場する敵など再利用可能な要素。敵の動きを変更したい場合、Scene 中のそれぞれの敵の設定を変更するのではなく、
オリジナルの Prefab に設定されたスクリプトを変更すれば OK です。
Scene 中の特定のインスタンスだけに個別に設定を行うことも可能です。


Flash 技術者のための Unity 講座

Unity for Flash Developers - Tutorial 1

Unity for Flash Developers - Tutorial 1 from Richard Hart on Vimeo.

こちらに Flash 技術者のための Unity のチュートリアル動画があります。動画は、Tutorial 1 ~ Tutorial 7 まであります。
Flash Lite や AS2 以降の Flash 経験者であれば、理解できる内容になっています。

Unity は、C#, または js でコードを書きます。

例)Project にある Prefab を動的に生成するには、Instantiate を使用します。

var object:GameObject;	// Prefab
var instance:GameObject = Instantiate(object, transform.position, transform.rotation);

例)Instantiate は最上層に生成されるので親となる GameObject を指定します。

var object:GameObject;	// Prefab
var parentObject:GameObject;
var instance:GameObject = Instantiate(object, transform.position, transform.rotation);
instance.transform.parent = parentObject.transform;

例)Scene 中にある GameObject を削除します。削除する GameObject 名と何秒後を指定します。

Destroy(gameObject.Find("Hoge"), 3);

例)Scene 遷移

Application.LoadLevel("シーン名");

例)Scene 中にある Hand ( GameObject ) の OtherScript ( Component ) の変数 foo に値をセットします。

transform.Find("Hand").GetComponent(OtherScript).foo = 2;

例)Scene 中にある Hand ( GameObject ) の OtherScript ( Component ) のメソッド DoSomething に引数 ("Hello") で実行します。

transform.Find("Hand").GetComponent(OtherScript).DoSomething("Hello");

Unity Script Reference ? Overview: Accessing Other Game Objects
http://unity3d.com/support/documentation/ScriptReference/index.Accessing_Other_Game_Objects.html


iTween

iTween for Unity by Bob Berkebile (pixelplacement)
http://itween.pixelplacement.com/index.php

Unity に移植された Tweener ライブラリです。Plugins に設置して使用できます。

使用例


iTween.MoveTo(gameObject,{"x":3,"time":4,"delay":1,"onupdate":"myUpdateFunction","looptype":"pingpong"});
iTween.MoveTo(gameObject,Vector3(2,0,0),2);

iTween ドキュメント
http://itween.pixelplacement.com/documentation.php


Unity はじめてみて

以前、Android で OpenGL でつくったゲームと同じ内容のものを Unity でつくってみたのですが、1 週間かかったものを 数時間でつくることができました。
ガラケーからスマホへという流れで、ゲーム開発に必要だったものは、Flash と同等(それ以上)の表現力、そして iPhone と Android の同時リリースといったものが挙げられます。
Unity は今後のゲーム開発の鍵となるでしょう。毎日が発見の連続で、Flash をはじめてさわったワクワク感を思い出します。
これからも Unity の情報を載せていきたいと思います。

Unity はじめました。

MobileSocial

モバイルFlashの開発には欠かせないDevice Centralですが、
CS5になってから突然固まって動かなくなる現象が頻発して泣きそうになる事がしばしばありました。
(環境:Flash Professional CS5 / Mac OSX 10.6.4)

フリーズする状況を観察してみると、どうもtraceやfscommandのタイミングで固まってしまう模様。
そこで、出力パネル右上のオプションで表示する情報を削ったら、見事フリーズしなくなりました。
(初期状態では全ての項目にチェックが入っていたように思いますので、
普段使わない項目をとりあえず外せばいいかと)

DeviceCentral TroubleShoot

バージョンを追うごとに機能も充実して益々有用になっているDevice Centralですが、
いかんせんネットに情報が少ないのが泣き所。
こういうトラブルシュート等は日頃使用しているユーザー同士で
共有していければなぁと思う今日この頃です。

Device Central CS5のフリーズ対処法