アマゾンバナーリンク

Unityで作る弾幕シューティングゲームその1 プレイヤー操作とアニメーション

こんにちは!ジェイです。今回から弾幕シューティングの講座を始めます。Unityのチュートリアルが終わって簡単なゲームを作れるようになったけど、次に何を作ればいいかわからない人が対象です。それではさっそく始めましょう。

プロジェクトの作成

まずは、プロジェクトを以下の様に2Dで作成し、プロジェクト名は2DShootingとします。バージョンはUnity 2019.4.1fです。

素材のダウンロードから設定まで

ゲームに使う素材をこちらからダウンロードし、プロジェクト(Asset>Scenes)にインポートします。

次に、Assets>Scenes>Resources>img>charの0を選んでPixeis Per Unitを32にします。

更にSprite Editorを起動→上部にある↓マークを押して、Grid By Cell Count→Cを4→Rを3→Slice→Applyを選択するとちょうどキャラの大きさで分割されます。

Animationの作成

そしたら、Assets>Scenes>にAnimationフォルダを作成し、Assets>Scenes>Iimg>char>の0_0~0_3までを選択し、Hierarchyにドラック&ドロップします。

Window→Animation→Animationでアニメーションウインドウを開いておき、Hierarhyの0_1をクリックして、AnimationビューからCreateAnimatino→先ほど作ったAnimationフォルダを選択し、eftAnimation.animを選んで左向きの画像4つをanimationビューにドラッグ&ドロップする。同じ要領で右向き画像4つをRightAnimを追加します。

Animatorの作成

Window→Animation→Animatorでアニメーターウインドウを開き、Parametersの+をクリックして、Floatを選び、名前を「H」と付けます。そして、それぞれのアニメーションからMakeTransitionを選び以下の様に設定しましょう。

IdleAnimation→LeftAnimation
IdleAnimation→RightAnimation
LeftAnimation→IdleAnimation
RightAnimation→IdleAnimation
RightAnimation→LeftAnimation
LeftAnimation→RightAnimation

以上のように設定し、Has Exit Timeのチェックは外しておきましょう。つけておくとアニメーションが再生し終わるまで、切り替わりません。それとRightAnimationとLiftAnimationをそれぞれ選び、優先順位をIdleAnimationが下にくるように設定しましょう。

プレイヤーを動かす

ここまできたらプレイヤーを動かすスクリプトを作成します。以下のコードをプレイヤーに張り付けてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CPlayerControl : MonoBehaviour
{
    Animator _Animator;
    // Start is called before the first frame update
    void Start()
    {
        _Animator = GetComponent<Animator>();
        Sqrt2 = 1.0f / Mathf.Sqrt(2.0f);
    }
    float VX = 0;
    float VY = 0;
    float Sqrt2;
    // Update is called once per frame
    void Update()
    {
        VX = VY = 8.0f * Time.deltaTime;
        float x = Input.GetAxisRaw("Horizontal");
        float y = Input.GetAxisRaw("Vertical");

        if (x < 0) VX = -VX; else if(x == 0) VX = 0;
        if (y < 0) VY = -VY; else if(y == 0) VY = 0;
        // 斜め方向の速度調節
        if (VX != 0 && VY != 0)
        {
            VX = VX * Sqrt2;
            VY = VY * Sqrt2;
        }
        transform.position += new Vector3(VX, VY, 0);
        _Animator.SetFloat("H", x);
    }
}

特に難しいことはないですが、斜め方向の移動量が増えすぎないように、1√2をかけて移動量を調整してます。

ここまでで自キャラの移動とアニメーションを実装することができました。次回に続く。