unity学习笔记----游戏练习04

一、开发阳光生产功能

向日葵的生产过程需要动画和时间

1.生产动画

选中Sunflower,然后选中窗口再选中

创建新的剪辑开始制作动画,向日葵生产动画的过程是一个从暗到亮然后持续一段时间再到暗的过程。因此只需要在对应的时间改变颜色即可。

为了保证是在动画高亮的时候产生阳光,因此要添加关键帧事件在对应位置,如下:

然后在PlantManager脚本中添加一个用于生产阳光的方法。

然后为帧事件添加对应的方法,步骤如下:

这样当动画执行到这个关键帧事件时就会调用这个方法。

现在动画已经做好了该如何播放呢?

要在动画状态机里面去设置,打开动画器

这个默认是播放Idle动画的,我们需要它在生产阳光的时候去播放Glowing动画,而且需要这两个动画同时去播放。

要添加一个新的Layers层,让其用来播放发光动画。

但是不能让发光状态为默认状态,要新建一个默认的空状态,然后再合适的情况下在切换到发光状态。并且将权重设置为1,这样动画才会对向日葵同时起作用。

如果控制这两个参数的切换呢?可以通过一个参数来控制,为其添加一个Trigger类型参数。

然后检测这个参数,当为true的时候就进行切换。并将退出时间不勾选

当播放完成后就自动切换回来。

下面通过代码来控制,发光动画的播放。

由于生产阳光这个功能只在这个向日葵身上才有的这个功能,因此需要把这个生产阳光的功能放在一个子类身上。还要将PlantManager里面的用于切换植物为启用状态的方法设置为虚方法,并在其子类中重写,这样就控制植物的状态了。代码如下:

public float produceDuration = 5;

private float produceTimer = 0;

private Animator anim;

private void Awake()

{

anim = GetComponent<Animator>();

}

//阳光状态的切换

protected override void EnableUpdata()

{

produceTimer += Time.deltaTime;

if(produceTimer > produceDuration)

{

produceTimer = 0;

anim.SetTrigger("IsGlowing");

}

}

回到Unity中将将Sunflower预制体上的脚本更换为SunFlower,运行后效果如下:

每隔一段时间,向日葵就会播放一次发光动画。

2.创建阳光的Prefab和阳光的实例化

public void ProduceSun()

{

GameObject go = GameObject.Instantiate(sunPrefab, transform.position, Quaternion.identity);

float distance = Random.Range(23, 77);

distance = Random.Range(0, 2) < 1 ? -distance : distance;

Vector3 position = transform.position;

position.x += distance;

go.GetComponent<SunControl>().JumpTo(position);

}

这个方法用于阳光的实例化,然后获取一个位置来确定阳光移动的最远距离。并将获得的位置坐标传入JumpTo()方法。

想要这个阳光实例化之后看起来更自然些,就在阳光的预制体上添加以一个脚本用于控制相关运动。

需要在脚本写一个方法用于向日葵的跳跃,借助Dotween插件。

public void JumpTo(Vector3 targetPosition)

{

Vector3 centerPos = (transform.position + targetPosition) / 2;

//获取俩点间的距离

float distance = Vector3.Distance(transform.position, targetPosition);

centerPos.y += (distance / 2);

//路径、持续时间、平滑曲线

transform.DOPath(new Vector3[] { transform.position, centerPos, targetPosition }, moveDuration, PathType.CatmullRom).SetEase(Ease.OutQuad);

}

这个方法是根据传入的参数来获取到三个点的位置,最后在调用DOPath方法来实现一个抛物线的动画效果。效果如下:

相关推荐
阿蒙Amon16 小时前
TypeScript学习-第1章:入门
javascript·学习·typescript
奥特曼_ it18 小时前
【数据分析+机器学习】基于机器学习的招聘数据分析可视化预测推荐系统(完整系统源码+数据库+开发笔记+详细部署教程)✅
笔记·数据挖掘·数据分析
A9better18 小时前
嵌入式开发学习日志50——任务调度与状态
stm32·嵌入式硬件·学习
四维碎片19 小时前
QSettings + INI 笔记
笔记·qt·算法
非凡ghost19 小时前
ESET NupDown Tools 数据库下载工具
学习·软件需求
zzcufo20 小时前
多邻国第5阶段17-18学习笔记
笔记·学习
BlackWolfSky20 小时前
鸿蒙中级课程笔记4—应用程序框架进阶1—Stage模型应用组成结构、UIAbility启动模式、启动应用内UIAbility
笔记·华为·harmonyos
中屹指纹浏览器20 小时前
指纹浏览器性能优化实操——多实例并发与资源占用管控
经验分享·笔记
brave and determined20 小时前
工程设计类学习(DAY9):印刷电路板(PCB)材料选择、工艺特性与制造技术综合详解
学习·制造·pcb·smt·工程设计·fr-4·pcb钻孔
了一梨21 小时前
SQLite3学习笔记5:INSERT(写)+ SELECT(读)数据(C API)
笔记·学习·sqlite