1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unity 2D 初心者 キャラクターを動かすために使用したパターン

Last updated at Posted at 2020-05-06

Unity2D初心者が実装した2Dキャラクター(Player以外)の移動パターン

GWの休みを利用してUnity 2Dでゲームを制作してみました。
そこで使用したキャラクターの動作パターンとコードを紹介いたします。

今回作ったゲームに関して

子供向けのアプリで、2Dのイラストが現れて動き、タッチをしたら鳴いて振り向くというシンプルなゲームです。
今回紹介するのは、現れてからタッチされるまでの移動モーションについてです。
RPGなどで使用できるか正直わかりません。

使用できるゲームは
・同じように画面に出てくるキャラクターをタッチする
・2Dスクロールゲーム
など、でしょうか。

前提条件

実装したキャラクターのモーションは3パターンです。
・その場で ゆらゆら ゆれる(swing)
・右回り、または、左回りに、回転角ランダムで移動する(move)
・画面右から左へ移動する(walk)

カッコ内の文字は、それぞれコード内の分岐に使用している文字列(コード内の定義)です。

実際のモーションとコード

その場でゆらゆら揺れる

CharacterBehavior.cs
//パラメータ rotationSpeed で 回転させた後、rotationSpeedを全体の向きに応じで増減させる。
//なるべく自然な動きにさせるため中央に向かって加速(または減速)させるイメージ
if(moveType == "swing") { 
    transform.Rotate(0, 0, this.rotationSpeed * Time.deltaTime);
    //現在の向きによって速度の加速、原則を決定する
    if (transform.rotation.z >= 0){
        rotationSpeed = rotationSpeed - rotationAcceleration * Time.deltaTime;
    }
    else {
        rotationSpeed = rotationSpeed + rotationAcceleration * Time.deltaTime;
    }
}
スクリーンショット 2020-05-06 16.34.41.png スクリーンショット 2020-05-06 16.34.37.png スクリーンショット 2020-05-06 16.34.54.png

右回り、または、左回りに、回転角ランダムで移動する

CharacterBehavior.cs
//prefab化したキャラクターを生成するタイミングで右回りか、左回りを決定したうえで
//向きを回転させた後、キャラクターの向きに一定速度分進める。
//Vector3.up と速度の積をとることで向いている方向へ進む(キャラクターはlocal軸に対して上を向いている前提)
}else if(moveType == "move")
    {
    //update1回分でどれだけ回転するかランダムに決定する
    if(rotationInclination == "left") { 
        deltaDegree = Random.Range(0.0f, 1.0f) * rotationAcceleration * Time.deltaTime;
    }
    else
    {
        deltaDegree = Random.Range(-1.0f, 0.0f) * rotationAcceleration * Time.deltaTime;
    }
    //ランダムに決定した分(360度表記)回転させた後、向いた方向へ進める。
    transform.Rotate(0, 0, deltaDegree);
    transform.Translate(Vector3.up * Time.deltaTime * rotationSpeed);

スクリーンショット 2020-05-06 16.32.10.png
スクリーンショット 2020-05-06 16.32.17.png
スクリーンショット 2020-05-06 16.32.24.png

画面右から左へ移動する

CharacterBehavior.cs
//Vector3.right に積をとることで、横報告へ移動します。
//また、歩いているように見せたいので、deltaTimeの和を取得し、1秒を超えたらイメージのSpriteを差し替える、かつ、
//わかりにくいですが足音を鳴らしています(apearClipは足音です)。
}else if(moveType == "walk")
{
    transform.Translate(Vector3.right * (-1) * Time.deltaTime * rotationSpeed);
    walkTime += Time.deltaTime;
    if(walkTime > 1.0f)
    {
        if(image.sprite == walkImage1)
        {
            image.sprite = walkImage2;
        }
        else
        {
            image.sprite = walkImage1;
        }
        audioSource.PlayOneShot(apearClip);
        walkTime = 0.0f;
    }
}

スクリーンショット 2020-05-06 16.49.03.png
スクリーンショット 2020-05-06 16.49.11.png
スクリーンショット 2020-05-06 16.49.19.png

以上です。非常に簡単なコードですが、スプリプトで様々なパターンが実装できるようだったので、
感動して記事としました。

また気になることがあれば記事としたいですがUnityは他の方もたくさん書かれてますので、
果たして需要があるのかどうか・・・

ここまでです。
ご覧いただきありがとうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?