试图直观地显示种子的生长阶段
Trying to visually show the growth stages of a seed
我有一个空的 parent 预制件,下面有 2 children。 parent 预制件代表种子,没有可视组件。我目前在预制件中有第一个 child 处于活动状态,第二个 child 处于非活动状态。
我只是希望在将物品放置在我的世界中时显示第一个 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;
}
}
}
非常感谢任何帮助。谢谢!
您可以轻松地在种子预制件的检查器中为每个生长阶段分配精灵,即:
public Sprite[] GrowthSprites;
从头到尾的每个精灵代表每个生长阶段(GrowthSprites[0] <=> 种子阶段等)。
然后你可以在运行时简单地交换精灵:
获取将在其上交换精灵的 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;
将精灵换成合适的:
if (GrowthSpriteRenderer != null)
GrowthSpriteRenderer.sprite = GrowthSprites[mCurrentGrowthStage];
我有一个空的 parent 预制件,下面有 2 children。 parent 预制件代表种子,没有可视组件。我目前在预制件中有第一个 child 处于活动状态,第二个 child 处于非活动状态。
我只是希望在将物品放置在我的世界中时显示第一个 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;
}
}
}
非常感谢任何帮助。谢谢!
您可以轻松地在种子预制件的检查器中为每个生长阶段分配精灵,即:
public Sprite[] GrowthSprites;
从头到尾的每个精灵代表每个生长阶段(GrowthSprites[0] <=> 种子阶段等)。
然后你可以在运行时简单地交换精灵:
获取将在其上交换精灵的 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;
将精灵换成合适的:
if (GrowthSpriteRenderer != null)
GrowthSpriteRenderer.sprite = GrowthSprites[mCurrentGrowthStage];