0 支持
82 閲覧

全て初心者です。初めて質問させていただきます。
練習で動画を観ながらルーレットを作りました。

内容はトランプとバイデンの選挙をルーレットで決めてしまいましょう、という内容で、画面をクリックするとルーレットが回り、その角度によって名前が表示され、もう一度クリックすると回転と名前が止まるというものです。←ここまでは出来ています。

ここから止まった名前の方に票が入り、10票獲得したほうの勝ち。という流れを作りたいのですが、初心者ゆえにどこをどうしたらいいのか全く見当がつきません。トランプが勝ったシーンとバイデンが勝ったシーンは用意してあります。下に画面とスクリプト?を貼っておきますので、どなたか御指南てほどきのほど、よろしくお願いいたします。二人の『0』のテキストも1,2,3、と票が入るたびに足していきたい感じです。


初心者 (220 ポイント) | 82 閲覧

ログインまたはユーザー登録してから回答してください。

回答 1

+1 支持

まず最初に言わせていただくと、ルーレットのコンセプトが面白くて吹き出しました

やりたい事が色々とあるようですので、今回の回答では

>ここから止まった名前の方に票が入り、10票獲得したほうの勝ち

の10票獲得で勝ち。という判定まで回答させていただきます。説明がわかりづらい場所があったらご指摘ください

Start()の上のところに、angleという変数を用意している状態ですが、ここでangleと同じように、新しく2つの変数を用意します

int trump = 0: // トランプの勝った回数

int biden = 0; // バイデンの勝った回数

これらの変数を、クリックして画面が止まった時に

if(this.winner == "とらんぷ"){

    trump += 1; // トランプの勝った回数に1を足す

}

else if(this.winner == "ばいでん"){

    biden += 1; // ばいでんの勝った回数に1を足す

}

ということで、スロットが止まる度にtrumpかbidenの回数が1増えるようにします

最後にトランプかバイデンの数が10を超えていたら、まずはメッセージを表示してみましょう

駆け足になってしまいましたが、何かヒントになれば幸いです

一人前回答者 (1.9k ポイント)
0
こんなに早く回答をいただけるなんて思いませんでした!ありがとうございます!!
本当にわがまま言って申し訳ないのですが、この文をどこに書き込んでいいのかわからないくらいの初心者なので、ここにコピペして貼っておくので、正しい位置に書き込んでくれたらありがたいです。

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

public class 監督 : MonoBehaviour
{

    GameObject ルーレット;
    GameObject text;
    private float angle;
    private string winner;

    // Start is called before the first frame update
    void Start()
    {
        this.ルーレット = GameObject.Find("ルーレット");
        this.text = GameObject.Find("Text");
        
    }

    // Update is called once per frame
    void Update()
    {
        this.angle=this.ルーレット.transform.localEulerAngles.z;

        if (this.angle <= 22.5f || this.angle > 337.5f)
        {
            this.winner = "とらんぷ";
        }
        else if (this.angle <= 67.5f && this.angle > 22.5f)
        {
            this.winner = "ばいでん";
        }
        else if (this.angle <= 112.5f && this.angle > 67.5f)
        {
            this.winner = "とらんぷ";
        }
        else if (this.angle <= 157.5f && this.angle > 112.5f)
        {
            this.winner = "ばいでん";
        }
        else if (this.angle <= 202.5f && this.angle > 157.5f)
        {
            this.winner = "とらんぷ";
        }
        else if (this.angle <= 247.5f && this.angle > 202.5f)
        {
            this.winner = "ばいでん";
        }
        else if (this.angle <= 292.5f && this.angle > 247.5f)
        {
            this.winner = "とらんぷ";
        }
        else if (this.angle <= 337.5f && this.angle > 292.5f)
        {
            this.winner = "ばいでん";
        }else
        {
            this.winner = "";
        }
        this.text.GetComponent<Text>().text = this.winner;
        
    }
}

よろしくおねがいします!

度々すみません!
あと、メッセージというのはコンソールのことでしょうか。
メッセージ表示というのもわからないので教えていただけたら嬉しいです。
+1
逆質問になって恐縮なのですが、今回入れるコードは「ルーレットが止まった時」に入れるものですので、
最初に書いてあります
>もう一度クリックすると回転と名前が止まるというものです。←ここまでは出来ています。
こちらのコードも必要です
また、ここでの細かいコードのやりとりは難しいので、
直接コードを挿入するよりは、ヒントをやりとりして、ご自身で入れてみることをオススメします
(あくまでご自身の学習用という認識ですので)

