ゲームタブを下にドロップしておくと操作上便利。
ゲームの表示枠の大きさを変える→ゲームタブのFreeAspectを選び、プラスを選択して入力
☆Sprite ゲームのキャラクターの画像を取り込む
「Sprite」フォルダをアセット直下に作る→画像を入れる→選択→シングルかマルチプルで画像を取り込む(1枚絵か複数枚絵)
スプライトをマルチプル→マルチプル選び、アプライする→スプライトエディターを選択→スライスタブ→Grid By Sizeで切り抜くサイズを選択
128×128とかで良い→アプライ→スプライトフォルダに戻り、画像横の再生ボタンを押すと分割されている画面を確認できる
☆複数画像でアニメーション→画像を複数選択→フォルダのところまでドロップ→新規フォルダでAnimeフォルダ作り、そこに入れる
→ヒエラルキー内にキャラクター0みたいな名前になるので、わかりやすい名前にしてあげる
☆キャラを動かす→動かしたいキャラの画像を選択→右側のインスペクタータブの一番下Add Component→キャラ名Scriptと入力して新たなスクリプトを作成
→Script用のフォルダを作り、それに入れてあげる→ダブルクリックでスクリプトを開く→Void Updateの欄に
float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 8f;
float dy = Input.GetAxis("Vertical") * Time.deltaTime * 8f;
//縦 横の移動 PCの処理速度の影響を受けないようにTime.deltaTimeをかけてそのままだと遅いので8fをかける
transform.position = new Vector3(
transform.position.x + dx,
transform.position.y + dy,
0f
);
を足す。→保存して実行
☆キャラの移動範囲を限定する→キャラを選択して移動ビュー(左端の矢印ボタン)にして動かして画面の端っこの座標を調べる
→インスペクターウィンドウのトランスフォームにある座標が端っこ→キャラのスクリプトを開き、トランスフォーム内の記述を変更
transform.position = new Vector3(
Mathf.Clamp(transform.position.x + dx, -8f, 8f)
Mathf.Clamp(transform.position.y + dy, -4.5f, 4.5f),
0f
//移動するときXは8~-8の範囲、Yは-4.5~4.5の範囲までの移動に限定している
書き換えて保存して実行
☆元位置に戻す→インスペクターウィンドウ→トランスフォーム→・・・をリセット
☆弾などを打つ→画像を選択してヒエラルキーにドロップ→名前をBulletにする→AddCompornentにてBulletScriptを新規作成→スクリプトフォルダに入れる
→スクリプト内のVoidUpdateのところに
transform.position += new Vector3(0f, 10f * Time.deltaTime, 0f);
//弾が上方向に移動する挙動
を足して保存
→アセットないに「Prefabs」フォルダを作りBulletを入れると自動でプレハブ化する→元のBulletは削除→プレイヤースクリプト開く
VoidStartの上に public GameObject bullet; の記述を足して球をパブリック化する
そして最下部の欄内に
IEnumerator Shoot()
{
while (true)
{
Instantiate(bullet, transform.position, transform.rotation);
yield return new WaitForSeconds(0.2f);
}
}
を足す。
Void Start内に StartCoroutine(“Shoot”); の記述を足す(ループで弾打つ挙動をスタートと共に開始)→スクリプトを出る
→プレイヤーのインスペクター内にBulletの欄があるのでそこにプレハブフォルダ内のBulletを登録→
→プレイヤーと弾の重なる順がおかしい場合はインスペクターのスプライトレンダラー内のOrderInLayerを1にする
☆画面からはみ出たものを自動的に消す→ヒエラルキー内でクリエイト、クリエイトエンプティで空の箱を作る→名前をBoundaryに→
インスペクタのAddComponentでBoxColider2Dを選択→ISToriggerにチェック⇒エディットコライダーで衝突範囲を画面全体に広げる
消したいプレハブにRigidbody2Dを追加→BodyTypeをきねまてっぃくに(物理演算がない場合)→カプセルコライダー2Dも追加してサイズに合わせる
バウンダリースクリプトを作成→VoidStartの手前に
private void OnTriggerExit2D(Collider2D collision)
{
Destroy(collision.gameObject);
}
の記述を足して実行
☆一時的に無効、非表示→インスペクターウィンドウの名前の隣のチェックを外す
☆キャラの上下、左右反転→インスペクターウィンドウのスプライトレンダラー→Flipのチェックボックス入れたものが反転
☆敵を作る→アニメ化したい絵を選びヒエラルキーに追加→アニメフォルダに入れて名前をEnemyとする→AddComponentでスクリプトの追加
→VoidUpdate内に
transform.position += new Vector3(0f, -2f * Time.deltaTime, 0f);
//敵がゆっくり下に移動してくる
を追加→プレハブフォルダに入れてプレハブ化(元ファイルは消す)
☆ゲームコントローラーを作り敵を無限に生み出す→ヒエラルキー内に「Enpty」を作り名前をGameControllerにする→
位置を敵を生成したい場所の中心に移動→GameControllerScriptを生成→VoidStartの手前に
public GameObject Enemy;
IEnumerator SpawnEnemy()
{
while (true)
{
Instantiate(
Enemy ,
new Vector3(Random.Range(-8f, 8f), transform.position.y, 0f),
transform.rotation
//敵をX軸方向に8~-8f内に生成する
);
yield return new WaitForSeconds(0.5f);
//0.5秒ごとに敵を生成
}
}
を記入してVoidStart内に
StartCoroutine(“SpawnEnemy”);
を記入する→スクリプトを出て、ヒエラルキー内のGameControllerを選択、Enemyの欄があるのでそれにプレハブのEnemyを割り当てる
消える処理したい→プレハブのエネミーをダブルクリック→リジットボディ2Dを追加(キネマティック選択)→サークルコライダー2D
→衝突範囲を編集→あとはバウンダリーのデストロイで消えていく(作ってない場合は☆はみ出たものを自動的に消す、を参照)
☆三角関数で敵に動きをだす→敵のスクリプト内に private float phase; の変数を宣言(VoidStartの前)→
VoidStart内に
phase = Random.Range(0f, Mathf.PI * 2);
//周期を2πの間でランダムにする
の記述してVoidUpdate内に
transform.position += new Vector3(
Mathf.Cos(Time.frameCount * 0.05f + phase) * 0.05f,
-2f * Time.deltaTime,
0f
);
//X軸方向に揺らぎながらY軸を下降していく
を記述。
☆弾との衝突判定→敵のプレハブのインスペクターのコライダーのIS Trigerをオンにする
→弾のプレハブ内で「Bullet]Tagを作成して追加→敵のスクリプトに
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag(“Bullet”))
{
Destroy(collision.gameObject);
Destroy(gameObject);
//衝突したものも、このオブジェクトも消滅
}
}
を追加してBulletタグと衝突したら消えるようにする
☆
☆
☆
☆
☆
☆
☆
☆
☆
☆