我们希望游戏中显示的分数是专门设计的数字字体。
我们从0
〜9
获得了png格式的数字,我认为将它们放在Texture[]
数组中并相应地显示它会很简洁。
以下是desplay控制器脚本
public class StepDespController : MonoBehaviour {
public static StepDespController instance;
private int step = 0;
[SerializeField]
public Texture[] numberTextures;
private void Awake()
{
if(instance == null)
{
instance = this;
}
}
public void addStep(int step)
{
this.step += step;
}
private void OnGUI()
{
char[] array = step.ToString().ToCharArray();
Debug.Log(array);
for (int i = 0; i < array.Length; i++)
{
GUI.DrawTexture(new Rect(0 + i * 30, 0, 20, 30), numberTextures[(int)char.GetNumericValue(array[i])]);
}
}
}
以下是来自0
〜9
的数字纹理的绑定:
但我发现它不会在游戏场景中显示任何内容,我错过了什么?
感谢。
答案 0 :(得分:1)
这是你的问题:
char[] array = step.ToString().ToCharArray();
Debug.Log(array);
for (int i = 0; i < array.Length; i++)
{
GUI.DrawTexture(new Rect(0 + i * 30, 0, 20, 30), numberTextures[(int)char.GetNumericValue(array[i])]);
}
我建议您只使用它来代替这样做:
const int offset_step = 30; // declare standard step size
int offsetX = 0; // declare starting x offset
foreach(char c in step.ToString()) // iterate through all characters in your score value as string value
{
// draw texture on index `char - (char)'0'`
GUI.DrawTexture(new Rect(offsetX, 0, 20, 30), numberTextures[(int)(c - 0x30)]);
offsetX += 30; // increase offset
}
稍微扩展这个答案。 char
是字符的2字节宽数字表示(可打印或不可打印)。由于您只想显示数值,因此您必须记住,这些值从0
开始,0x30
最终为9
,其中0x39
为ASCII,且相同CP#51由C#使用。现在你需要做的就是,因为你的0
纹理是数组中的“第0个”元素,就是从你的角色中减去ASCII数字字符的开头。
简单示例:
char zero = '0'; // 0x30
char one = '1'; // 0x31
// when you do `one == 1`
// it translates to `0x31 == 0x01` which is false
// now consider this `one - zero == 1`
// above will return true because
// 0x31 - 0x30 == 0x01
// 0x01 == 0x01