А теперь о проблеме:
Хотелось бы знать: как сделать так, что бы некоторые элементы интерфейса рисовались каждый кадр. Обрисую саму проблему. Мне необходимо что бы индикатор в приведенном ниже коде обновлялся каждый кадр (Кому лень читать весь код - смотрим в самый низ).
Синтаксис:
Используется javascript
public var bulletImpulse : int = 400; //Коофицент силы выстрела
public var maxPowerShotRate : int = 10; //Максимальный прирост от удержания
public var minPowerShotRate : int = 1; //Минимальный прирост от удержания
public var shootSpeed : int = 1; //Задержка перед следующим выстрелом
private var powerShoot : float; //Итоговая сила выстрела
private var lastShootTime : float; //Время последнего выстрела
private var shootMode : boolean; //Режим удержания, если он == тру, значит кнопка стрельбы удерживается.
private var startShoot : float; //Время начала удержания. Используется для рассчета силы выстрела исходя из времени удержания.
private var endShoot : float; //Время окончания удержания. Тоже, что и там ^^^
private var indicatorPowerShoot : float; //Переменная определяющая длинну линии, указывающей на то, какова будет сила встрелаа если прекратить удержание в данный момент.
public var bullet : GameObject; //Непосредственно снаряд, которым мы стреляем.
function Start() {
//Задаем изначальное значение некоторых переменных при старте
sootMode = false;
lastShootTime = 0;
}
function Update () {
//Если режим удержания == тру, то задать длинну индикатора удержания
if (shootMode == true) {
indicatorPowerShoot = Time.time - startShoot;
}
// Как только кнопка нажата, объявить режим удержания == тру, и зафиксировать время начала удержания.
if (Input.GetKeyDown(KeyCode.Mouse0)) {
shootMode = true;
startShoot = Time.time;
}
// Как только кнопка отжата...
if (Input.GetKeyUp(KeyCode.Mouse0)) {
//объявить режим удержания == фалс
shootMode = false;
// Если время прошедшее с момента последнего выстрела больше чем, задержка между выстрелами
if (Time.time>(lastShootTime + shootSpeed)) {
//Зафиксировать время окончания удержания...
endShoot = Time.time;
//И рассчитать силу выстрела
powerShoot = endShoot - startShoot;
// Если сила выстрела больше, или меньше заднных значений, вгоняем ее в рамки.
if (powerShoot < minPowerShotRate){
powerShoot = minPowerShotRate;}
if (powerShoot > maxPowerShotRate){
powerShoot = maxPowerShotRate;}
//Оъявляем о существовании нового снаряда
var bull_clone : GameObject;
//Добаляем клон снаряда.
bull_clone = Instantiate(bullet, transform.position, transform.rotation);
// Задаем физические свойства.
Physics.IgnoreCollision(bull_clone.collider, collider);
// Даем импульс для полёта.
bull_clone.rigidbody.AddForce(transform.forward*bulletImpulse*powerShoot, ForceMode.Impulse);
// Фиксируем время окончания выстрела, для рассчета задержки между выстрелами.
lastShootTime = Time.time;
}
}
}
function OnGUI () {
//Иммитируем прицел
var PositionCrossX = Screen.width/2-5;
var PositionCrossY = Screen.height/2-5;
GUI.Box (Rect (PositionCrossX,PositionCrossY,10,10),"");
//А вот тут, пониже, хотелось бы видеть удачную реализацию переменной "indicatorPowerShoot". Моя реализация работать не хочет =(
var positionBarX = Screen.width/2-40;
var positionBarY = Screen.height/2+30;
GUI.BOx (Rect (PositionCrossX,PositionCrossY,indicatorPowerShoot*2,5),"");
}
Не знаю, была ли необходимость приводить код целиком... Буду благодарен, если кто-то "расчехлит" меня по этому вопросу. За ранее спасибо.