カテゴリー: Unity

うにのトゲは刺さると痛い(´・ω・`)-21

細かな修正やリファクタリングする箇所は残っているものの、一応、初めに想定していた(そして途中からてんこ盛りに追加してしまった)機能の実装が一通り終わった(`・ω・´) と思う(´・ω・`) でもテストプレイもあんまりやってないんだよなぁ…

細かな修正等が終わったら、カードコンテンツの作成に取り掛かるとする(`・ω・´)
つーか国旗セットの追加情報の追加からせんといけない(´・ω・`)メドイ

Wikipediaからコピペする毎日が始まろうとしている…(ヽ'ω`)


クレジット表示

ちょっと投げやり感は否めないがScrollViewというかScrollRectを使って表示することにした。「Movement Type」を"Unrestricted"にしたが、これって本当に無制限にスクロールするんだなw 

文字が存在しているところだけに移動を制限したいけれども、やり方が解らないのと疲弊してきているので、その辺は今後の課題ということに。本当はもっとフォントカラーとかもいじりたいけど、今はめどい(ヽ'ω`)

Scroll Rect


Dropup(´・ω・`)?

ずっとカード裏画像選択のドロップダウンが候補を下に出してしまい、広告と被るのが嫌でどうにかしたいと考えていた。最悪、画像選択のドロップダウンを移動するか、何とか改造してドロップアップ(?)を作るしかないのかと色々ぐぐっていたら、Dropdown List always expands upward?というページに辿り着く。

英語なので細かいことはよく解らなかったが、自分がやりたいことが簡単に出来るのではないかと気づき、マニュアルを見に行く。詳しいことはよく解らなかったが、なんとなくDropdown配下のTemplateを上に持って行き、実行してクリックしてみると、

ヽ( ・∀・)ノヒャッハー


取り敢えず、二つのギミックというか意地悪なモードを追加したけれども、テストプレイして思った。

なんでもかんでも難しくすればいいもんじゃないな(´・ω・`)

辛いラーメンとかなら、辛ければ辛いほど挑戦者が増えそうなものだが、神経衰弱は難しすぎたらストレス源以外の何物でもなくなるな(´・ω・`)

3枚組・4枚組モードですらやっていて苦痛なのに、更に二つのギミックを併用したら、もうこれは苦行だ…(ヽ'ω`)

本当はもっと難しくしたり、違うギミックも追加出来ないこともないが、これ以上は蛇足どころか、頭を3つに増やして体と翼をつけたキングギドラかドラゴンスピリット状態になってしまうので止めておいた(・∀・)

何はともあれ、やっと次のフェイズに入れる(ヽ'ω`)モウ8ガツカ

うにのトゲは刺さると痛い(´・ω・`)-20

ギミック追加途中でハマリ中(ヽ'ω`)

三枚組・四枚組モードを追加していて、基本的な部分は比較的簡単に実装出来たのだけれども、オーバーレイ表示した時に三枚目のimageコンポーネントの表示位置がおかしい(´・ω・`) でも四枚組の時は問題ない。どっかしらに原因があるのだけれども、それが見つけられなくて先に進めない…(ヽ'ω`) 独自実装のイニシャライズを呼んでいないような気がするんだけど、まだ完全には原因をつかめていない…


致命的問題 1

ちなみにバグではないが実装途中に致命的な問題に気づいた。

48/3=16だからトランプだと3セット足りない_| ̄|○

何の話かと言えば、2枚組の場合(1つの数字につき2枚ではなく4枚(=スート毎)生成している。)と4枚組の場合において48枚モードの時に必要なセット数は48/4=12、つまりはQまであれば賄えるが、48/3=16セットが必要となりKまでだと3セット足らないという状況になる(ヽ'ω`)

当初は3枚組の48枚モードをなくそうと思ったが、最終的には既存の二種のジョーカーを三枚ずつに増やし、もう一枚ジョーカーを作って三枚にし、合計9枚増やすことによって何とかした(ノ∀`) 余り美しい解決方法ではなかったが、取り急ぎこれでいいかな。


致命的問題 2

もう一つバグとかそういうレベルじゃない致命的な問題に気づいた。

三枚組、四枚組モードは難度が上がりすぎる…(ヽ'ω`)

何かに書き留めてやるならまだしも、かなりの記憶力か攻略術を持っていないと全然カードが減っていかないだろう(´;ω;`) 左上から数列的に覚えて行けばトランプの方はある程度攻略できなくもない気がするが、国旗の方になるともうお手上げな気がする∩(´;ω;`)∩ 

こんな神経衰弱、難度が高すぎてやる気なくなるわ、ボケヽ(`Д´)ノ


上の三枚組表示の問題が解決してもポイントとかペナルティ等々の部分を直さないといけない。一律にしていた適当なデフォルトハイスコアの値も変えないといけない。

この辺りを解決して、もう一つのギミックを追加して、クレジット画面の表示(無料素材利用条件)を実装すると、ソフト的には完成する……

が、カードコンテンツの追加で凄い時間がかかりそう…(ヽ'ω`)ハチガツニハリリースシタイ……ケドアツイ

うにのトゲは刺さると痛い(´・ω・`)-19

( ゚Д゚)ハッ

前回のエントリから、もう10日以上経ってた…(ヽ'ω`)
何したんだっけかな…("・ω・゙)
ちょっと前にやってたことと今現在の苦境は解るんだが…えーと……


続・効果音の追加

取り敢えず、ビルトイン音声は用意しないが、固有名の音声ファイルをアプリフォルダ(Application.persistentDataPath)に突っ込んでおくと特定の時にそれらが再生されるようにした。具体的には連続コンボを達成した時に「good」とか「nice」と言わせる為のもの。

著作権的なところがよく解らないのと、テンションが低い発音(つまりは普通の発音)なので同梱しないけど、このサイトでテスト用音声を作成した。
The Shtooka Project

ごっぐるの何とかトゥスピーチは単語音声のみを作成してダウンロード出来るようなものじゃなかったのと、使い方とこれまた著作権的なところがよく解らなかったので利用せんかった(ノ∀`)

まあこの機能はあんまり重要ではないけれども、使い方によっては楽しめるよね、きっと的なもの。アニメや音楽が好きな人なら声優やアーティストの褒め言葉のwavファイルを入れておけば、その人なりの楽しみ方が出来るとは思う。

前回追加したカード裏画像の指定を併用すれば、自分だけの神経衰弱ゲームが出来上がります(`・ω・´) ←別に要らんやろ、そんなん(´・ω・`)

ついでに今回足すかどうかわからないけれども、幼児向けに平仮名の絵合わせみたいなカードセットを追加した場合に、仕事が忙しいとか遠くに住んでいるという両親や祖父母の褒め言葉を入れてプレイさせたりしたら、何か良いことあるかしら、どうかしらと思ったけども、どうだろう(´・ω・`)?

BGMもoggファイルで変えられるようにしたが、よくよく考えてみるとAudioFocusを奪ったりしてないので、他の音楽プレーヤーで音楽再生してもらって、こっちのBGMは切ってもらえばいいだけのことに気づいたのは実装して、実機で試してからだったよ(´・ω・`)ウウン、ナイテナイヨ


Textureの保存

無理やりIMGUIでダイアログを作っていたが、さすがにボタンが増えると負荷が半端ないので、ない場合は作成して保存、ある場合は読み込みという形にしたw やっぱり無理があるわ、色々とw

Texture2Dをpngとしてファイル保存


デストロイヽ(`Д´)ノ

ゲーム画面から「新規ゲーム」を開始出来るようにしたら、挙動が変(´・ω・`)
結果ダイアログやハイスコアダイアログと違って変な状況になる。
新規カードが既存カードの上に配布されるというw

考えてみたら、既存カードを破棄しないといけなかったんだなとまとめてデストロイした。
Unityでタグのついたオブジェクトをまとめて操作する方法

ところが、こちらの想定通りに動かない(´・ω・`)
ぐぐる。
UnityのDestroyは即時反映されないので、DestroyImmediateを使う

なるほどそういうことか。推奨はされていないらしいが、背に腹は代えられないということで、これを使用して一応解決。


追加情報表示

ようやく追加情報表示を実装。ただこの機能自体は大して難しいものではなくどうでもいいのだが、表示する情報を追加する作業が苦行(ヽ'ω`)

幾つかの世界地図の無料素材サイトを巡ったが、本当に欲しいタイプの画像がなかった……

それでも比較的近い形の素材を配布しているサイトを発見(`・ω・´)
http://www.abysse.co.jp/world/map/country/index.html

でもそこから素材をもらってくる作業が大変_| ̄|○
更にそれを加工する作業が大変。
加えてこのサイトではオセアニアの島国家(英連邦系?)の地図がなかった。これらの国家と台湾やパレスチナ自治政府やガンデンポタンやバチカン市国用の地図を無理くり作るのが大変だった…(ヽ'ω`) 

特に遠く離れた島国家やガンデンポタンの現在位置やバチカン市国は既存地図に点を打つだけだったので、凄く苦労した。正しい位置に打てたかどうかは不明(´・ω・`)

何にしてもいずれは望み通りの画像を作成して差し替えたい…

テキストの方に関してはWikipediaのテキストを持って来て、文字数等を調整する形にする予定。(dbの先頭にあったアフガニスタンの日本語表示のみ、お試しとして入れてみた。)

ちなみにこの作業で3日間近く潰れた…
テキストの取得や改変を考えると……( ;・´ω・`)ゴクリッ

まあこの部分は肝と言えば肝なので、時間がかかるのは致し方ないか…


ついにギミック追加作業へ

カードの表示部分の操作をカードマネージャーから個別のカードセット固有のCardFrameオブジェクトで行う形に大改造する。これでカードセットによって表示する内容を自由に変えられる(`・ω・´) ←但し、それによってカードセットの作成が大変になることを忘れてはならない。まあ、ある程度作ったら、後はそのパターンをコピーして改変するだけでよくなるんだろうけれども

ここに来てようやっとゲーム的ギミックの追加に入る。
これは大したギミックではないが内緒(・∀・)

だがしかし実装は苦行(ヽ'ω`)

今までいい加減に実装していた部分にメスを入れて直さなければならない為、非常に辛い……当初はGameSceneをコピーしてそれぞれのモード用を作るかと思っていたが、現時点で70MBオーバーになっていることを踏まえると、出来うる限りSceneは増やしたくない… 

まあSceneを増やしても、騒ぐほど容量を食うわけではないのだろうけれども。管理が面倒くさくなりそうな気もするので同一GameSceneで行くことに。挫折したら、そっちに方向転換するけどもw


作業自体も辛いけど、何よりも辛いのは、

暑い( ´・ω・`;)ことだ。

うにのトゲは刺さると痛い(´・ω・`)-18

暑い( ´・ω・`;)

取り敢えず残りの実装すべきアプリ関連の機能の設定用トグルなどを追加した。普通の人には大したことではないが、"設定画面を作成したりしてると死にたくなる病"の俺氏にとっては命に関わる難作業であった( ・´ω・`)アブナイトコロダッタ

後はその機能の実装だけなので気は楽だヽ( ・∀・)ノ
とかいいつつ地獄を見るのがいつものパティーン(´・ω・`)


ハイスコア表示

ハイスコア表示はまあ、取り敢えずこんなんでいいや的代物に(・∀・)
配色がなぁ……まあいいか。

こないだはDateTimeOffset型を使わないと駄目かなと思っていたが、よくよく読んでみると必要がないことがわかったw あれはUTCが必要な時に使うべきものか(ノ∀`)


カードの自動戻し

二枚カードをめくってマッチ時にのみ停止して画面タップされるまで表示し続けるか自動消滅するかの設定を用意していたのだけれども、NG時も停止出来るようにした。これはまあ、カード内容を覚えたい人向け……というか自分でやっていてもNG時にカード内容を読みたいなぁと思ったから、急遽追加した(ノ∀`)


ユーザー指定画像ファイルの使用

これは前々から実装を考えていたもので、以前に作っていたものの完成させられなかったAndroid用音楽プレーヤー(余裕が出来たら完成させたいが)でやろうとしていたこと。自分で良いデザインが産み出せないなら、ユーザーに丸投げすればいいじゃない的いい加減さを実現(`・ω・´)ナオジッソウハチョットメンドウダッタ

100x150の固有名を持つファイルをApplication.persistentDataPathのところにぶちこんで、このオプションをONにすると他の設定を無視してそのファイルをカード裏として読み込む。(※尚、この猫画像はGoogle+の猫サークルかなんかで拾ったものだったかしら(´・ω・`)?)

100x150ぴったりだと四角のカードになってしまい、ビジュアル的におかしくなるので実際に使用するには

に画像を貼り付けたモノを用意しないといけない。プログラム的に生成することも出来なくはない気はするが、今はそんなに余力がないのでいずれするとしよう。ついでにファイルパス指定で読み込めるようにもしたいなぁ。

以下のページを参考にしてニコイチにした。と思ったが、正確には前回参考にしたJson読み込みのコードをベースにしているのでサンコイチか(ノ∀`)
ファイルパスから画像を読み込み、Texture2Dを作って、それをSpriteにするだけ。
参考:
【Unity】pngファイルを読み込み同サイズのTexture2Dを生成する
Texture2DからSpriteを作成する


Sprite sprite = GetSpriteFromFolder(Application.persistentDataPath + "/usf01.png");

            }
            Sprite GetSpriteFromFolder(String filePath)
    {
        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            using (BinaryReader br = new BinaryReader(fs))
            {
                byte[] values = br.ReadBytes((int)br.BaseStream.Length);

                Texture2D texture = new Texture2D(100, 150);
                texture.LoadImage(values);

                return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
            }
        }
    }

ユーザー指定音楽ファイルの使用

ついでに効果音も読み込めるようにした(`・ω・´)

外部からだとmp3は読み込めないのね(´・ω・`)
なんかライセンスの絡みだとかあったけど、mp3のライセンスって去年の5月くらいに消滅してるみたいなんだよね。他の違うライセンスの問題? 或るいはUnityのフリー版だけ駄目とか?

まあ何はともあれ以下のページを参考にしてwavファイルを読み込むようにした。

参考:
[Unity] Unity×音についてざっくりまとめ
Unityで外部音楽ファイルを読み込む
WWW.GetAudioClip

エディター上(Windows上?)では「file:///」じゃないと読み込みが出来ないらしいけど、Androidは「file:///」でも読み込めるので、「file:///」一本槍にしてしまっているが、いいのであろうか(´・ω・`)?

ユーザー指定の効果音ファイルがない場合はデフォルトの効果音を使いたいのでこんな形にした。

AudioClip LoadWavFile(string fileName,AudioClip defaultClip)
    {
        if (File.Exists(Application.persistentDataPath + "/" + fileName))
        {
            return GetAudioClip("file:///" + Application.persistentDataPath + "/" + fileName);
        }

        return defaultClip;
    }
    AudioClip GetAudioClip(string filePath)
    {
        using (WWW www = new WWW(filePath)) {
            while (!www.isDone) { }
            return www.GetAudioClip(false, false,AudioType.WAV);
        }       
    }

効果音系をもうちょい触って、ローカライズファイルを読み込めるようにして……あとは追加表示とゲームのギミックを二つ程追加すれば外殻は完成なんだけども、ギミック部分の実装にどれだけかかるかだなぁ……

それが終わったら、ようやくカードセットの追加にかかれるのだけれども。