如何在特定位置放置纹理(Unity)

时间:2014-04-20 17:25:22

标签: unity3d textures placement

我目前正在使用Unity游戏引擎开发游戏,现在我正在尝试做一个简单的用户界面:在屏幕的左上角放置纹理(心脏)以及代表文本玩家拥有的生命数量。文本部分很简单,但我在纹理上挣扎,现在尝试了几种方法,似乎无法让它发挥作用。我使用的代码如下:

使用UnityEngine;

使用System.Collections;

公共课健康:MonoBehaviour {

private int currentHealth;
private int startHealth;
private int maxHealth;
private Vector2 topLeftCorner;

public Texture2D heart;

// Use this for initialization
void Start () {
    startHealth = 3;
    maxHealth = 100;
    topLeftCorner = new Vector2 (0, 0);
    heart = new Texture2D (128,128);
    PlaceHeart (topLeftCorner, heart);
}

void PlaceHeart (Vector2 place, Texture2D img)
{
    float x = place.x * Screen.width;
    float y = place.y * Screen.height;
    GUI.Label(new Rect (x, y, img.width, img.height), img);
}

public void modifyHealth(int amount) {
    currentHealth += amount;
    // Prevent health from being < 0 or > maxHealth
    currentHealth = Mathf.Clamp(currentHealth,0,maxHealth);

}

}

我在Unity检查器中分配了与纹理(心脏)对应的变量,但是我仍然得到(基本)错误:&#34; NullReferenceException:对象引用未设置为对象的实例&#34 ;我有一点时间可以理解。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

删除行

可能很容易
heart = new Texture2D (128,128);

来自您的代码。您在Inspector中设置的任何内容都不需要在脚本中创建。

答案 1 :(得分:0)

您现在拥有的代码无法使用,因为您尝试使用GUI OnGui()以外new operator

以外的TeamViewer种方法

那就是说,你应该停止使用GUI方法并使用由小精灵和梦想组成的only work inside OnGui()

基本上,您可以转到GameObject菜单,UI,Image。画布将为您设置,屏幕空间是完美的,只需缩小并输入2D视图,激活RectTransform工具(它是刻度旁边的那个正方形)来定位白色框,然后在检查器中指定您可以分配一个精灵(所以它看起来像一颗心,而不是白色)。

the New Unity 4.6 UI