【U3D小游戏】愤怒的小鸟(五)修复以及特效
【摘要】 自己做一下小时候玩的风靡一时的愤怒的小鸟这个游戏,相信有很多人都在某一段时间沉迷过这个游戏吧~~~~~
前言
自己做一下小时候玩的风靡一时的愤怒的小鸟这个游戏,相信有很多人都在某一段时间沉迷过这个游戏吧~~
6. 解决弹弓和小鸟问题
小鸟飞出后,皮筋没有消失,小鸟弹入弹弓后力度过大,摇摆幅度大。
方法:小鸟飞出后,禁用画线组件,等下一次小鸟再启用
将第一只小鸟的位置保存,飞出后将第一只小鸟的位置赋值给后面的小鸟
在小鸟脚本中飞出后禁用画线组件,在画线之前启用
public class ColliderBird : MonoBehaviour
{
void Power()
{
sp2.enabled = false;//将束缚小鸟的弹簧禁用掉
rightLine.enabled = false;
leftLine.enabled = false;
Invoke("NextBird", 2);//2秒后销毁小鸟
}
void Line()
{
rightLine.enabled = true;
leftLine.enabled = true;
leftLine.SetPosition(0, leftPoint.position);//确定线段的第一个点
leftLine.SetPosition(1, transform.position);//确定线段的第二个点
rightLine.SetPosition(0, rightPoint.position);
rightLine.SetPosition(1, transform.position);
}
}
在管理类中记录初始小鸟的位置,并在第一个销毁后赋值给下一只
public class GameManager : MonoBehaviour
{
public Vector3 birdPostion;
private void Awake()
{
_instance = this;
birdPostion = birds[0].transform.position;//初始化位置
}
public void BirdSet()
{
for (int i = 0; i < birds.Count; i++)
{
if (i == 0)
{
birds[i].transform.position = birdPostion;//将坐标矫正
// 第一个小鸟,弹簧和脚本组件启用
birds[i].enabled = true;
birds[i].sp2.enabled = true; //这里需要将我们之前设置的弹簧组件设置成public,否则无法访问
}
else
{
//后面的小鸟禁用
birds[i].enabled = false;
birds[i].sp2.enabled = false;
}
}
}
}
六、特效制作
把小鸟和猪的相关特效制作一下吧
1. 死亡特效
其实就是通过帧动画来实现特效,通过图集的图片的切换,来让玩家看起来像死亡的特效
我实在图集里面找的图片来实现的
实现结果:
如果不会制作帧动画的话,建议去我的动画专栏学习一下,很简单的
然后将这个动画制作成预制体,以便于我们的小鸟和小猪都能使用
- 创建预制体文件夹
Prefabs
- 将这个动画承载的游戏对象拖拽到文件夹里面即可
2. 加分特效
小猪死亡,我们获得加分。
这个就比较容易了,我们只需要将加分的图集制作成一个预制体即可。
直接将加分的图片拖拽到Hierarchy
里面。
这个就不错,就它了
当然了,为了美观,我也给他添加了一个小小的动画,先变大,然后再消失
好了,变成预制体
3. 为小猪和小鸟添加五毛钱特效
特效制作好了,就该添加给我们的主角了
小鸟:
public class ColliderBird : MonoBehaviour{
//先
public GameObject boom;
//再在销毁的函数里面实例化boom
/// <summary>
/// 销毁小鸟并处理下一只小鸟
/// </summary>
void NextBird()
{
GameManager._instance.birds.Remove(this);
Instantiate(boom, transform.position, Quaternion.identity);//在小鸟死亡的地方实例化boom
Destroy(gameObject);
GameManager._instance.NextBird();
}
}
然后打开U3D
,将boom
预制体拖拽给小鸟就可以了
小猪:
小猪是同样的道理
public class Pig : MonoBehaviour
{
public GameObject boom;//新增
public GameObject score;//新增
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.relativeVelocity.magnitude > maxSpeed)
{
//销毁小猪
GameManager._instance.pigs.Remove(this);//将死亡的小猪从列表中移除
Instantiate(boom, transform.position, Quaternion.identity);//新增
Instantiate(score, transform.position, Quaternion.identity);//新增
Destroy(gameObject);
}
else if (collision.relativeVelocity.magnitude > minSpeed && collision.relativeVelocity.magnitude < maxSpeed)
{
//小猪受伤,图片更换
render.sprite = hurtPig;
}
}
}
完事,看看效果
还可以
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)