日々是好日~every day is a good day~

日常の中の非日常の備忘録

【Unity】ルーレットをまわす

前回カードをめくる方法をアップしました
everydayisagoodday.hatenadiary.com
これはY軸を中心にオブジェクトを回転させる方法でしたが
今回はZ軸を中心にオブジェクトを回転させる例としておみくじルーレットを作ってみます
1.ルーレット盤と針の画像を用意し
ルーレット盤の画像をシーン内にドラッグ&ドロップ

2.インスペクターの位置X Yは0にしておく
次に針の画像をシーン内にドラッグ&ドロップ

3.インスペクターの回転Zを180にして向きを逆にする
レイヤーの順序を1にしてレーレット盤より上に表示されるようにする

4.ヒエラルキーの+をクリックしUI/古い機能/テキスト(kekka)を追加 

5.テキストの位置を中央下 フォントサイズ 文字の色などを設定


6.プロジェクトタブにカーソルを持っていき右クリックでRouletteというスクリプトを作成

7.Rouletteを編集

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

public class Roulette : MonoBehaviour
{
    [SerializeField] float rotateSpeed=800f;
    public Text kekka;
    private float speed;
    private bool isStart = false;
    private bool isStop = true;
   
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && !isStart && isStop)   //スタート
        {
            kekka.text = "おみくじ";
            speed = rotateSpeed;
            isStart = true;
            isStop = false;
        }
        else if (Input.GetKeyDown(KeyCode.Space) && isStart && !isStop)   //ストップ
        {
            isStop = true;
        }
        if (isStart && !isStop)   //回転
        {
            transform.Rotate(0, 0, speed * Time.deltaTime);
        }
        else if (isStart && isStop)   //スローダウン->STOP
        {
            transform.Rotate(0, 0, speed * Time.deltaTime);

            speed *= 0.98f;
            if (speed < 0.9)
            {
                Vector3 vec = transform.localEulerAngles;
                if (vec.z < 0) vec.z += 360;
                Hantei(vec.z);
            }
        }
    }
    private void Hantei(float kakudo)
    {
        if (0 <= kakudo && kakudo < 18.0)   //大凶
        {
            kekka.text = "大凶";
        }
        else if (18.0 <= kakudo && kakudo < 162.0)   //吉
        {
            kekka.text = "吉";
        }
        else if (162.0 <= kakudo && kakudo < 180.0)   //大吉
        {
            kekka.text = "大吉";
        }
        else if (180.0 <= kakudo && kakudo < 234.0)   //凶
        {
            kekka.text = "凶";
        }
        else if (234.0 <= kakudo && kakudo < 288.0)  //中吉
        {
            kekka.text = "中吉";
        }
        else if (288.0 <= kakudo && kakudo < 360.0)   //小吉
        {
            kekka.text = "小吉";
        }
        isStart = false;
    }
}

8.Rouletteをルーレット盤のオブジェクト(omikuji)にドラッグ&ドロップ

9.omikujiのインスペクターのスクリプト内にkekkaをドラッグ&ドロップ

これで実行しスペースキーを押すとルーレットが回転しもう一度押すとルーレットが止まり結果が表示されます

2Dの表示物を作るのにZ軸が関係するなんて目からウロコです