2016-10-11 3 views
0

Когда я нажимаю стрелку влево, я хочу масштабировать спрайт, и когда я нажимаю стрелку вправо, я хочу увеличить спрайт. Я сделал этот код, и он работает, но он идет безумно быстро. Если я нажимаю кнопку в течение 1 секунды, она масштабируется до 1 миллиона раз. Что я делаю не так? scalingSpeed похож на 0,0001, и все равно он сходит с ума.Масштабирование спрайта, нажимая кнопки слишком быстро

if(Input.GetKey (KeyCode.LeftArrow)) { 
    this.transform.localScale -= new Vector3 (this.transform.localScale.x - scalingSpeed, this.transform.localScale.y - scalingSpeed, 0); 
} else if (Input.GetKey (KeyCode.RightArrow)) { 
    this.transform.localScale += new Vector3 (this.transform.localScale.x - scalingSpeed, this.transform.localScale.y - scalingSpeed, 0); 
} 
+0

Вы могли бы найти решение вашей проблемы? Если ответы не дают то, что вам нужно, добавьте здесь комментарий или отредактируйте свой вопрос, чтобы уточнить. Благодаря! – Serlite

ответ

0

Похоже, что он будет срабатывать при каждом событии GetKey. Это более одного раза при нажатии клавиши, как говорят документы "Think auto fire". Вам нужно ограничить его одним раз для каждого нажатия клавиши.

Посмотрите на Input.GetKeyDown

1

Проблема здесь состоит в том, что ваш код масштабирования не линейно изменяет localScale спрайта - это практически экспоненциальный! Рассмотрим следующий пример:

localScale += new Vector3 (localScale.x - scalingSpeed, localScale.y - scalingSpeed, 0); 

переводит:

localScale = localScale + new Vector3 (localScale.x - scalingSpeed, localScale.y - scalingSpeed, 0); 

Это означает, что каждый кадр, вы не добавляя вектор-эквивалентное значение scalingSpeed к localScale - вы добавляете разницу между localScale и scalingSpeed до localScale, который намного, намного больше (почти в два раза localScale каждый кадр).

Использование как +=, так и изменение каждого компонента localScale является излишним. Мое предложение? Не вычитать scalingSpeed от каждого компонента localScale - вместо того, чтобы умножить его Vector3.one и добавить/вычесть, что вместо того, чтобы:

if(Input.GetKey (KeyCode.LeftArrow)) { 
    this.transform.localScale -= Vector3.one * scalingSpeed; 
} else if (Input.GetKey (KeyCode.RightArrow)) { 
    this.transform.localScale += Vector3.one * scalingSpeed; 
} 

Надеется, что это помогает! Дайте знать, если у вас появятся вопросы.

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