试图直观地显示种子的生长阶段

时间:2016-01-02 05:07:04

标签: c# unity3d unity5

我有一个空的父预制件,下面有2个孩子。父预制表示种子,没有可视组件。我目前在预制件中有第一个活动的孩子,第二个孩子没有活动。

我只想在物品被放置在我的世界中时显示第一个孩子(这是当前正在工作),然后经过一段时间后,我希望第一个孩子不活动,并且要展示的第二个孩子。我知道何时交换活动预制件时,我已经掌握了所有的逻辑,我只是​​不知道 如何做到这一点。

要把扳手扔进去,我计划有一种以上的种子(橙子,仙人掌等),并不是所有的种子都会有相同的生长过程。我试图找出一个解决方案,不仅可以解决两个阶段,还可以解决1,2或3等问题。

这是我到目前为止所编写的逻辑 - 它已准备好进行外观交换。

    private void FixedUpdate()
    {
        if (Time.time > mNextGrowthStage && !CanLoot)
        {
            mCurrentGrowthStage += 1;
            mNextGrowthStage = Time.time + GrowthStageDuration;

            // TODO: Insert visual appearance swap here.

            Debug.LogFormat("{0} has grown from stage {1} to stage {2}. There are {3} stages remaining. Next growth stage occurring in {4} seconds.",
                this.Name, mCurrentGrowthStage - 1, mCurrentGrowthStage, NumberOfGrowthStages - mCurrentGrowthStage, GrowthStageDuration);

            if (mCurrentGrowthStage >= NumberOfGrowthStages)
            {
                Debug.LogFormat("{0} has fully grown!", this.Name);
                CanLoot = true;
            }
        }
    }

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

您可以轻松做的是为种子预制的检查员的每个增长阶段分配精灵,即:

public Sprite[] GrowthSprites;

其中从开始到结束的每个精灵将代表每个生长阶段(GrowthSprites [0]< =>种子阶段等)。

然后你可以简单地在运行时交换精灵:

获取SpriteRenderer,您将在其上交换sprite:

//Find or assign Sprite element of prefab in Start():

//Finding approach:
private SpriteRenderer _renderer;

void Start()
{
    _renderer = gameObject.GetComponent<SpriteRenderer>();
}

//Note that you can have SpriteRender in one of gameobject's children
// and you can have several children with SpriteRenderer so:

//Assign from inspector approach - just drag appropriate SpriteRenderer
public SpriteRenderer GrowthSpriteRenderer;

将精灵交换为适当的精灵:

    if (GrowthSpriteRenderer != null)
        GrowthSpriteRenderer.sprite = GrowthSprites[mCurrentGrowthStage];