【Unity初歩】最終調整してスマホで動かしてみる

# はじめに
ついにこのアドベントカレンダーも最終日となりました。
最終日は🦀が落下 or 敵(🦐)に当たると最初からやり直しになるようにし(クリアするまで終われない)、2段ジャンプはできないようにするという調整をします。
そして最後に、スマホで操作ができるように少しコードを変えてみます。

前回の記事

https://qiita.com/usomaru/items/38707a3b5e3add044586

# 調整

## 落下 or 敵に当たったら最初からやり直し

落下

```C#:PlayerController
if (transform.position.y < -5)
{
    SceneManager.LoadScene("SampleScene");
}
```

敵に当たった

```C#:EnemyController
using UnityEngine.SceneManagement;

// 省略

void OnCollisionEnter2D(Collision2D collision)
{
        
    if (collision.gameObject.name == "Kani")
    {
        Debug.Log("ゲームオーバー");
        SceneManager.LoadScene("SampleScene");
    }
    else
    {
        this.isTouch = true;
    }
}
```

クリアシーンに移行したときのコードと同じ

## 2段ジャンプをさせない
PlayerControllerのジャンプの条件文を変更します。

```C#:PlayerController
// ジャンプ
if (Input.GetKeyDown(KeyCode.Space) && this.rigidBody2D.velocity.y == 0)
{
    // 効果音
    GetComponent<AudioSource>().Play();

    this.rigidBody2D.AddForce(transform.up * this.jumpForce);
}
```

y方向の速度(`rigidBody2D.velocity.y`)がゼロ＝つまりジャンプ中ではないということです。


# スマホで動かす

スマホを左右に傾けると🦀が移動できるようにし、タップでジャンプができるようにします。

## 移動のソースコード書き換え

左右移動の条件文は、スマホの傾きが一定値より大きくなったとき。

```C#:PlayerController
public class PlayerController : MonoBehaviour
{
    Rigidbody2D rigidBody2D;
    float jumpForce = 680.0f;
    float walkForce = 30.0f;
    float maxWalkSpeed = 2.0f;
    float threshold = 2.0f; // ☆追加☆

    // Start is called before the first frame update
    void Start()
    {
        this.rigidBody2D = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        // ジャンプ ☆GetKeyDown(KeyCode.Space)から変更☆
        if (Input.GetMouseButtonDown(0) && this.rigidBody2D.velocity.y == 0)
        {
            // 効果音
            GetComponent<AudioSource>().Play();

            this.rigidBody2D.AddForce(transform.up * this.jumpForce);
        }

        // 左右移動
        int key = 0;
        // ☆KeyCodeから変更☆
        if (Input.acceleration.x > this.threshold) { key = 1; };
        if (Input.acceleration.x < -this.threshold) {  key = -1; };

        // 省略
    }
```

## Androidの設定

私のスマホがAndroidのため、Androidで試しています。
こちらの記事を参考に作成しました。
スマホを開発者モードにしてデバックできるような設定をしなければいけないので注意。

https://vanikki.com/unity-android-test/

Androidに環境を切り替える場所は、File > Build Settingsで変更できます。
「Switch Platform」をクリックでプラットフォームを切り替え。

![スクリーンショット 2023-12-25 114029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/0bb0bb02-9c1a-88d2-b609-b0409419c2c2.png)

切り替わるとボタンが「Build」に変わります。
「Player Settings」をクリックして、設定を少し変えます。

![スクリーンショット 2023-12-25 163321.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/07242000-dfe4-7d45-f154-245705713a01.png)

「Other Settings」を選択。

![スクリーンショット 2023-12-25 163454.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/7a365517-689a-ff17-55a1-7a0a2488ad37.png)

Package Nameを「com.一意な名前.roulette」にして、この画面は閉じます。

![スクリーンショット 2023-12-25 164058.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/896f3843-0cfc-ad82-ec24-caa78441aa40.png)

BuildしたいSceneのチェックがついていることを確認して、「Build And Run」をクリックします。

![スクリーンショット 2023-12-25 164420.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/b53e8120-3776-07f4-bf45-a6e7e0932d18.png)


クリックするとファイルを保存する画面に飛ぶので保存します。

その後ビルドが終了すると、スマホで作成したゲームを動かせるようになりました。

## 試した画面
※私の機種はAndroid

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/1e8baf6a-1ad5-ee0a-d066-5800314b13d8.png)

タップするとジャンプする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/68631915-5af6-9ae5-ca74-90afc888d93d.png)


ただし、全力でスマホを振らないと横移動ができないクソゲーができてしまいました。
頑張って振っても気づいたら🦐が近づいてきていて最初からやり直しの無限ループ🔁
そもそも時間がなかったのでやりませんでしたが、横向きプレイを想定した作りにしないとだめでした。

# アドベントカレンダーを書き続けてみて
主にUnityを初めて試してみた記事をかいてきましたが、後半はネタがなくなり、とにかくネタを探し求める日々でした😵‍💫
ですが、ネタを探すために新たなことに挑戦してみよう！と思うきっかけができたりと好奇心がさらに向上する機会となりました。

ゲームはスマホでプレイするとクソゲーとなってしまったため、もう少し勉強してちゃんとしたゲームがつくれるように精進したいところです。