c# - 在画布内放置文本
问题描述
我想在 Canvas (Unity) 中渲染一些文本。
当我为我的游戏收集升级(例如“Power-up”)时,我的文字会出现。它呈现文本,但它始终位于屏幕的中心。那就是问题所在。它不会出现在升级的位置。
顺便说一句,画布设置为“屏幕空间 - 叠加”。文本在场景中间附近呈现。x 和 y 值很奇怪(几乎为零:x 是例如 -0.42,y 是 -0.79)。
字体参考:
public Font myFont;
生成文本的方法:
GameObject CreateText(Transform canvas_transform, float x, float y, string text_to_print, int font_size, Color text_color) {
GameObject UItextGO = new GameObject("Text2");
UItextGO.transform.SetParent(canvas_transform);
RectTransform trans = UItextGO.AddComponent<RectTransform>();
trans.anchoredPosition = new Vector2(x, y);
Text text = UItextGO.AddComponent<Text>();
text.text = text_to_print;
text.fontSize = font_size;
text.font = myFont;
text.color = text_color;
return UItextGO;
}
解决方案
(0,0)
是屏幕的中间。canvas_transform
您在此处 将文本设置为父级UItextGO.transform.SetParent(canvas_transform);
这意味着文本现在是对象的子对象,并且(0,0)
是文本对象的父对象的原点。
而不是这个trans.anchoredPosition = new Vector2(x, y);
,尝试这样的事情:(trans.transform.position = upgrade.transform.position;
如果(x,y)
位置肯定是升级位置。不需要upgrade.transform.position
。)
推荐阅读
- excel - 具有动态数组的大型函数
- python - 如果不满足要求,将类别合并到 1 个类别 - Python
- flutter - Flutter OverflowBox 在列中的下一个小部件后面
- bitcoin - Python USD 到 Satoshi
- c++ - 使用 `std::string_view` 参数并稍后将它们转换为 `std::string`?
- c++ - (Mac OS) 打开可执行 c++ 文件的问题
- c++ - vscode intellisense 找不到 cmake 项目中包含的头文件
- python - Selenium / Python:为什么在我的 for 循环迭代中找到第一个元素后,我的 Selenium find_element_by 不再找到元素?
- reactjs - Reactjs三元不显示返回
- android - 为什么我们需要在 Android Studio 中进行 Clean and Rebuild 项目