質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%

Q&A

1回答

1447閲覧

Unityでスロットをぴったり止める

shincra

総合スコア14

0グッド

0クリップ

投稿2020/01/25 16:13

Unityにてスロット作成を始めた初心者です。
とりあえず、スペースを押した3秒以降に、111がy=0で止まるようにしたいのですが、
どうも下のスクリプトだとフリーズしてしまいます。(最終的に左→右→中央の順に数字が止まっていくものを作りたいです)もっと単純な構造があればそちらも含め教えていただきたいです。回答お待ちしています。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class SLOT : MonoBehaviour 6{ 7 public float leftspeed = 0; 8 public float rightspeed = 0; 9 public float centerspeed = 0; 10 11 12 GameObject left; 13 14 15 // Start is called before the first frame update 16 void Start() 17 { 18 left = GameObject.Find("1"); 19 } 20 21 // Update is called once per frame 22 void Update() 23 { 24 25 26 if (Input.GetKeyDown(KeyCode.Space)) 27 { 28 leftspeed += -0.1f; 29 rightspeed += -0.8f; 30 centerspeed += -0.8f; 31 32 StartCoroutine("Left"); 33 34 35 } 36 37 38 } 39 40 IEnumerator Left() 41 { 42 43 yield return new WaitForSeconds(3); 44 45 for (int i = 1; i > 0; i++) 46 { 47 float leftY = left.transform.position.y; 48 49 if (leftY == 0) 50 { 51 leftspeed = 0; 52 rightspeed = 0; 53 centerspeed = 0; 54 break; 55 56 57 } 58 59 } 60 } 61 62}

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class LEFT : MonoBehaviour 6{ 7 public GameObject gameobject; 8 SLOT script; 9 10 11 // Start is called before the first frame update 12 void Start() 13 { 14 gameobject = GameObject.Find("SLOTDirector"); 15 script = gameobject.GetComponent<SLOT>(); 16 } 17 18 // Update is called once per frame 19 void Update() 20 { 21 float num = script.leftspeed; 22 23 transform.Translate(0, num , 0); 24 if (transform.position.y < -8.0f) 25 { 26 transform.position = new Vector3(-5.0f, 80.0f, 0); 27 } 28 29 30 } 31}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shincra

2020/01/28 17:18

なるほど、近似でピッタリ止めることが出来ました。ですが、キーを押して3秒以降に止めるという条件を加えると、今のままではフリーズします。無限forの処理が原因だと思うのですが、他にやり方は思いつくでしょうか?
guest

回答1

0

floatはきっちり0になることはまずありません。

if (Mathf.Approximately(leftY,0.0f))と近似チェックするか、
if (-1.0f < leftY && leftY < 1.0f)と範囲内かの確認をしてみてください。

Unity - スクリプティング API: Mathf.Approximately

投稿2020/01/28 01:37

sakura_hana

総合スコア11425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問