ゲーム中にスマホをブルっとバイブさせよう

この記事の要旨

iOS/Androidのそれぞれで、スマホをバイブさせる実装を行う。

参考記事

基本的に以下のQiitaを読めばわかる人にはわかるんだと思います。なので、ド初心者の自分が詰まったところを中心に紹介。 https://qiita.com/mrhdms/items/3201baf851a91875fa29
Unityでモバイル端末のバイブレーションをコントロールする

iOS向けの実装

上記をC#で記述し、バイブさせたいタイミングでPlaySystemSound(int)を呼びます。intに渡す引数は、参考記事内の先にある下記をご覧ください。あと私は引っかかったのですが、名前空間に下記の追加を忘れないでください。ビルドエラーになります。
さて、”.mm”ファイルってなんですか?作り方も分からないので強行です。Unity上で.csファイルを作成し、Finder上から無理やり拡張子を.mmに書き換えました。
するとこのファイルをXCodeで編集できるようになったので、上記のコードをコピペし、UnityプロジェクトのAssets>Plugins>iOSに、適当な名前を付けて保存しておきます。
以上でiOSの方はおしまいです。実機にビルドしてみれば、呼び出しのタイミングでスマホがぶるっと震えることを確認できました。

Android向けの実装

AndroidはiOSに比べるとシンプルです。 上記をC#で記述し、実行したいタイミングでVibrate(long)を呼び出してください。また、この記述を行うクラスはクラス自体もstaticを付与し、monobehaviorの継承をしてはいけないっぽいです。そこでハマりました。UnityプロジェクトのAssets>Plugins>Androidに、適当な名前を付けて保存しておきます。 こちらも実機にビルドして、ぶるっと震えることを確認しましょう。
おわり!

EasySave3でローカルハイスコア機能を作ろう

この記事の要旨

定番アセット”EasySave3″を使って、シンプルなハイスコアの記録と表示の機能を作る。記録や読み込みのタイミングは”Arbor3″でのステート管理を利用。

概観

下記の3つのクラスで実装しました。
  • ScoreManager.cs
    • 一回のプレイのスコアを記録するクラス
  • HighScoreManager.cs
    • 上記のスコアを、保存されているハイスコアと比較し、必要なら上書きして保存するクラス
  • HighScoreDescriber.cs
    • 保存されたハイスコアをUI上に表示するクラス

一回のプレイのスコアを記録する

みなさん各自のゲームで実装されていると思うので参考程度に。
HighScoreDescriberクラスをStart()でなく独自のタイミングでGetComponentでキャッシュしているのは、HighScoreDescriberクラスを付与したオブジェクトがPrefab化されており、リザルト画面へ遷移したタイミングで生成されるようにしているためです。
生成後のタイミングでRefreshLevel1HighScore()をArborのSendEventGameObjectを使って呼んでいます。
RefreshLevel1HighScore()では、後述する「ハイスコアの更新確認」「UIへの反映」も合わせて呼んでおり、このメソッドがハイスコア周りの処理の根っこになっています。

結果のスコアを、保存されているハイスコアと比較

とりあえず10個までをハイスコアとして保存するようにList<int>を作成し、デフォルトのスコアデータも入れておきます。
Loadメソッドでは、EasySave3に用意されているES3.Loadメソッドを用いて保存されているハイスコアをロードしています。
CheckLevel1HighScoreメソッドに、結果スコアを引数として渡します。
まずは、FindIndexを用いて、ロードされたハイスコアの中から”結果スコアより大きい値のうち最小値が格納されているインデックス”を探します。
それが存在すれば=ハイスコアにランクインしていれば、Insertで結果スコアを挿入し、はみ出た末尾の要素を削除後、上書きでSaveメソッドを実行します。

存在しなければ例外処理の方に進み、保存されているハイスコアには手を入れずそのまま値を返します。(一応Saveを入れてますがいらなかったかも)

Saveメソッドの中ではEasySave3に用意されているES3.Saveメソッドを用いて、”level1″という名前のキーにハイスコアを保存しています。

保存したハイスコアをUI上で表示

10個のハイスコアを保存してあるものの、レイアウトめんどくさい3個表示しておけば十分という判断をしました。
DescribeHighScoreメソッドで、渡されたハイスコアを頭から3つ、スコア表示用のオブジェクトに放り込んでいます。

できたのがこちら

1回目のプレイ結果である「21」というスコアが、2回目のプレイの結果時にも残っていることがわかります。

参考記事

DoozyUIとArborで開発しやすくリッチなUIを作ろう

この記事の要旨

DoozyUIで作ったイケてるアニメーションのUIボタンの挙動を、Arborで制御して、画面遷移をラクに作ろう!

DoozyUIの操作

DoozyUI自体の最初のイントロダクションは、下記Qiitaが参考になります。
https://qiita.com/da-1/items/36fa311c09d3bbe9fdc0
DoozyUIを触ってみた
というかこの記事に書かれてるママですね、ボタンを作って、好きなアニメーションをつけましょう。 ボタンを作ったらPrefabにして、Arborの操作にうつります。

Arborの操作

UIButtonTransitionに、生成したボタンのインスタンスを演算ノード経由で渡してあげれば、そのボタンを押した時に遷移する先を制御できます。こんな感じ。かんたーん。
終わり!