2014-10-30 4 views
-1

Я пытаюсь масштабировать куб под названием barOil под функцией oilMeter() до значения batteryLife. Я видел, как люди говорили мне localScale, так как у меня нет другого выбора, но я не могу заставить его работать. Вот код:Unity Scale UnityScript

#pragma strict 

var flashlightLightSource : Light; 
var lightOn : boolean = true; 
var lightDrain : float = 0.1; 
var batteryLife : float = 0.0; 
var maxBatteryLife : float = 2.0; 

var barDisplay : float = 0; 
var pos : Vector2 = new Vector2(20,40); 
var size : Vector2 = new Vector2(60,20); 
var progressBarEmpty : Texture2D; 
var progressBarFull : Texture2D; 

var soundTurnOn : AudioClip; 
var soundTurnOff : AudioClip; 

var barOil : Transform; 


function Start() 
{ 
    batteryLife = maxBatteryLife; 
    flashlightLightSource = GetComponent(Light); 
} 

function Update() 
{ 

//BATTERY LIFE BRIGHTNESS////////// 
    if(lightOn && batteryLife >= 0) 
    { 
     batteryLife -= Time.deltaTime * lightDrain; 
    } 
     if(lightOn && batteryLife <= 0.4) 
    { 
     flashlightLightSource.light.intensity = 5; 
    } 
     if(lightOn && batteryLife <= 0.3) 
    { 
     flashlightLightSource.light.intensity = 4; 
    } 
    if(lightOn && batteryLife <= 0.2) 
    { 
     flashlightLightSource.light.intensity = 3; 
    } 
     if(lightOn && batteryLife <= 0.1) 
    { 
     flashlightLightSource.light.intensity = 2; 
    } 
      if(lightOn && batteryLife <= 0) 
    { 
     flashlightLightSource.light.intensity = 0; 
    } 



    barDisplay = batteryLife; 

    if(batteryLife <= 0) 
    { 
     batteryLife = 0; 
     lightOn = false; 
    } 

    if(Input.GetButtonDown("Light")) 
    { 
     toggleFlashlight(); 
     toggleFlashlightSFX(); 

     if(lightOn) 
     { 
      lightOn = false; 
     } 
     else if (!lightOn && batteryLife >= 0) 
     { 
      lightOn = true; 
     } 
    } 

    oilMeter(); 
} 

function oilMeter(){ 
    barOil.transform.localScale -= Vector3(batteryLife/maxBatteryLife,0,0); 
} 

function toggleFlashlight() 
{ 
    if(lightOn) 
    { 
     flashlightLightSource.enabled = false; 
    } 
    else 
    { 
     flashlightLightSource.enabled = true; 
    } 
} 
function toggleFlashlightSFX() 
{ 
    if(flashlightLightSource.enabled) 
    { 
     audio.clip = soundTurnOn; 
    } 
    else 
    { 
     audio.clip = soundTurnOff; 
    } 
    audio.Play(); 

} 

@script RequireComponent(AudioSource) 
+1

Почему вы вычитаете вектор? Похоже, тебе лучше настроить его. Какую проблему вы испытываете в точности с кодом? –

ответ

0

batteryLife/maxBatteryLife Дает вам соотношение оставшегося заряда батареи. Вы, вероятно, хотите, чтобы ваш масляный счетчик был масштабирован пропорционально. Для этого вам нужно знать, что такое полный размер бара. Я бы использовал редактор для разработки «полного» взгляда нефтяного бара. Затем измените начало сценария, как это:

var barOil : Transform; 
var fullBarSize : Vector3; 
var fullBarPosition : Vector3; 

function Start() 
{ 
    batteryLife = maxBatteryLife; 
    flashlightLightSource = GetComponent(Light); 
    fullBarSize = barOil.localScale; 
    fullBarPosition = barOil.localPosition; 
} 

Тогда это зависит от того, где происхождение вашего barOil спрайта или объекта. Предполагая, что это находится в середине вы измените функцию oilMeter следующим образом:

function oilMeter() 
{ 
    var ratio = batteryLife/maxBatteryLife; 
    barOil.localScale = Vector3(ratio * fullBarSize.x, fullBarSize.y, fullBarSize.z); 
    barOil.localPosition = Vector3(fullBarPosition - 0.5 * ratio * fullBarSize.x, fullBarPosition.y, fullBarPosition.z); 
} 

Ключ в том, что вы регулировать как размер и положение так, чтобы левая (или, если вы предпочитаете право) край остается там, где она есть. Вы используете оригинальные размеры, потому что текущий размер продолжает меняться. Масштабирование, которое не даст вам размер бара, который вам нужен.

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