【发布时间】: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
-
完美像素实际上是在画布本身上。我正在浏览图像,到处都是,但在那里。嗬!无论如何,可悲的是,被检查的像素完美没有工作。感谢您对一切的建议!