统一。如何在脚本中更改精灵

时间:2014-07-14 06:58:22

标签: unity3d

我试图在特定按钮上更改精灵,我已经尝试过这段代码:

#pragma strict

var velocity : int = 8;
var sprite : SpriteRenderer;

function Start ()
{
    sprite = GetComponent(SpriteRenderer);
}

function Update ()
{
    if(Input.GetKey(KeyCode.LeftArrow))
    {
        sprite.sprite = Resources.Load("mario_3", typeof(Sprite));
        transform.Translate(Vector2.right * -1 * velocity * Time.deltaTime);
    }

    if(Input.GetKey(KeyCode.RightArrow))
    {
        sprite.sprite = Resources.Load("mario_3", typeof(Sprite));
        transform.Translate(Vector2.right * velocity * Time.deltaTime);
    }
}

这里我只是对sprite感兴趣,我有一个多精灵分裂但是当我按下按钮看它是否有效时,精灵消失了,我做了调试日志就看了正在发生的事情以及它提示的是当脚本尝试更改时该脚本为空。

我已经通过互联网看到了一些例子并且他们没有帮助,我也看了一下脚本参考,在这种情况下看起来似乎没那么有用

2 个答案:

答案 0 :(得分:0)

首先," mario_3"肯定存在于您的Resources文件夹中?

Resources.Load不起作用,除非它位于资源文件夹中,符合Unity documentation(我的重点强调):

  

如果可以找到,则返回路径上的资产,否则返回null。如果提供此参数,则仅返回类型的对象。 路径相对于项目的Assets文件夹中的任何Resources文件夹,必须省略扩展名。

其次,请确保在路径名中包含所有子文件夹(例如,如果精灵的路径为Sprites/mario_3,则为Resources/Sprites/mario_3

最后,我建议预先加载这些精灵(例如在开始时),而不是每次按键,因为这可能会导致严重的性能问题。

答案 1 :(得分:0)

您可以在脚本开头为sprite创建变量,然后在检查器中设置它们。

var spriteMario3: Sprite;

之后您可以在脚本中使用它:

sprite.sprite = spriteMario3;

但请记住,您需要在UnityEditor中从检查器更改spriteMario3。

我希望它可以帮到你。

您的代码如下所示:

#pragma strict

var spriteMario3: Sprite;
var spriteMario4: Sprite;

var velocity : int = 8;
var sprite : SpriteRenderer;

function Start ()
{
    sprite = GetComponent(SpriteRenderer);
}

function Update ()
{
    if(Input.GetKey(KeyCode.LeftArrow))
    {
        sprite.sprite = spriteMario3;
        transform.Translate(Vector2.right * -1 * velocity * Time.deltaTime);
    }

    if(Input.GetKey(KeyCode.RightArrow))
    {
        sprite.sprite = spriteMario4;
        transform.Translate(Vector2.right * velocity * Time.deltaTime);
    }
}