2017-08-21 2 views
0

私は現在、スペースボタンを押すと基本的にオブジェクトを回転させるスクリプトを持っています。もう一度押すと、オブジェクトが停止します。簡単?スピード増分と減速でオブジェクトスピンを開始

どのようにして、Spaceキーを押してスピンを0からゆっくり(たとえば)1000スピン/分までのスピードにするかなどです。そして、私が宇宙を動かすと、スピードは0に戻ります。

は、ここで私がこれまで持っているものです。

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

public class spin : MonoBehaviour 
{ 
    public float speed = 500f; 
    public Button starter; 
    public Button stopper; 
    bool isSpinning = false; 

    IEnumerator spinnerCoroutine; 

    void Start() 
    { 
     spinnerCoroutine = spinCOR(); 
    } 

    void Update() 
    { 
     //Start if Space-key is pressed AND is not Spinning 
     if (Input.GetKeyDown(KeyCode.Space) && !isSpinning) 
     { 
      FidgetSpinnerStart(); 
     } 

     //Stop if Space-key is pressed AND is already Spinning 
     else if (Input.GetKeyDown(KeyCode.Space) && isSpinning) 
     { 
      FidgetSpinnerStop(); 
     } 
    } 

    IEnumerator spinCOR() 
    { 
     //Spin forever until FidgetSpinnerStop is called 
     while (true) 
     { 
      transform.Rotate(Vector3.up, speed * Time.deltaTime); 
      //Wait for the next frame 
      yield return null; 
     } 
    } 

    void FidgetSpinnerStart() 
    { 
     //Spin only if it is not spinning 
     if (!isSpinning) 
     { 
      isSpinning = true; 
      StartCoroutine(spinnerCoroutine); 
     } 
    } 

    void FidgetSpinnerStop() 
    { 
     //Stop Spinning only if it is already spinning 
     if (isSpinning) 
     { 
      StopCoroutine(spinnerCoroutine); 
      isSpinning = false; 
     } 
    } 
} 

乾杯!

+1

投稿する前にこれを行うように努力するべきだと思います。それは難しいことではありません。 'Input.GetKeyDown'を使用して、ボタンが離されたときにそれを検出する' Input.GetKeyUp'を検出します。インクリメント/デクリメントについては、コルーチンを使用してください。メソッド[here](https://stackoverflow.com/questions/45736799/decrease-variable-over-a-specific-amount-of-time/45737410#45737410)を参照してください。 – Programmer

答えて

0

変更:

public float speed = 500f; 

へ:

public float speed = 0f; 
public float maxspeed = 500f; 
public float acceleration = 1f; 

Updateでは、追加:

if (isSpinning) 
{ 
    if (speed < maxspeed) 
    { 
     speed += acceleration; 
    } 
    if (speed > maxspeed) 
    { 
     speed = maxspeed; 
    } 
} 
else 
{ 
    if (speed > 0) 
    { 
     speed -= acceleration; 
    } 
    if (speed < 0) 
    { 
     speed = 0; 
    } 
} 

は速くあなたのスピナーリーチの最大速度を作るためにaccelerationの値を増やします。

+0

それは実際には機能しませんでした。私は、少なくとも私がそれを望んでいた方法を説明したように、少なくとも私は意味しません。しかし、代わりにスペースが一度押されたときに0から設定速度に変わります。私はスピードを上げるためにSpaceボタンを押し続けなければならないので、速度を0に戻します。 – papi

+0

あなたのコードでは、スペースバーが最初に検出された押されたあなたはfidgetスピナーを止めるためにリリースされるときをチェックする必要があります。 – 0liveradam8

+0

そしてprobabyの加速はあなたが検出するには速すぎます。 1fでは、0から500に達するのはかなり速いです。 – Thalthanas

関連する問題