【问题标题】:Unity. How to change sprite in script统一。如何在脚本中更改精灵
【发布时间】:2019-09-10 19:01:15
【问题描述】:

我正在尝试在特定按钮上更改精灵,我已经尝试过以下代码:

#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);
    }
}

这里我只是对精灵感兴趣,我已经拆分了多个精灵,但是当我按下按钮查看它是否有效时,精灵消失了,我在上面创建了一个调试日志以查看发生了什么它提示的是脚本在尝试更改时为空。

我通过互联网看到了一些示例,但它们没有帮助,我还查看了脚本参考,在这种情况下似乎没有那么有用

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    首先,“mario_3”肯定存在于您的资源文件夹中吗?

    Resources.Load 不工作,除非它在资源文件夹中,根据Unity documentation(我的粗体强调):

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

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

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

    【讨论】:

    • 好吧.. 精灵来自一个名为 mario 的分割精灵。我想在其中使用的精灵名称为 mario_3 或 4,所以我必须设置原始精灵的路径而不是分割的路径?
    • 在 Unity 中找到文件正确路径的一个简单技巧是右键单击它并(在 Windows 中)单击“在资源管理器中显示”,我假设有一个类似的“在 Finder 中显示”选项如果你在 Mac 上。然后右键单击该文件,并查看它的路径。
    【解决方案2】:

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

    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);
        }
    }
    

    【讨论】:

    • 我想到了那个解决方案,但那些不会是唯一不合适的精灵,我有太多来自一个精灵
    • 然后你可以使用尼克的答案,将你的精灵表放在“Assets/Resources”文件夹中,然后你可以使用 Resources.Load("mario_3", typeof(Sprite));
    猜你喜欢
    • 2019-03-21
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多