在被杀角色上方创建GUI文本

本文关键字:创建 GUI 文本 方创建 角色 | 更新日期: 2023-09-27 18:19:34

我正在制作一个自上而下的2D游戏,我不知道如何在角色死亡时将文本放置在角色上方。

我用一个空的游戏对象创建了一个预制件,上面连接了一个GUIText组件。当我的对象死了,我需要在它上面创建预制件。当对象死了时,预制件在正确的位置创建,但文本通常远离屏幕。。。它为什么这么做?

这是代码:

void destroySelf(){
    Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
    GameObject obj = GameObject.Instantiate(pointsTxt, transform.position / 0.1f, Quaternion.identity) as GameObject;
    obj.GetComponent<GUIText>().text = "+" + killPoints.ToString();
    Destroy(transform.parent.gameObject);
}

在被杀角色上方创建GUI文本

GUIText世界定位在0..1范围内工作。transform.position = Vector3(0,0,0)相当于屏幕的左下角;transform.position = Vector3(1,1,0)位于屏幕的右上角。

使用WorldToScreenPoint,您的想法是正确的;现在你只需要得到0..1范围内的位置值:

Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
pos.x = pos.x / Screen.width;
pos.y = pos.y / Screen.height;
GameObject obj = GameObject.Instantiate(pointsTxt, pos, Quaternion.identity) as GameObject;

或者,您可以将GUIText的位置保留为Vector3.zero(默认值为Instantiate),并更改其pixelOffset值:

Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
GameObject obj = GameObject.Instantiate(pointsTxt) as GameObject;
GUIText text = obj.GetComponent<GUIText>();
text.pixelOffset.x = pos.x;
text.pixelOffset.y = pos.y;

您也可以使用TextMesh而不是像这样的GUITexthttp://answers.unity3d.com/questions/13625/procedurally-generate-a-textmesh.html

var textMesh = gameObject.AddComponent<TextMesh>();
textMesh.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
var meshRenderer = gameObject.GetComponent<MeshRenderer>();
meshRenderer.material = textMesh.font.material;
textMesh.fontSize = 16;
textMesh.alignment = TextAlignment.Center;
textMesh.anchor = TextAnchor.MiddleCenter;
textMesh.text = "Hello";