勉強した本はたのしい2Dゲームの作り方
Unityの枠組み
| プログラム | 説明 | |
| 開始 | using System.Collections; using System.Collections.Generic; using UnityEngine; | |
| ★タイトル「ABC」 | /*★タイトル*/public class ABC : MonoBehaviour{ | |
| ①設定内容 | ||
| ★1回のみ | /*★1回のみ*/void Start(){ | |
| ②1回のみ内容 | ||
| ★継続 | }/*★継続*/void Update(){ | |
| ③継続内容 | ||
| ★動き継続 | }/*★動き継続*/void Update(){ | |
| ④動き内容 | ||
| ★他ファイル | }/*★他ファイル*/ | |
| ⑤ | ||
| 終了 | } |
プログラム以外
表示
| 手順 | 説明 | |
| 画像の表示順変更 | インスペクター→レイヤーの順序 | 数が大きいほど前に来る |
| 画面のものを移動 | シーン左上→矢印ツール | 中央の四角をつかめば自由に動かせる |
| 画面を動かす | シーン左上→ハンドツール | |
| 画面から一時的に消す | ヒエラルキー→物体名の左側の目のマーク | ゲーム実行中には表示される |
| 画面から削除 | インスペクター→物体名のチェックを外す | ゲーム実行中も表示されない |
| 画面で選択不可にする | ヒエラルキー→物体名の左側の指のマーク | 重なった物体を選択するときに使う。 |
| 保存 | ファイル→保存 | |
| 新しくシーンを作り保存 | ファイル→新しいシーン→モードを選択 ファイル→別名で保存→scenesを選んでその中に保存 ファイル→ビルド設定→上の方に新しく作ったシーンをドラッグ | |
| ゲームオブジェクトの複製を作る | ヒエラルキーの物体をプロジェクトのビューに入れる。プロジェクトビューに入った物体をシーンにドラッグすると複製できる。 | 物体についているコンポーネントやプログラムもついた状態で複製できる。 プロジェクトのビューに入ったものを変えるとシーンのものすべてが変わる。 |
| 画面サイズ変更 | ゲーム→フリーアスペクト比をクリックして変更 |
動き
| 手順 | 説明 | |
| 画像のピボットを足元にする | 画像データを選ぶ→インスペクター→ピボットを下にする→適用するを押す | 拡大した時も足元の位置が変わらずに拡大される。 |
| 物体に重力をつける | コンポーネントを追加→Phisics 2D→Rigidbody 2D キャラの場合はcontraints→回転を固定のZにチェックをつける | ゲームを開始すると下に加速して落ちるようになる |
| 当たり判定をつける(四角) | コンポーネントを追加→Phisics 2D→Box Collider 2D→コライダーの編集を押し調節できる | |
| 当たり判定をつける(楕円) | コンポーネントを追加→Phisics 2D→Capsule Collider 2D→コライダーの編集を押し調節できる | |
| 物体にグループをつける | インスペクター→レイヤー→レイヤーを追加→User Layer6などに新しく名前を追加。 インスペクター→レイヤー→新しく作ったレイヤーを選ぶ | |
| イベント判定をつける。 | コンポーネントを追加→Phisics 2D→Box Collider 2D→コライダーの編集を押し調節できる→トリガーにするにチェックをつける。 インスペクター→タグ→タグを追加→+を押し新しくタグの名前を入れSAVEを押す。 インスペクター→タグ→新しく作ったタグを選ぶ。 | 物体の当たり判定はないがぶつかったときにプログラムを実行できるようになる。 |
| 透明な物体 | ヒエラルキー→右クリック→空のオブジェクトを作成→当たり判定をつける | ステージ外にキャラがはみ出なくなる |
| キャラが壁につかないようにする (キャラの摩擦を0にする) | プロジェクト→2D→Physics Material 2D→flictionを0にする→キャラのコンポーネントを追加にドラッグ | ジャンプして移動している状態で壁にぶつかると壁にくっついてしまう。 |
アニメーション
| 手順 | 説明 | |
| パラパラ絵作成 | プロジェクトの複数の画像を選んでシーンにドラッグ。名前を付けて保存。 新しく四角のアイコンと三角のアイコンができる。 四角の名前を三角のアイコンの名前にする。 四角のアイコンをキャラの画像にドラッグする。 | パラパラ絵ができる。三角のアイコンを押しサンプルからパラパラ絵の速度を変えられる。 |
| パラパラ絵を作成2 | アニメーション→新しいクリップを作成→名前を付けて保存 プロパティを追加→Sprite Renderer→Sprite→+を押す 画像をドラッグする | パラパラ絵ができる。先ほどと違い画像の間隔を変えられる。 |
| パラパラ絵のループをなくす | 三角のアイコン→時間をループのチェックを外す | |
| パラパラ絵で透明になるものを作る | プロパティを追加→Sprite Renderer→Sprite Renderer.Color→+を押す→カラーの左の△を押してメニューを開く→一番右の画像の時間をクリック→a(透過度)を0にする | |
| 初期アニメを変更する | 四角のアイコン→選んだアニメを右クリック→レイヤーデフォルトステートとして設定する |
キャンバス
| 手順 | 説明 | |
| キャンバスを設置 | ヒエラルキー→UI→画 Canvasをダブルクリック→インスペクター→レンダーモードをスクリーンスペース カメラにする→レイヤーの順序を10にする→レンダーカメラの項目にヒエラルキーのMain Cameraをドラッグする→ヒエラルキーのCanvasの下にあるImageをクリックし中央に移動させる | |
| 画像を設置 | Imageのインスペクターのソース画像にアセットの画像をドラッグする→アスペクト比を保存にチェックをつける | |
| ボタンを設置 | ヒエラルキー→Canvasをクリック→UI→古い機能→ボタン→ボタンのソース画像ににアセットの画像をドラッグする→アスペクト比を保存にチェックをつける ボタンの下にあるText(Legacy)をクリック→インスペクターのテキストに文字を入れる→フォントサイズを変える | |
| パネルを設置 | ヒエラルキー→UI→パネル→パネルの中にボタンをドラッグ | パネルでボタンをまとめることができる |
| ボタンの設定 | プログラムを作成しボタンにつける。ボタンのインスペクター→クリック時()の+を押す→自分のオブジェクトをドラッグ→no functionをボタンのプログラムにする |
プログラム
①②③④はそれぞれ書くプログラムの場所
| プログラム | 説明 | |
| とりあえず書くもの | ①Rigidbody2D rbody; ②rbody = this.GetComponent<Rigidbody2D>(); | rbodyを使ったプログラムが使えるようになる |
| ←→移動 | ①float 矢印X = 0.0f;float スピード = 3.0f; ③矢印X = Input.GetAxisRaw("Horizontal"); ④rbody.velocity = new Vector2(矢印X * スピード, rbody.velocity.y); | →←の矢印キーで動きようになる。 Input.GetAxisRaw("Horizontal")は→をおせば1.0左を押せば-1.0になる。 rbody.velocity = new Vector2();でXY方向の動きをつける |
| 移動によって画像の向き変更 | ③if (矢印X == 1) { transform.localScale = new Vector2(1, 1); } else if (矢印X == -1) { transform.localScale = new Vector2(-1, 1); } | →を押したら画像のスケールサイズを1,1にする。左を押したら-1,1にする。 画像を大きく使っている場合は2,2などに調節する。 |
| ログ表示 | Debug.Log("あいう") | コンソールにあいうを表示する。 |
| レイヤー「地面」を使う | ①public LayerMask グラウンドレイヤー; ②グラウンドレイヤー = LayerMask.GetMask("地面"); | グラウンドレイヤーの文字で地面のレイヤーを使えるようになる |
| レイヤー「地面」があるときジャンプする。 | ①float ジャンプ = 9.0f; ③if (Input.GetButtonDown("Jump")) { ジャンプ機能 = true; } ④ bool 地面X = Physics2D.CircleCast(transform.position, 0.2f, Vector2.down, 0.0f, グラウンドレイヤー); if (地面X == true &&ジャンプ機能 == true) { Vector2 ジャンプパワー = new Vector2(0, ジャンプ); rbody.AddForce(ジャンプパワー, ForceMode2D.Impulse); ジャンプ機能 = false; } | if (Input.GetButtonDown("Jump"))はスペースキーを押した時の意味。 Physics2D.CircleCast(transform.position, 0.2f, Vector2.down, 0.0f, グラウンドレイヤー);は下に地面があるときの意味。 |
| ←→移動を修正 | ④if (地面X == true ||矢印X != 0) { rbody.velocity = new Vector2(矢印X * スピード, rbody.velocity.y); } | 前の状態だとジャンプ中に←ボタンを離すと真下に落下してしまう。 |
| アニメを使う | ①Animator animator; ②animator=GetComponent<Animator>(); | animatorが使えるようになる |
| 地面にいて移動していないとき「待機」 地面にいて動いている時「動く」 地面にいないと時「ジャンプ」 | ②string 今アニメ = ""; string 昔アニメ = ""; ④if (地面X == true) {if (矢印X == 0) { 今アニメ = "プレイヤー待機"; } else { 今アニメ = "プレイヤー動く"; }} else{今アニメ = "プレイヤージャンプ";} | |
| アニメが変わった時、今アニメを実行 | ④if (今アニメ != 昔アニメ) { 昔アニメ = 今アニメ;animator.Play(今アニメ); } | |
| トリガーに触れた瞬間「ゴール」、「落下」 | ⑤void OnTriggerEnter2D(Collider2D collision) { if(collision.gameObject.tag=="ゴール") { 〇〇〇 } if (collision.gameObject.tag == "落下") { 〇〇〇 } } |
プログラム2
| プログラム | 説明 | |
| UIを使用 | ⓪using UnityEngine.UI; | |
| 一秒後に非表示にする | ②Invoke("インアクティブイメージ", 1.0f); ⑤void インアクティブイメージ() { メインイメージ.SetActive(false); } | |
| 表示する | ①public GameObject メインイメージ; ③メインイメージ.SetActive(true); | |
| 非表示する | ①public GameObject メインイメージ; ③メインイメージ.SetActive(false); | |
| ボタンを不使用モードにする | ③Button bt = ネクストボタン.GetComponent<Button>(); bt.interactable = false; | |
| 画像変更 | ①public GameObject メインイメージ; ③メインイメージ.GetComponent<Image>().sprite = ゲームオーバー; | |
| ボタンのプログラム | ⓪using UnityEngine.SceneManagement; ①public string シーンネーム; ⑤public void ロード() { SceneManager.LoadScene(シーンネーム);} |