トップ

ようこそ

ぴおが製作したゲームとか置いてます。


制作物
微塵に砕かれるテンシちゃん


ソードマスターテンシ

初東方二次創作。
ソードマスターのテンシが仇なす敵を微塵に砕く、
テイルズ風ソードアクション。


最近のこと



戦闘ヘリMOD
戦闘ヘリMOD1.4.6対応版つくりました。


東方Project・攻略ブログ
FC2 Management

[Unity][Android]XperiaAでBuild&Run

UnityAndroid


割と詰まったのでメモ。

Unityを触る前に、AndroidSDKは予めインストールしてあったので、
AndroidSDKのインストールは省略。

・Unityの設定

メニューバーから
Edit→Preference

UnityAndroid01.jpg


で、出てきたウィンドウの左側のメニューから「External Tools」を選択。

「AndroidSDKLocation」に、自分のAndroidSDKのディレクトリを指定する。


Preferenceウィンドウを閉じて、もう一回メニューバーから

File→Built Settings

UnityAndroid02.jpg


で、出てきたウィンドウの左下のメニューに「Android」があるので選択し、
Switch Platformボタンを押す。

これで、BuildするとAndroid用のゲームファイルを生成するようになる。

で、その生成するゲームファイルの設定をする。

もう一回メニューバーから
File→Built Settings

UnityAndroid03.jpg

Player Settings...ボタンを押すと、Inspectorパネルに設定項目が現れる。
(割と気づきにくい)

設定しなくても実行出来る項目は多いけど、「Bundle Identifier」だけは自分で設定する必要があるっぽい(何もしないとビルド時にエラー)

ここで一旦、保存して、Unityを再起動。

メニューバーから
File→Built Settings

「Build & Run」ボタンを押すと、apkファイルの名前を決めるダイアログが出るので、適当に決めて、ビルド開始。

Android側との接続がうまく行っていれば、めでたくAndroidで作ったゲームが実行される。

・Androidの設定

もちろん最初はAndroid側の設定を行う必要がある。

・セキュリティにある「提供元不明のアプリのインストール」をチェック
・開発者向けオプションにある「USBデバッグ」にチェック
・ADBドライバを入れる(XperiaだとPC Companionのインストールがこれです)

基本はこの3つで、おいらが使ってる「Xperia A」(SO-04E)の場合の手順を紹介。

まず各種オプションからの設定。

UnityAndroid04.jpg

セキュリティから「提供元不明のアプリ」にチェック。

UnityAndroid05.jpg

開発者向けオプションから「USBデバッグ」をチェック。
開発者向けオプションの出し方はググろう。

UnityAndroid06.jpg

Xperia™→USB接続設定→PC Companionのインストール にチェック(既にPC Companionがインストールされているなら外してもOK)

USB接続モードは、Unityからゲームを実行するときは「MSC」。

これらの設定を行ったあと、PCとUSB接続します。
すると、Xperia側の画面にPC Companionをインストールするかのダイアログが出るので、インストールを選びます。
今度はPC側で「コンピュータ」を開いて、PC Companionのインストーラーを実行して、インストールを進めます。

ここで、なぜ「PC Companion」が必要なのかというと、このPC Companionこそが、XperiaのADBドライバなのです。

別の方法も探しましたが、この方法が一番確実だと思います。PCに常駐ソフトが増える以外は。

PC CompanionやUSB経由のXperiaのデバイスのインストールが完了したら、Xperia側の設定は終了です。Unityから「Build&Run」を実行してみましょう。

・詰まった所

!XperiaのADBドライバってどこにあるのか

手動でドライバインストールする方法を紹介しているサイトもありましたが、失敗して、結局PC Companionに落ち着きました。

!Player Settings...ボタンを押しても何も起こらない

Inspectorパネルに設定画面が出る。

・参考サイト

【Unity無償化】Unityインストールから実機で実行するところまでやってみた。
http://naichilab.blogspot.jp/2013/05/unityunity.html

Unity3D で作ったゲームを Android で動かす。
http://loumo.jp/wp/archive/20121210085729/

