プロジェクト14
プロジェクトをビルドして、Unityのエディター上からではなく、単体で実行できるようにして、一応の完成。 作成したのは、壁打ちテニスゲームというか、ブロックの無いブロック崩し。ユニティちゃんを左右に動かして、移動するウニを打ち返すというもの。Pon…
MonoBehaviour.Invoke - Unity スクリプトリファレンス 一定時間後にある処理を実行したいというような場合にはInvokeが利用できる。 Invokeは実行するメソッド名と何秒後に実行するかの秒数を設定して呼ぶと、その指定した秒後にメソッドを呼び出すことがで…
GameObject.SendMessage - Unity スクリプトリファレンス オブジェクトのメソッドはSendMessage()で呼び出すことができる。引数はメソッド名の文字列。第2引数はそのメソッドに渡す値。 var gameMgr = GameObject.Find("GameMgr"); gameMgr.SendMessage("Add…
ループで鳴っているBGMを指定するためにAudioSourceのStop()を呼んだのだが、すぐに停止せずに曲の終わりまで鳴ってから止まる。停止というよりもループさせないという感じ。 何故だろうと思いながら、何回かテストしていたら、最初の1回目だけ音が大きい気…
コルーチン - Unity マニュアル 指定した関数内の途中で抜けて、再開するときは続きから実行できるというもの。 たとえば最初の1回目は初期化処理を行い、あと毎フレーム実行するというものが、フラグ判定等をしなくても簡単に書くことができる。 void Start…
タイトル画面でスタートボタンを押したときにSEを鳴らすようにした。 まずボタンのオブジェクトにSEのAudio Sourceをドラッグアンドドロップして、コンポーネントを登録。 ボタンが押されたときに、コンポーネントのPlay()を呼びSEを鳴らす。 public void On…
BGMを付けたときにシーンビューのカメラが移動してしまったのか、ステージやキャラクターが見えなくなってしまった。 こういうときは選択したオブジェクトにズームするショートカットFを使えば良い。大文字のFなので、シフトキーを押しながらfキーとなる。 …
タイトル画面とゲーム中に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()を使う。 Application.LoadLevel("シーン名"); 今自分が作っているものは非常にシンプルなので、シーンの切り替えは一瞬で終わった。もし、大量のアセットがあるような場合は切り替えに時間がかかるのだろうか。だとすると…
シーンに登録したUIのButtonを押したときに行いたい処理が書かれたスクリプトを作成し、Buttonにドラッグアンドドロップして追加。 ButtonのInspectorにあるOn Click()のところの+を押してイベントを追加。 None(Object)をクリックして、このButtonを選択。…
UIのボタンを実装した。 メニューのGameObject→UIにあるButtonを選択。するとCanvasの子供としてButtonができる。 ButtonのテキストはButtonの子供にTextがあるので、そこで変更する。
また間が空いてしまったが再開。 Unityのバージョンが上がっていたので最新版をインストール。 プロジェクトファイルを開こうとしたらバージョン違いのワーニングが出た。そのまま開いて最新版へとコンバートされたが、とくに問題はなく実行することが出来た…
ちょっと間が空いてしまったが、また再開。 まずは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") ) { // ボタンがされたときの処理 } }
Unityでは画面上のテキストやボタンなどのGUIはOnGUI()内に記述する。 OnGUI とりあえず、ゲームオーバーの文字列をGUI.Labelを使って表示してみた。 GUI.Label GUI.Label(new Rect(0, 0, 100, 20), "Game Over"); 文字列のサイズとかフォントは引数で渡すGU…
ミスの判定を座標から求めようと考えていたが、コリジョンが使えることを思い出し、そちらで実装してみた。 座標で設定した場合はコードを数値で変更する必要があるが、コリジョンならばシーンを見ながらマウスで位置を調整できるので、こちらのほうが今後の…
Edge Collider 2D - Unity マニュアル キャラのコリジョンをBox Cllider 2Dで行っていたのだが、このままではちょっと問題が出てきたので、Edge Collider 2Dに変更。必要最低限のところだけのコリジョンとした。 形状をマウスで編集するとInspectorには頂点…
オブジェクトがぶつかった時の反発が期待した通りの動きにならなかったので、トリガーを使って自分で処理することにした。 ColliderのIs Triggerにチェックを入れれば、衝突したときにイベントが発生するようになる。 OnTriggerEnter2D 接触したときに発生す…
projectビューのCreateを選択し、Physics2D Materialを作成。このPhysics2D Materialで反発や摩擦の調整ができる。 Physics Material 2D - Unity マニュアル 作成したPhysics2D MaterialをオブジェクトのColliderのMaterialへと設定すれば、そのオブジェクト…
当たり判定のColliderをつけておけばオブジェクト同士が衝突したときに反発しあうようになる。 純粋に衝突したということだけ判定したいときは、Is Triggerにチェックを入れれば衝突したときにイベントを発生させるトリガーのみとなる。 オブジェクト同士が…
当たり判定にはCollider(コライダー)を使う。 InspectorのAdd Componentを選び、Physics 2D内に様々なColliderが用意されている。 ・Box Collider 2D 矩形の当たり判定 ・Circle Collider 2D 円の当たり判定 ・Edge Collider 2D 線の当たり判定 ・Polygon Co…
キャラクターにコリジョンを付け始めた。が色々種類があってよく分からない。 あと物理でぶつかったら反射するようにもしたいのだけれども。