それでもわからない、できないといった場合はまたコメントください

よいUnityライフを!
0
なるほど。別のコードだったんですね!
どうもありがとうございました!
頑張ってみます(^^)
0
質問なのですが、このwinnerっていう器に”ばいでん”か”とらんぷ”のどっちかが入っていて、ルーレットを動かす方のクラスで、このどっちかが入っているwinnerを使って、教えていただいたコードをルーレットを止めた後に書き込んで、勝った方の数字が足されていくってイメージでよろしいのでしょうか?
頑張ってみたんですけど、このwinnerがどうやら空っぽみたいで数字が0のまま足されていきません。
winnerのprivateという文字もpublic stringに変えましたし、winnerの前についているthis.の文字も消してみたんですけど全く数字が増えていきません。
この教えていただいた
if (winner == "とらんぷ")
            {

                trump += 1; // トランプの勝った回数に1を足す

            }

            else if (winner == "ばいでん")
            {

                biden += 1; // ばいでんの勝った回数に1を足す

            }
の前に、winner="とらんぷ"; と打ったら止めるたびにトランプ側に数字がどんどん足されていきました。
winnerの中身を他のクラスでも使えるようにするには何か別のコードが必要なのでしょうか。

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

public class ルーレットの動き : MonoBehaviour
{
    GameObject 監督;
    GameObject text;
    private float tantan = 0; //回転速度
    private int flag = 0; //0は停止中、1は回転中。
    public string winner;
    int trump = 0; // トランプの勝った回数
    int biden = 0; // バイデンの勝った回数
   

    // Start is called before the first frame update
    void Start()
    {
        
    }


    // Update is called once per frame
    void Update()
    {
        if((Input.GetMouseButtonDown(0)) && (flag == 0))
        {
            this.tantan = 3;
            flag = 1;
            GetComponents<AudioSource>()[0].Play();
            
        }
        else if((Input.GetMouseButtonDown(0)) && (flag == 1))
        {
            this.tantan = 0;
            flag = 0;
            GetComponents<AudioSource>()[0].Stop();
            GetComponents<AudioSource>()[1].Play();

         

            if (winner == "とらんぷ")
            {

                trump += 1; // トランプの勝った回数に1を足す

            }

            else if (winner == "ばいでん")
            {

                biden += 1; // ばいでんの勝った回数に1を足す

            }
            Debug.Log(trump);
            Debug.Log(biden);
            
        }

        transform.Rotate(0, 0, this.tantan);
    }
}
これがルーレットを動かす側の現状のコードです。tantanっていうのはどんな文字でも大丈夫なのか確かめるために適当につけた言葉です。
+1
>
質問なのですが、このwinnerっていう器に”ばいでん”か”とらんぷ”のどっちかが入っていて、ルーレットを動かす方のクラスで、このどっちかが入っているwinnerを使って、教えていただいたコードをルーレットを止めた後に書き込んで、勝った方の数字が足されていくってイメージでよろしいのでしょうか?
はい。その通りです
winnerは今空っぽの状態なのは、
監督の持っているwinnerとルーレットの動きの持っているwinnerが別なものだからですね
なので、監督の持っているwinnerを教えてあげる必要があります

やりかたとしては、
public  監督 監督の参照;
みたいなコードを入れて、あとはUnityで監督のついているオブジェクトをそこにドラッグアンドドロップをしていくのですが、
すいません。こちらわかりやすい資料が見つかりませんでした
そうすることで監督の持っているwinnerを
監督の参照.winnerで取ってこれたりするのですが
0
なんとなく理解できた気がします!
ありがとうございました。がんばります!!
+1
出来ました!!
教えていただいた通りにして、if文の上にwinner=監督の参照.winner;でいけました
あとは数字のテキストと10勝した時のシーン移動だけです。
ありがとうございました!がんばります!!

関連する質問

0 支持
1 回答
melonpan77 初心者 (190 ポイント) 2020 12/12 質問 | 198 閲覧
0 支持
1 回答
teis1n 初心者 (120 ポイント) 2020 10/2 質問 | 135 閲覧
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

143 質問

146 回答

153 コメント

171 ユーザー