Xperia Z用のADBドライバをインストールする方法3選
http://www.teradas.net/archives/9931/

[Unity]はじめてのUnity[メダルゲームっぽいの]

Unity初めて2日目の段階の備忘録。

【Unity無償化】Unityインストールから実機で実行するところまでやってみた。
http://naichilab.blogspot.jp/2013/05/unityunity.html


Unityで超入門3Dゲームを作ってみる
https://lab.sonicmoov.com/development/unity-for-beginner/


この二つのサイトを見ながら、とりあえず、「一枚のコインをプッシャーに出現させる」ところまでは完了。


次にコインを沢山出したいので、「Prefab」という機能を調べる。

オブジェクトの複製方法 プレハブについて
http://unity3d-study.seesaa.net/article/281166732.html


Projectパネルのところに、Hierarchyパネル内のオブジェクトをドラッグアンドドロップするだけでプレハブ化するらしい。はぇーすっごい簡単…。

プレハブ(Prefab)になったコインを逆にHierarchyパネルにドラッグアンドドロップすると、同じ物が沢山作られる。

UnityCoin01.jpg
なんか写り込んじゃってるけどキニシナイ

手動でジャラジャラ出来るようになったので、今度はプログラム側(スクリプト側のほうが正しいのかな)から自動でジャラジャラ出来るようにする。

サイトの手順とほぼ同じく、

Create Empty(BlockSpawn) → スクリプト作成 → BlockSpawnオブジェクトにスクリプト適用 → スクリプトの変数にコイン適用

でジャラジャラしだしました。

UnityCoin02.jpg


沢山コインが出ますが、動きがないので、生成する向きとかを変える。

Overview: 時間との同期(Keeping Track of Time)
http://ws.cis.sojo-u.ac.jp/~izumi/Unity_Documentation_jp/Documentation/ScriptReference/index.Keeping_Track_of_Time.html


コインの向きは、BlockSpawnの角度を使ってるので、BlockSpawnの角度を乱数で変えて対応。
ついでに生成する数も一度に3つにしてみた。

UnityCoin03.jpg


いい感じ。

スクショの状態でFPSは一桁ぐらいに重くなってるので、
ちゃんとメダルゲームを作る場合はうまく工夫しないと作れなさそう。

・詰まったところ

!JavaScriptでVector3型の変数を宣言したい

var vec3 : Vector3 = Vector3( 0, 0, 0 );

こんな感じ。

Vector3 vec3;

こういうのは普通にアウト。
Cとか普段使ってると馴染みのない書き方。

!Build&Run時に、スマホ(SO-04A)を認識してくれない

ADBドライバーが入ってなかったことが原因だったですが、
そのADBドライバーの入れ方が、「XperiaのPCCompanionというソフトを入れる」という。

他の機種は、ダウンロードサイトから~~などだったので、こっちもそうかな~と別の方法を試してたりしたんですが、全くうまく行かず、泣く泣く別にADBドライバー以外は全く使わなそうなソフトをインストールして解決しました。

あとBuild&Runする時、スマホ側は「USBデバッグ」を有効にし「MSC」モードに切り替えます。

Eq5Ej.png


・参考サイト
Unity: 結局、Prefabってなんなのよ、という人のための解説
http://hamken100.blogspot.jp/2012/06/unity-prefab.html


Unityでゲーム開発 -JavaScriptの基本-
http://yun.cup.com/unity002.html

[Sublime3]シャレオツテキストエディタくん備忘録

今回、友達が導入したと言っていた「Sublime」を、おいらも入れてみることに。

Sublime公式サイト

SublimeToppage.jpg

かっこいいテキスト編集の様子がトップページを飾ります。

バージョンは2と3がありますが、おいらは3の導入をしました。

Sublime3ダウンロードページ

ダウンロードページから、自分のOS(この時はWin8.1だったので、「Windows 64 bits」)にあったファイルをダウンロード。
インストーラーはめんどくさかったので、「Portable」を選択してzipファイルをダウンロードしました。

