2015-06-02 6 views
1

Я создаю приложение, которое превращает сферу, которая является землей, когда w нажата, чтобы ускорить ее, и s используется, чтобы замедлить ее. Однако я не могу узнать, как увеличить скорость. Вот мой код:Как увеличить счетчик, пока нажата клавиша Unity?

using UnityEngine; 
using System.Collections; 
public class Spin : MonoBehaviour{ 

public float speed; 

void Update() 
{ 
    transform.Rotate(Vector3.up,speed * Time.deltaTime); 
    if (Input.GetKey ("escape")) { 
     Application.Quit(); 
    } 
    if (Input.GetKey ("w")) { 
     transform.Rotate(Vector3.up,speed + 1); 

    } 
    if (Input.GetKey ("s")) { 
     transform.Rotate(Vector3.up,speed - 1); 

    } 
} 
} 

Кто-нибудь есть какие-либо идеи, как я могу увеличить скорость для того, как долго будет нажата кнопка?

P.S Я хотел бы написать в C#

ответ

1

Оправдание мое отсутствие знаний с Unity, но это похоже на ваше, если заявления не обновлять значение speed. Как и сейчас, если клавиша нажата, вы только вращаетесь со значением speed + 1. Но скорость никогда не меняется.

Возможно, попробуйте что-нибудь подобное?

if (Input.GetKey("w")) 
{ 
    transform.Rotate(Vector3.up, speed + 1); 
    speed++; 
} 
1
void Update() 
{ 
    transform.Rotate(Vector3.up,speed * Time.deltaTime); 
    if (Input.GetKey ("escape")) { 
     Application.Quit(); 
    } 
    if (Input.GetKey ("w")) { 
     transform.Rotate(Vector3.up,speed++); 
    } 
    if (Input.GetKey ("s")) { 
     transform.Rotate(Vector3.up,speed--); 
    } 
} 

Если вы используете speed++ он будет использовать speed как для В параметре метода transform.Rotate и только тогда увеличит его .

Если вы, с другой стороны, используете ++speed, то он будет первым приращить его, а затем использовать его как параметр.

То же самое касается speed-- и --speed.

+0

Хороший ответ, и очевидно, что ОП не знает, что это делает или он использовал бы его. Как объяснение, 'speed ++' совпадает с 'speed + = 1'. Это переназначение с приращением. – Dagrooms

+0

'speed ++' не может быть хорошей идеей, время между двумя кадрами не фиксировано – Kryptos

1

Что вам нужно, это своего рода ускорение. Помните, что на каждом кадре вызывается Update, и частота кадров меняется.

Итак, добавьте поле acceleration в свой скрипт. Затем увеличьте скорость на величину разгона deltaTime между двумя кадрами.

void Update() { 
    if (Input.GetKey ("escape")) { 
     Application.Quit(); 
    } 

    // calculate new speed 
    if (Input.GetKey ("w")) { 
     speed += acceleration*Time.deltaTime; 
    } 
    else if (Input.GetKey ("s")) { 
     speed -= acceleration*Time.deltaTime; 
    } 

    // apply speed 
    transform.Rotate(Vector3.up, speed*Time.deltaTime); 
} 

Обратите внимание, что так как вы используете эту скорость для вращения, единица speed является степень/с и единицей acceleration является степень/(s^2).

Смежные вопросы