Unity5-GUI-HP-Bar Проблема - PullRequest
       5

Unity5-GUI-HP-Bar Проблема

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

Итак, я разработал собственную полосу HP и выровнял ее так, как мне бы хотелось, чтобы она выглядела так же, как я хотел бы, чтобы она выглядела.

Supposed to look like this

Однако, когда я нажимаю кнопку воспроизведения (не в полноэкранном режиме, даже не проверял), фон изображения либо слегка сдвигается вправо, либо изображение зеленого заполнителя скользит влево.

No supposed to look like this

Понятия не имею, почему он это делает или как это исправить. Я готов предложить любую необходимую вам информацию, такую ​​как код или снимки экрана инспектора.

Это снимок экрана панели, как на холсте сцены.

Actual SceneView of the GUI bar

You can see that the bar works fine when NOT Playing the game

Как видно, когда кнопка Play не нажата, панель работает нормально. Приведенный выше рисунок наполовину полон. На изображении ниже пусто.

Supposed to look when empty

Часть 2 выпуска:

У меня также возникают проблемы с тем, что панель HP правильно вращается вместе с плеером.

Supposed to look like this

Однако, когда я поворачиваю влево или вправо или вверх:

player Facing up bar should be behind not in front

Player Facing Right[![][8]] 9

Таким образом, вы можете видеть, что панель HP не вращается должным образом с движением игрока; хотя он и следует идеально, планка не вращается соответственно. Я могу предоставить некоторый код движения и код, который я использую для отслеживания положения игрока. Я создал сферу и прикрепил ее к игроку. Затем я прикрепил скрипт для отслеживания игрока в этой сфере. Затем я удалил рендеринг сетки и коробочный коллайдер сферы.

Сценарий панели состояния

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

public class PHealth : MonoBehaviour {

[Header("HP Bar Images")]
[SerializeField]
private Image HpBarBG;
[SerializeField]
private Image HpBarFillBar;
private float imgFill = 1;





void Update () {
   FillBar()
}
private void FillBar(){
   HpBarFillBar.fillAmount = imgFill;
}


}

Скрипт движения игрока

public GameObject player;
public Vector3 localscale;
// public Transform start, end;

[SerializeField]
private float speed = 5;



void Start () {

}

// Update is called once per frame
void Update ()
{
    /*
                ******** RAYCAST TO DETECT WALLS BELOW *******
     */
   //  WallDetection(); //Cast ray to detect walls

    /*
           *********      MOVEMENT CODE BELOW       *********
     */
    if (Input.GetKey(KeyCode.W)|| Input.GetKey(KeyCode.UpArrow)) // Move 
        Forward
    {
        player.transform.Translate(Vector2.up * speed * Time.deltaTime, 
        Space.World);
        transform.eulerAngles = new Vector2(0, 180);
    }
    }//End of class

1 Ответ

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

Я бы рекомендовал добавить ваш код к вашему вопросу, чтобы у нас была полная картина. Прежде чем сделать это, я могу только дать вам некоторые рекомендации и предложения. Я исправлю этот ответ, чтобы потом он стал реальным.

В то же время, какой тип холста вы используете? Судя по иерархии, я думаю, что это в любом из режимов пространства экрана. Рассматривали ли вы холст мирового пространства, созданный для вашего игрока? Я верю, что он будет естественно вращаться так, как вы хотите. Могут ли игроки увеличивать и уменьшать масштаб, и вращение персонажа игрока фиксировано с шагом в 90 градусов?

Кроме того, вы уверены , что хотите, чтобы полоса здоровья вращалась? Быть с ног на голову? Не лучше ли будет зафиксировать его в обычном положении, выше спрайта персонажа, даже если это технически «ниже» персонажа в то время?

Наконец, если вы не возражаете, я спрашиваю: почему Unity 5? После этого было выпущено несколько основных релизов, и 2018 год почти подходит к концу. Хотя, если быть честным, я не знаю, будет ли версия иметь какое-либо значение для этого, поэтому мне просто любопытно.

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