本篇介绍向日葵的相关功能逻辑的实现,向日葵的功能为间隔一段时间产生一定值的阳光,该阳光不会在场景中飘动而是固定在向日葵上,用户点击进行收取或者间隔一段时间阳光消失。
主要函数为创建阳光和让阳光跳跃动画
/// <summary>
/// 创建阳光
/// </summary>
private void CreateSun()
{
//StartCoroutine(DoCreatSun());
StartCoroutine(ColorEF(goldWantTime, new Color(1, 0.6f, 0),0.05F, InstantiateSun));
}
private void InstantiateSun()
{
Sun sun = PoolManager.Instance.GetObj(GameManager.Instance.GameConf.Sun).GetComponent<Sun>();
sun.transform.SetParent(transform);
// 让阳光进行跳跃动画
sun.InitForSunFlower(transform.position);
}
然后进行对创建阳光的实现
protected override void OnInitForPlace()
{
InvokeRepeating("CreateSun", createSunTime, createSunTime);
}
同时需要在阳光代码中进行对太阳花的阳光的初始化
/// <summary>
/// 阳光来自太阳花的初始化
/// </summary>
public void InitForSunFlower(Vector2 pos)
{
transform.position = pos;
//肯定来太阳花
isFormSky = false;
StartCoroutine(DoJump());
}
private IEnumerator DoJump()
{
bool isLeft = Random.Range(0, 2)==0;
Vector3 startPos = transform.position;
float x;
if (isLeft)
{
x = -0.01f;
}
else
{
x = 0.01f;
}
float speed = 0;
while (transform.position.y <= startPos.y + 1)
{
yield return new WaitForSeconds(0.005f);
speed += 0.002f;
transform.Translate(new Vector3(x, 0.05f+ speed, 0));
}
while (transform.position.y >= startPos.y)
{
yield return new WaitForSeconds(0.005f);
speed += 0.002f;
transform.Translate(new Vector3(x, -0.05f-speed, 0));
}
}
销毁与收取的方法则与来自太空的阳光方法相同。