ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

プロジェクト14

完成

プロジェクトをビルドして、Unityのエディター上からではなく、単体で実行できるようにして、一応の完成。 作成したのは、壁打ちテニスゲームというか、ブロックの無いブロック崩し。ユニティちゃんを左右に動かして、移動するウニを打ち返すというもの。Pon…

指定した時間後にメソッドを呼び出す Invoke

MonoBehaviour.Invoke - Unity スクリプトリファレンス 一定時間後にある処理を実行したいというような場合にはInvokeが利用できる。 Invokeは実行するメソッド名と何秒後に実行するかの秒数を設定して呼ぶと、その指定した秒後にメソッドを呼び出すことがで…

SendMessage

GameObject.SendMessage - Unity スクリプトリファレンス オブジェクトのメソッドはSendMessage()で呼び出すことができる。引数はメソッド名の文字列。第2引数はそのメソッドに渡す値。 var gameMgr = GameObject.Find("GameMgr"); gameMgr.SendMessage("Add…

BGMの停止

ループで鳴っているBGMを指定するためにAudioSourceのStop()を呼んだのだが、すぐに停止せずに曲の終わりまで鳴ってから止まる。停止というよりもループさせないという感じ。 何故だろうと思いながら、何回かテストしていたら、最初の1回目だけ音が大きい気…

コルーチン

コルーチン - Unity マニュアル 指定した関数内の途中で抜けて、再開するときは続きから実行できるというもの。 たとえば最初の1回目は初期化処理を行い、あと毎フレーム実行するというものが、フラグ判定等をしなくても簡単に書くことができる。 void Start…

SEを付ける

タイトル画面でスタートボタンを押したときにSEを鳴らすようにした。 まずボタンのオブジェクトにSEのAudio Sourceをドラッグアンドドロップして、コンポーネントを登録。 ボタンが押されたときに、コンポーネントのPlay()を呼びSEを鳴らす。 public void On…

選択したオブジェクトにズーム

BGMを付けたときにシーンビューのカメラが移動してしまったのか、ステージやキャラクターが見えなくなってしまった。 こういうときは選択したオブジェクトにズームするショートカットFを使えば良い。大文字のFなので、シフトキーを押しながらfキーとなる。 …

BGMを付ける

タイトル画面とゲーム中にBGMを鳴らせるように設定した。 サウンドデータはユニティちゃんの素材にあったものを利用した。 プロジェクトビューにあるBGMをシーンビューにドラッグアンドドロップするだけで、そのシーンが始まったらBGMが流れるようになる。非…

一通り実装が終わったと思ったが、音関連をまったく入れていないことに気が付いた。 BGMとメニューを選択したときやコリジョンにヒットしたときのSEなどを実装しなくては。 サウンドはフリー素材から良さそうなものを選んでこよう。

ビルド

今まではUnityのエディター上で実行していたが、ほぼ必要なものは実装終わったので、実行ファイルを作成した。 実行ファイルはFileメニューのBuild Settingを選び、シーンを選択し、上から実行する順番に並べ、Buildボタンを押せば作成できる。 もちろん、Wi…

ゲーム再開

ゲームオーバーからタイトル画面へと戻り、再びゲーム再開する部分を実装。 ゲームを再び始めようとしたらすぐにゲームオーバーになってしまうというバグが。ゲームオーバー判定のフラグをクリアするのを忘れていた。

コンソール画面

ゲームオーバー画面からタイトル画面へ戻る処理を追加。 ゲームオーバーのシーンから実行すると動作しなくてなぜか思ったら、タイトルのシーンで作っているオブジェクトへのアクセスがあり、それが作られていないのでエラーとなっていた。 ただ、コンソール…

スコア表示

ゲームオーバー画面の作成中。スコア表示を追加。 UIのTextをスクリプトで書き換えることで実装。 複数のシーンを切り替えながら実装していると、いまどのシーンの編集中かわからなくなってしまうことがある。とりあえずという感じで適当にButtonとか同じよ…

ゲームオーバー画面

ゲームオーバー画面を作成。 タイトル画面とほぼ同じような作りでいくので、新規でシーンを作成するのではなく、タイトルのシーンをゲームオーバーとして別名保存して利用。 ゲームオーバーの条件を満たしたときにLoadLevel()でゲームオーバーのシーンを呼び…

ゲーム全体で共有するデータの管理

ゲーム全体で保持するデータを管理するためのオブジェクトを作成。 DontDestroyOnLoad()を呼ぶことにより、シーンを切り替えてもオブジェクトが破棄されなくなる。 実際に実装してみたのは次のような感じ。 DataMgrというGameObjectを作成して、ゲームで最初…

次のシーンに値を渡す

シーン切り替えをしたときに前のシーンの変数の値を受け取るには、変数をpublic staticで定義しておくと簡単にできる。 // 前のシーン public class Title : MonoBehaviour { public static int value = 123; } // 今のシーン public class Main : MonoBehav…

シーンの切り替え LoadLevel

シーンを切り替えるにはLoadLevel()を使う。 Application.LoadLevel("シーン名"); 今自分が作っているものは非常にシンプルなので、シーンの切り替えは一瞬で終わった。もし、大量のアセットがあるような場合は切り替えに時間がかかるのだろうか。だとすると…

ボタンを押したときの処理

シーンに登録したUIのButtonを押したときに行いたい処理が書かれたスクリプトを作成し、Buttonにドラッグアンドドロップして追加。 ButtonのInspectorにあるOn Click()のところの+を押してイベントを追加。 None(Object)をクリックして、このButtonを選択。…

Button

UIのボタンを実装した。 メニューのGameObject→UIにあるButtonを選択。するとCanvasの子供としてButtonができる。 ButtonのテキストはButtonの子供にTextがあるので、そこで変更する。

バージョンアップ

また間が空いてしまったが再開。 Unityのバージョンが上がっていたので最新版をインストール。 プロジェクトファイルを開こうとしたらバージョン違いのワーニングが出た。そのまま開いて最新版へとコンバートされたが、とくに問題はなく実行することが出来た…

Canvas

ちょっと間が空いてしまったが、また再開。 まずはUnity 4.6から導入された新しいUIを使ってみることにする。 Canvasというゲームオブジェクトを作成し、そこにいろいろと配置していくことでUIを作っていく。 とりあえず、Textを配置して文字を表示した。た…

ボタン

UnityでメニューのボタンはGUI.Button()で表示することができる。 GUI.Button ユーザーがボタンを押したときにtrueを返すようになっている。 void OnGUI() { if (GUI.Button(new Rect(100,100,100,20), "Button") ) { // ボタンがされたときの処理 } }

OnGUI, GUI.Label

Unityでは画面上のテキストやボタンなどのGUIはOnGUI()内に記述する。 OnGUI とりあえず、ゲームオーバーの文字列をGUI.Labelを使って表示してみた。 GUI.Label GUI.Label(new Rect(0, 0, 100, 20), "Game Over"); 文字列のサイズとかフォントは引数で渡すGU…

ミス判定

ミスの判定を座標から求めようと考えていたが、コリジョンが使えることを思い出し、そちらで実装してみた。 座標で設定した場合はコードを数値で変更する必要があるが、コリジョンならばシーンを見ながらマウスで位置を調整できるので、こちらのほうが今後の…

Edge Collider 2D

Edge Collider 2D - Unity マニュアル キャラのコリジョンをBox Cllider 2Dで行っていたのだが、このままではちょっと問題が出てきたので、Edge Collider 2Dに変更。必要最低限のところだけのコリジョンとした。 形状をマウスで編集するとInspectorには頂点…

OnTrigger

オブジェクトがぶつかった時の反発が期待した通りの動きにならなかったので、トリガーを使って自分で処理することにした。 ColliderのIs Triggerにチェックを入れれば、衝突したときにイベントが発生するようになる。 OnTriggerEnter2D 接触したときに発生す…

反発

projectビューのCreateを選択し、Physics2D Materialを作成。このPhysics2D Materialで反発や摩擦の調整ができる。 Physics Material 2D - Unity マニュアル 作成したPhysics2D MaterialをオブジェクトのColliderのMaterialへと設定すれば、そのオブジェクト…

衝突

当たり判定のColliderをつけておけばオブジェクト同士が衝突したときに反発しあうようになる。 純粋に衝突したということだけ判定したいときは、Is Triggerにチェックを入れれば衝突したときにイベントを発生させるトリガーのみとなる。 オブジェクト同士が…

Collider

当たり判定にはCollider(コライダー)を使う。 InspectorのAdd Componentを選び、Physics 2D内に様々なColliderが用意されている。 ・Box Collider 2D 矩形の当たり判定 ・Circle Collider 2D 円の当たり判定 ・Edge Collider 2D 線の当たり判定 ・Polygon Co…

コリジョン

キャラクターにコリジョンを付け始めた。が色々種類があってよく分からない。 あと物理でぶつかったら反射するようにもしたいのだけれども。