新しい処理を1つ追加します。キーボードの R ボタンを押したら、回転方向が現在の回転方向を反対方向になるようにします。
つまり、逆回転時に R ボタンを押すと正回転(時計周り)になり、正回転時に R ボタンを押すと逆回転になる、という機能です。
ヒントは、回転している向きの状態を管理する、ことです。
現在は回転している向きの情報は、スクリプトでは管理していません。まずは、この回転している向きの情報を管理できるように、変数を用意します。
Aという状態なら逆回転、Bという状態なら正回転、というように、役割を与えて考えてみましょう。このような2つの状態の判定に使える型があります。
情報を管理できるようになったら、次は、その情報と R ボタンの入力とを紐づける必要があります。
R ボタンが押されたら、という処理は制御文で処理が可能です。その処理の内容に、先ほど用意した回転の向きを管理する変数に対して代入します。
最後に、この回転の向きの情報に合わせて、回転速度を設定する変数の値も変化させる必要があります。
逆回転のときの速度の値と正回転の時の速度の値が同じでは、どちらも同じ回転になってしまいますので、これも制御文を使って管理します。
実装動画
https://gyazo.com/f52c326f9a08cc25693f99a095d82b70
インスペクターの動画(逆回転と正回転での数字の違い)
https://gyazo.com/39e40c3d397a7650c621c99bf6bb5946
回答例
RouletteController.cs
<= クリックすると回答例が開きます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RouletteController : MonoBehaviour
{
float rotSpeed = 0;
public float velocity = 5.0f;
bool isReverse = false; // 回転向きの状態を管理する。false = 正回転、true = 逆回転とする
void Start()
{
}
void Update()
{
if (Input.GetMouseButtonDown(1)) {
this.rotSpeed = 0;
Debug.Log("Stop");
}
////* ここから追加します *////
if (Input.GetKeyDown(KeyCode.R)) {
if (isReverse == false) {
isReverse = true;
Debug.Log("Reverse");
} else {
isReverse = false;
Debug.Log("Normal");
}
}
////* ここまで追加します *////
if (Input.GetMouseButtonDown(0)) {
////* ここから修正します *////
if (isReverse == false) {
this.rotSpeed = velocity;
} else {
this.rotSpeed = -velocity;
}
////* ここまで修正します *////
}
transform.Rotate(0, 0, this.rotSpeed);
//this.rotSpeed *= 0.96f;
}
}
以上でこの課題は終了です。おつかれさまでした。もしもわからない部分がありましたら、もう一度、挑戦してみてください。