ここから本文です

Unityにおいて、キーボードの"S"を押したら次にもう一度押す時まで、ずっとオブジ...

sou********さん

2019/5/402:11:47

Unityにおいて、キーボードの"S"を押したら次にもう一度押す時まで、ずっとオブジェクトが回転するスクリプトを記述しようとしたのですが、全く動作しないスクリプトになってしまったため、

どなたかお力添えしていただければ助かります。
以下が実行コードになります。そもそも慣れてない面があるので、コードがおかしかったらビシビシ言っていただければ励みになります、、、

ちなみにコードのif文の中のwhile文は2回目のボタンを押すまでオブジェクトが回り続けるような感じをイメージしていました。


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

public class kaiten : MonoBehaviour
{
public float c = 1;


// Use this for initialization
void Start()
{

}

// Update is called once per framess
void Update()
{


if (Input.GetKeyUp(KeyCode.S))
{
while (c == 1)
{
transform.Rotate(new Vector3(transform.rotation.x, 0, 0));

if(Input.GetKeyDown(KeyCode.S))
{
c++;
}


}
}
}
}

閲覧数:
11
回答数:
1

違反報告

ベストアンサーに選ばれた回答

tot********さん

2019/5/409:55:15

whileの繰り返しは同フレーム内で行われるので無限ループします。
この場合S押さないとフリーズし続ける感じになるっぽいです。
whileを使いつつ1フレームずつの処理をするならコルーチンを使用してください。

まぁ今回の場合ならフラグ管理が簡単じゃないですかね。
transform.rotation.xだと変な回転になるのでそこだけ変えて以下の感じに。

bool flag = false;
// Update is called once per framess
void Update()
{
if(flag)
{
transform.Rotate(new Vector3(10/*適当*/, 0, 0));
}

if (Input.GetKeyDown(KeyCode.S))
{
flag = !flag;
}
}

質問した人からのコメント

2019/5/4 12:33:50

回答ありがとうございます。inputを一回しか使わなくてよかったんですね!、思うように動くようになって大変満足しています。助かりました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる