「どこでもドラえもん日本旅行ゲーム」(通称ドラえもんゲーム)を持っているのですが、使いこみすぎてルーレットがいつも「ひみつ道具」で止まるようになってしまい、一向にゲームが進まなくなっていました。

Unity勉強中ですが、「Unity5 の教科書」の例題で、ちょうどルーレットを作るというのがありましたので、それを参考に拡張しました。

例題では、タップするとルーレットが決まったスピードで回転するというものでしたが、指のスワイプの方向やスピードに合わせて回転するようにしました。画像もドラえもんゲームのルーレットを意識して、パワポで作りました。

スマホでサクサクうごきます。初のAndroidアプリです。

よっしゃー、これでドラえもんゲームまたできるぞ!

ポイントは、
1.画面の座標系からワールド座標系への変換と、
[crayon]
Vector2 startPos = Camera.main.ScreenToWorldPoint(pos);
[/crayon]

2.座標か角度への変換です。
[crayon]
this.prevTheta = Mathf.Atan2(startPos.y, startPos.x) * Mathf.Rad2Deg;
[/crayon]

ルーレットのメインのプログラムは以下です。

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

public class RouletteController : MonoBehaviour
{
    float startTheta = 0;
    float prevTheta = 0;
    float rotSpeed = 0;
    
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector2 pos = Input.mousePosition;
            Vector2 startPos = Camera.main.ScreenToWorldPoint(pos);
            this.prevTheta = Mathf.Atan2(startPos.y, startPos.x) * Mathf.Rad2Deg;
            this.startTheta = this.prevTheta;
        }
        else if (Input.GetMouseButton(0))
        {
            Vector2 pos = Input.mousePosition;
            Vector2 startPos = Camera.main.ScreenToWorldPoint(pos); 
            this.prevTheta = this.startTheta; 
            this.startTheta = Mathf.Atan2(startPos.y, startPos.x) * Mathf.Rad2Deg;
            this.rotSpeed = (this.startTheta - this.prevTheta);
            transform.Rotate(0, 0, this.rotSpeed);
        }
        transform.Rotate(0, 0, this.rotSpeed);
        this.rotSpeed *= 0.98f;
    }
}