C# 通过商店更换玩家精灵

C# 通过商店更换玩家精灵,c#,unity3d,C#,Unity3d,我正在尝试创建一个商店,在那里你可以从游戏中的货币购买不同的玩家精灵。(商店是一个独立于关卡的场景)我被告知使用scriptableobject是一个不错的选择,因此我做了以下几点: [CreateAssetMenu(fileName = "New Sprite", menuName = "Player Sprites")] public class PlayerSprites : ScriptableObject { public string spriteName; publ

我正在尝试创建一个商店,在那里你可以从游戏中的货币购买不同的玩家精灵。(商店是一个独立于关卡的场景)我被告知使用scriptableobject是一个不错的选择,因此我做了以下几点:

[CreateAssetMenu(fileName = "New Sprite", menuName = "Player Sprites")]
public class PlayerSprites : ScriptableObject
{
    public string spriteName;
    public int cost;
    public Sprite sprite;
}
我刚刚添加到播放器脚本中

public SpriteRenderer spriteRenderer;

void Start()
{
    spriteRenderer = GetComponent<SpriteRenderer>();
}
公共喷壶喷壶;
void Start()
{
spriteender=GetComponent();
}

我真的不知道从这里到哪里去。。。当按下精灵按钮时,如何将精灵从不同场景渲染到播放器上。。。非常感谢您的帮助,谢谢

虽然你的问题很模糊,我也不知道你到目前为止尝试了什么:

现在,您需要为每个
Sprite
项目提供一个
ScriptableObject
。。。我认为那不是你想要的。您应该使用一个
ScriptableObject
存储所有
Sprite
项的信息

using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "Assets/New Store", menuName = "Sprites-Store")]
public class SpriteStoreContainer : ScriptableObject
{
    public List<StoreSpriteItem> SpriteItems = new List<StoreSpriteItem>();

    // you can/should also implement methods here as in any usual component!
}
回到团结中:

  • 现在您首先必须
    实例化
    ScriptableObject
    资产:
    转到项目视图(资产)->在菜单中单击鼠标右键->单击创建->单击精灵商店
    这将在
    资产

    下创建一个名为
    新店
    (.asset)的新资产

  • 现在,您可以在该创建资产的检查器中填写所需信息。您应该看到我们的列表
    SpriteItems
    ,其中
    Size=0


    要创建元素,只需增加
    大小
    值并按enter键(小心:Unity不会询问您是否更改此值=>注意不要在以后意外减少此值来删除项目) 现在您可以调整这些精灵项的所有信息

  • 稍后,只要您需要访问该资产的信息,您就可以将引用用作任何其他组件=>您可以分配它,例如,通过Inspector使用公共字段,例如

    using UnityEngine;
    
    public class ScriptThatUsesStore : MonoBehaviour
    {
    
        public SpriteStoreContainer Store;
    
        public void DoSomthingWithStore()
        {
            // example: just get the first List element
            Sprite someSprite = Store.SpriteItems[0].sprite;
        }
    }
    

    然后访问其中的数据。尽管我强烈建议您在
    ScriptableObject
    中实现一些方法,例如
    BuyItem
    GetSprite


  • 非常感谢您的详细回答!帮了很多忙:)很高兴我能帮上忙!
    using UnityEngine;
    
    public class ScriptThatUsesStore : MonoBehaviour
    {
    
        public SpriteStoreContainer Store;
    
        public void DoSomthingWithStore()
        {
            // example: just get the first List element
            Sprite someSprite = Store.SpriteItems[0].sprite;
        }
    }