学習メモ2022/08/29

ゲームタブを下にドロップしておくと操作上便利。

ゲームの表示枠の大きさを変える→ゲームタブの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タグと衝突したら消えるようにする










コメントを残す

WordPress.com で次のようなサイトをデザイン
始めてみよう