【问题标题】:Unity5-GUI-HP-Bar IssueUnity5-GUI-HP-Bar 问题
【发布时间】:2018-11-11 21:53:43
【问题描述】:

因此,我设计了一个自定义 HP 条并将其对齐到我希望它的位置以及我希望它的外观。

但是,当我按下播放键时(不是全屏模式,甚至还没有测试过),图像背景会稍微向右滑动,或者绿色填充图像会向左滑动。

我不知道它为什么这样做或如何解决它。我愿意提供您需要的任何信息,例如检查员的代码或屏幕截图。

这是该栏在场景视图画布中的屏幕截图。

如您所见,当未按下 Play 时,该栏正常工作。上图是半满。下图是空的。

问题的第 2 部分:

我也遇到了 HP 条随播放器正确旋转的问题。

但是,当我左转或右转或面朝上时:

]9

所以你可以看到血条没有随着玩家的移动而正确旋转;尽管它确实完美地跟随,但条形图并没有相应地旋转。我可以提供一些移动代码和我用来跟踪玩家位置的代码。我所做的是创建一个球体并将其附加到玩家身上。然后我将用于跟踪玩家的脚本附加到该球体上。然后我移除了球体的网格渲染和盒子碰撞器。

健康栏脚本

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

【问题讨论】:

  • 第一个猜测是精灵(或 UI 元素)未设置为 Pixel Perfect 渲染,因此由于浮点数学而导致偏移。另一个问题是一个单独的问题。此外,出于性能原因,您应该取消选中raycast target,除非您希望玩家能够点击该对象。
  • 是的,正在制定第二个问题。我想让这个主题尽可能广泛,这样我就不必发布另一个问题。我将研究像素完美渲染,希望这就是答案!最后,感谢对光线投射目标的解释。那时候我想过那个!如果像素完美解决了这个问题,我会告诉你的。谢谢芽! @Draco18s
  • 注意:“太宽泛”是结束问题的原因。 Stack Overflow 专注于单一的、可回答的问题。
  • 是的,我注意到 StackOverflow 有时似乎有点发牢骚,而且对小事很严格。如果我绝对必须,我将删除我的 GUI 相关问题的第 2 部分(对我来说似乎是主题......)。无论如何,我无法弄清楚 Pixel Perfect 的 UI 元素在哪里。@Draco18s
  • 完美像素实际上是在画布本身上。我正在浏览图像,到处都是,但在那里。嗬!无论如何,可悲的是,被检查的像素完美没有工作。感谢您对一切的建议!

标签: c# unity3d


【解决方案1】:

我建议将您的代码添加到您的问题中,以便我们了解全貌。在你这样做之前,我只能给你一些建议和建议。 我会修改这个答案,让它成为真正的答案。

与此同时,您使用的是什么类型的画布?从层次结构来看,我想它处于任何一种屏幕空间模式。您是否考虑过以您的播放器为父级的世界空间画布?我相信它会自然地以您想要的方式旋转。玩家可以放大缩小吗,玩家角色的旋转是否固定为90度增量?

此外,您确定要旋转健康栏吗?要倒过来?将其固定在角色精灵上方的常规位置不是更好的主意,即使从技术上讲,这在当时是在角色“下方”?

最后,如果您不介意我问:为什么是 Unity 5?之后发布了几个主要版本,2018 年即将结束。虽然公平地说,我不知道这个版本是否会对此产生任何影响,所以我只是好奇。

【讨论】:

  • 虽然没有错,但这并不能真正回答问题,可能更适合发表评论。我知道您没有足够的代表发表评论,诸如此类的答案通常会被关闭。
  • 我想会是这样,但正如第一段所述,一旦提供了额外的细节,我很乐意修改我的答案以提供解决方案。此外,作为一个长期潜伏者,我已经看到很多类似注释的建议作为答案存在。不过,我会编辑我的帖子以使通知更清晰。
  • @vewonimire 感谢您的反馈。我目前正在使用 Screen Space-Overlay 画布。我将尝试使用 World Space 相机并让您知道这是否能解决我的问题。至于旋转,我不希望它倒转。我只希望它在玩家身后的固定位置跟随,无论方向如何。该游戏是 2-D 自上而下的,目前没有缩放功能。为了满足您的好奇心,我实际上认为我正在使用 Unity 2018 并提供一个更新。但是,我坚持使用 Unity 2019,这将是一个非常非常好的改进!我等不及了!
  • @vewonimire 好的兄弟,我已经尝试过世界空间画布,我不得不调整 HP 条的大小并重新调整它。真的没问题。现在我遇到了当我按下播放时,HP 栏消失的问题。我的代码并不是非常复杂。我会把它贴在 A.S.A.P. 页面的顶部
  • 很高兴听到这个消息,谢谢!我自己已经等不及 2019 年了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多