почему мой индикатор работоспособности GUI стекает с обоих направлений, а не только с одного направления? - PullRequest
0 голосов
/ 26 ноября 2018

Я думаю, это потому, что я не сказал через код, в каком направлении я хочу, чтобы он истощался, но я подумал, что это уже очевидно для единства, так как это настройка, которую я имею для Тип изображения GUI в иерархии, заполнена иFill Origin установлен влево.Несмотря на это, я предполагаю, что что-то в моем коде говорит, что это стекает с обеих сторон, может быть ??мои жизненные полосы истощаются с обеих сторон, но я хочу, чтобы они истощались только слева.У кого-нибудь есть решения?

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

public class meterDrain : MonoBehaviour {

public float maxHungerMeter = 100f;
public float curHungerMeter;
public RectTransform hungerMeter;

public float maxThirstMeter = 100f;
public float curThirstMeter;
public RectTransform thirstMeter;

public float maxEnergyMeter = 100f;
public float curEnergyMeter;
public RectTransform EnergyMeter;

public float maxBowelsMeter = 100f;
public float curBowelsMeter;
public RectTransform bowelsMeter;

public float maxMoraleMeter = 100f;
public float curMoraleMeter;
public RectTransform moraleMeter;


void Start () 
{
    curHungerMeter = maxHungerMeter;    
    curThirstMeter = maxThirstMeter;
    curEnergyMeter = maxEnergyMeter;
    curBowelsMeter = maxBowelsMeter;
    curMoraleMeter = maxMoraleMeter;
}

// Update is called once per frame
void Update ()
{
    TakeDamage ();
}

void TakeDamage(float amount = 10f){    //as of now the meters are being drained towards the middle from both sides. need to fix that
    {
        curHungerMeter -= amount * Time.deltaTime;
        curThirstMeter -= amount * Time.deltaTime;
        curEnergyMeter -= amount * Time.deltaTime;
        curBowelsMeter -= amount * Time.deltaTime;
        curMoraleMeter -= amount * Time.deltaTime;
    }

    if (hungerMeter == null)    //for some reason, this is being applied all meters besides hunger, even though i didn't tell it to. *shrugs* works for me.
        return;

    hungerMeter.sizeDelta = new Vector2 (curHungerMeter, hungerMeter.sizeDelta.y);
    thirstMeter.sizeDelta = new Vector2 (curHungerMeter, thirstMeter.sizeDelta.y);
    EnergyMeter.sizeDelta = new Vector2 (curHungerMeter, EnergyMeter.sizeDelta.y);
    bowelsMeter.sizeDelta = new Vector2 (curHungerMeter, bowelsMeter.sizeDelta.y);
    moraleMeter.sizeDelta = new Vector2 (curHungerMeter, moraleMeter.sizeDelta.y);



}
}



//The edited script that now works...

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

public class meterDrain : MonoBehaviour {

private float drainTime = 10f;
private float maxHungerMeter = 100f;
public float curHungerMeter;
public Image hungerMeter;

private float maxThirstMeter = 100f;
public float curThirstMeter;
public Image thirstMeter;

private float maxEnergyMeter = 100f;
public float curEnergyMeter;
public Image energyMeter;

private float maxBowelsMeter = 100f;
public float curBowelsMeter;
public Image bowelsMeter;

private float maxMoraleMeter = 100f;
public float curMoraleMeter;
public Image moraleMeter;


void Start () 
{
    curHungerMeter = maxHungerMeter;    
    curThirstMeter = maxThirstMeter;
    curEnergyMeter = maxEnergyMeter;
    curBowelsMeter = maxBowelsMeter;
    curMoraleMeter = maxMoraleMeter;
}

// Update is called once per frame
void Update ()
{
    TakeDamage ();
}

void TakeDamage(float amount = 10f){    
    {
        curHungerMeter -= amount * Time.deltaTime;
        curThirstMeter -= amount * Time.deltaTime;
        curEnergyMeter -= amount * Time.deltaTime;
        curBowelsMeter -= amount * Time.deltaTime;
        curMoraleMeter -= amount * Time.deltaTime;
    }

    if (hungerMeter == null) {
        return;
    }
        else
        {
            hungerMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
    }

    if (thirstMeter == null) {
        return;
    }
    else
    {
        thirstMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
    }

    if (energyMeter == null){
        return;
    }   
    else
    {
        energyMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
    }

    if (bowelsMeter == null){ 
        return;
    }
    else
    {
        bowelsMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
    }

    if (moraleMeter == null){ 
        return;
    }
    else
    {
        moraleMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
    }
}
}

1 Ответ

0 голосов
/ 26 ноября 2018

Вы изменяете размер своей шкалы здоровья, устанавливая ее RectTransform, вместо этого вы хотите изменить Заполнить сумму компонента изображения .Чтобы это работало, вам нужно изменить тип объектов вашего счетчика (hungerMeter и т. Д.) На тип Image.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...