解凍して、Sublimeを起動。

チュートリアルサイトにしたがって、「Package Control」を導入。

https://sublime.wbond.net/installation

SublimePackageCIns.jpg

この画像の赤枠内のテキストをコピーします。

メニューバーから「View → Show Console」でコンソールを出して、コピーしたテキストをコンソールに入力。

後は自動で「Package Control」がインストールされます。


その後、このPackageControlを使って、日本語化プラグイン数種類とその他ユーティリティ的なのを入れて、おいらのSublimeデビューは終了です。


・導入に際して、つまづいたところ

!日本語化の時、C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\Japanizeフォルダが無い

Roamingフォルダ内に、Sublimeのフォルダも無く、「あれあれ?」となりました。

どうやら、Portable版をダウンロードして導入した場合、こうなるらしいです。

Portable版の場合は Sublime Text /Data/Packages内にJapanizeフォルダがあるので、このPackagesフォルダにDefaultフォルダを作ったりしていきます。Userフォルダもここにあります。

SublimePackageDir.jpg


!元々あったファイルを開いたら、日本語が文字化けした

(2014/04/09現在)SublimeはShift-JISに対応していないので、Shift-JISで保存していたファイルは、Sublimeで開くと文字化けします。

なので、「ConvertToUTF8」プラグインを入れて、Shift-JISに対応させます。こういうカスタマイズ出来るところがシャレオツです。

seanliang/ConvertToUTF8

「Package Control: Install Package」からもインストール出来ます。

!日本語入力がしづらい

SublimeIME.jpg

初期状態だと別窓が開いて、とても日本語入力しづらいです。

なので、これも「IMESupport」プラグインを入れて解決します。

chikatoike/IMESupport

「Package Control: Install Package」からもインストール出来ます。

・参考サイト
“Sublime Text 3”が使いやすい!初心者でも簡単な“Sublime Text”の設定方法
http://luna-plate.com/archives/4637#prettyPhoto

【備忘録】portable版のsublime text3を日本語化する
http://dragon-ark.com/archives/733

Sublime Text 2をShift_JISに対応させるプラグインがあると聞いて
http://re-dzine.net/2012/10/sublime-text-2-shift-jis/

DirectX9.0備忘録(日本語描画編)

DirectX9.0環境で日本語の描画の実装について。

その67 改・高速フォント文字
http://marupeke296.com/DXG_No67_NewFont.html


その67 改・高速フォント描画:サンプルプログラム
http://marupeke296.com/DXGSmp_No67_NewFont.html


フォントを用いた描画に関しては、既にこちらのサイトにしっかり書かれているので、
ここでは「このサイトを使って、自分のゲーム用のライブラリにどう起こしたか」を中心にメモしておきます。

作業の予定

いきなりクラス化するのは考える事が多すぎるので、とりあえずサンプルをコピーし、フォント描画の部分だけ取り出す。

フォント描画の部分を切ったり貼ったりして、自由な文字列を描画できる関数を作ってみる。

描画関数の引数などから、クラス設計を考える。

実際のゲームプロジェクトで、設計を元にクラス化する。


実作業ログ

サンプル用の新規プロジェクト作成。DirectX用のディレクトリ設定を毎回やるのは面倒なので「DXSandBox」と命名し、今後はこのプロジェクトでDirectX関係のサンプルを動かしたいと思う。

サンプルをコピペして、動作確認。特に問題はなかった。

サンプルは1文字の描画なので、どうすれば2文字以上描画出来るか調べる。

とりあえず描画に必要な情報を構造体にまとめてみる。

文字コードから、その構造体に描画情報をセットする関数を作る。

構造体で複数文字対応

DX文字列1

生成した文字画像とその設定を保持するFontCharacterクラス、
フォントの設定と、そのフォントで生成したFontCharacterを保持するFontクラスを作り、
FontクラスのDraw関数を呼ぶと文字列が描画されるようにした。

Font MSGothic;
MSGothic.Init( "MS ゴシック", 26, FW_BOLD );

