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

标签 c# unity-game-engine

我有一个空的父级预制件,下面有 2 个子级。父预制件代表种子,没有视觉组件。目前,我的预制件中第一个子项处于事件状态,第二个子项处于非事件状态。

我只是希望当该项目放置在我的世界中时显示第一个 child (这当前正在工作),然后在一段时间后我希望第一个 child 处于非事件状态,而第二个 child 则处于非事件状态要显示的子项。我已经连接了所有逻辑来知道何时更换事件预制件,我只是不知道如何去做。

要打破这个局面,我计划拥有不止一种类型的种子(橙子、仙人掌等),而且并非所有种子的生长过程都有相同数量的阶段。我正在尝试找出一个解决方案,该解决方案不仅可以考虑两个阶段,还可以考虑 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;
            }
        }
    }

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

最佳答案

您可以轻松做的就是在种子预制件的检查器中为每个生长阶段分配 Sprite ,即:

public Sprite[] GrowthSprites;

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

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

获取要在其上交换 Sprite 的 SpriteRenderer:

//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;

将 Sprite 交换到合适的 Sprite :

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

关于c# - 试图直观地显示种子的生长阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34562797/

相关文章:

c# - 在构造函数中传递参数而不是设置属性

c# - 覆盖虚方法或创建事件处理程序?

C# - 如何将字符串转换为字符?

c# - ONVIF PullPointSubscriptionClient.PullMessages

c# - Unity HTML5 错误 : Encoding 1252 data could not be found

c# - 如何修复 Azure Web 应用程序上的 ASP.NET MVC 中的缓慢加载操作

java - Unity3d在android中将openGL FBO渲染为纹理(java)

c# - 如何在 for 循环中等待 x 秒 C# - unity

android - 为 Unity2d android 转换 iOS 游戏尺寸

android - 使用 firebase 为 Apple Tv 构建 Unity