【Unity】ScratchのブロックをUnityで再現しよう~動き⑥~

回転方向を左右のみにする ScratchからUnityへ
回転方向を左右のみにする

Scratch のブロックを Unity で再現するときに、どのような方法があるのかを紹介していきます。

ScratchのブロックをUnityで再現しよう

回転方向を左右のみにする

Scratch の「回転方向を左右のみにする」ブロックを Unity で作ってみましょう。

回転方向を左右のみにする
回転方向を左右のみにする

準備

「動き⑤」と同様に三角形を配置してMoveTriangleスクリプトを用意します。

画像を変更する

最初に、向いている方向が分かりやすいように画像を変更しましょう。
ここでは「いらすとや」さんから画像を持ってきました。

かわいいフリー素材集
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

Projectビューに画像ファイルをドラッグ&ドロップします。

画像の追加
画像の追加

Inspector ビューで Sprite Renderer コンポーネントの Sprite を変更しましょう。

Spriteの設定
Spriteの設定

今回持ってきた画像が左向きでしたので、Flip にチェックを付けて右向きに変更します。(必要な方のみ)

Flipの設定
Flipの設定

回転方向を左右のみにする

それでは、MoveTriangleコンポーネントに C#プログラムを記述して、回転方向を左右のみにしてみましょう。
プログラムを作成後、画面上部の再生ボタンを押すと、三角形が左右のみに反転します。

using UnityEngine;

public class MoveTriangle : MonoBehaviour {
    public float m_fMoveSpeed = 10f;

    private Rigidbody2D m_rRigidbody2D = null;
    private SpriteRenderer m_rSpriteRenderer = null;

    void Start() {
        m_rRigidbody2D = GetComponent<Rigidbody2D>();
        m_rSpriteRenderer = GetComponent<SpriteRenderer>();
        // 最初の向きをランダムに決める.
        float fRotZ = Random.Range(0f, 360f);
        Quaternion rRot = Quaternion.Euler(0f, 0f, fRotZ);
        // 最初の速度を設定する.
        m_rRigidbody2D.velocity = rRot * Vector3.up * m_fMoveSpeed;
        // 向きを設定する.
        //transform.rotation = rRot;
        transform.rotation = Quaternion.identity;
        if (m_rRigidbody2D.velocity.x < 0f) {
            // 最初に左に動くので、左右に反転する.
            m_rSpriteRenderer.flipX = !m_rSpriteRenderer.flipX;
        }
    }

    private void LateUpdate() {
        // スクリーン座標を取得する.
        Vector3 vecScreenPos = Camera.main.WorldToScreenPoint(transform.position);
        // 現在の速度を取得する.
        Vector3 vecVelocity = m_rRigidbody2D.velocity;
        // 左右に跳ね返ったかどうか.
        bool bFlipX = false;
        if ((vecScreenPos.x < 0f && vecVelocity.x < 0f) || (vecScreenPos.x > Screen.width && vecVelocity.x > 0f)) {
            // 左右の端に着いたので、左右に跳ね返る.
            vecVelocity.x = -vecVelocity.x;
            // 左右に跳ね返った.
            bFlipX = true;
        }
        if ((vecScreenPos.y < 0f && vecVelocity.y < 0f) || (vecScreenPos.y > Screen.height && vecVelocity.y > 0f)) {
            // 上下の端に着いたので、上下に跳ね返る.
            vecVelocity.y = -vecVelocity.y;
        }
        // 現在の速度を更新する.
        m_rRigidbody2D.velocity = vecVelocity;
        // 向きを更新する.
        //transform.rotation = Quaternion.FromToRotation(Vector3.up, vecVelocity);
        if (bFlipX) {
            // 左右に跳ね返ったので、左右に反転する.
            m_rSpriteRenderer.flipX = !m_rSpriteRenderer.flipX;
        }
    }
}

プログラムのちょこっと解説

今回は「回転方向を左右のみにする」ために、SpriteRendererを使ってみました。
SpriteRendererのflipXを変更することで、左右のみ反転させることができます。

SpriteRenderer-flipX - Unity スクリプトリファレンス
スプライトを X 軸で反転します

まとめ

Scratch の「回転方向を左右のみにする」ブロックと同じ動きを Unityで作ってみました。
スプライトを制御する機能は SpriteRenderer で提供されています。

Unity の機能を使い倒して、さらに面白いゲームを作れるようになりましょう。

コメント

タイトルとURLをコピーしました