MSGothic.Draw( X, Y, "テキスト" );


FontCharacterは、文字コードをキーにして、std::mapで管理。添字アクセス出来ないけど、検索速いからヘーキヘーキ!

DX文字列2


とりあえず文字列は描画できました。

あとは、色を変えたり、枠線つけたり、文字送りとか実装できたら完璧。


・悩んだ所

!どう関数を分けるか

各種処理の繋がりが分からないので、関数の分け方が悩ましい。

この場合は処理の分け方を考えるより、作りたい関数を決めて、その関数に合わせて処理を分けることで作業が、スムーズになった。

ただ正しい処理の順番にならないことがあるかもしれないので、その時はリファクタリングが必要になるかも。

!フォントテクスチャの管理方法

とりあえず、同じ文字の生成はしたくないので、std::mapを使って、文字コードをキーにして、テクスチャを持っているFontCharacterオブジェクトを保持しました。

std::map< UINT, FontCharacter * > m_FontCharacters;

void Font::CreateCharacter( HDC hDc, UINT nChara ) //文字作成
{
// ----- 文字追加 -----
std::map< UINT, FontCharacter * >::_Pairib p = m_FontCharacters.insert( std::map< UINT, FontCharacter * >::value_type( nChara, (FontCharacter*)NULL ) );
if( p.second )
{ //新しい文字を作る
p.first->second = new FontCharacter( hDc, nChara ); //生成
}
}


FontCharacter *Font::GetFontCharacter( UINT nChara ) //文字取得
{
std::map< UINT, FontCharacter * >::iterator it;
it = m_FontCharacters.find( nChara ); //検索
if( it != m_FontCharacters.end() )
{ //名前があった
return it->second;
}
else
{ //なかった
return 0;
}
}


ただ、一文字一文字で管理してるので、かなり効率が悪そうです。
その辺の管理のうまい方法を模索するか、ID3DXFont使うか…。

!Font.hでFontCharacter.hをインクルードしているのに、「FontCharacterがありません」というビルドエラーが出る。

FontCharacte.hのインクルード文と、Font.hで、両方のヘッダを読み込んでいるコモン的なヘッダをインクルードしていたので、FontCharacter.hのインクルード文を必要なものだけにしたら直った。

!FontCharacterのinline指定した関数が呼び出せない

inlineを消せば直った。

inlineにするとリンクできなくなる
http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/6c754499-f4c2-4fbd-baba-f6c063be229b/inline?forum=vcgeneralja


どうやら、inline指定した関数は、その.cppでしか呼び出せないらしい。

ヘッダにいろいろ書くのはイヤだけど、

class FontCharacter
{
public:

// ----- コンストラクタ・デストラクタ -----
FontCharacter( HDC Hdc, UINT nChara );
~FontCharacter();

int GetNextOffset( void ){ return m_Glyphmetrics.gmCellIncX; } //次の文字をどこから始めるか

IDirect3DTexture9 *GetTexture( void ){ return m_pTex; } //テクスチャ
IDirect3DVertexBuffer9 *GetVertexBuffer( void ){ return m_pVertexBuffer; } //頂点バッファ
D3DXMATRIX *GetLocalMat( void ){ return &m_LocalMat; } //行列

private:

UINT m_nChara; //文字コード

TEXTMETRIC m_TextMetric; //文字情報
GLYPHMETRICS m_Glyphmetrics; //文字配置情報

IDirect3DTexture9 *m_pTex; //テクスチャ
IDirect3DVertexBuffer9 *m_pVertexBuffer; //頂点バッファ
D3DXMATRIX m_LocalMat; //行列

};


こんな感じにして、解決。

テーマ : プログラミング
ジャンル : コンピュータ

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
プロフィール

ぴお

Author:ぴお
ようこそ

自分のゲーム制作での備忘録や製作記録を書き留めておくブログです。

■やってるサービス
Twitter:piorimu

Pixiv
http://www.pixiv.net/member.php?id=1126385

Twitter
オススメ
このページのトップへ