1.添加镜头跟随
在Bird中添加相机跟随的脚本
//相机跟随
float posX = transform.position.x;
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, new Vector3(Mathf.Clamp(posX, 0, 15), Camera.main.transform.position.y, Camera.main.transform.position.z),smooth*Time.deltaTime);
运行程序,结果如下:
2.音乐的添加
在Bird脚本中添加音乐的代码
public AudioClip select;
public AudioClip fly;
public void AudioPlay(AudioClip clip)
{
AudioSource.PlayClipAtPoint(clip, transform.position);
}
然后在合适的地方进行引用
同样的在Pig脚本中进行相同的操作
public AudioClip hurtClip;
public AudioClip dead;
public AudioClip birdCollision;
public void AudioPlay(AudioClip clip)
{
AudioSource.PlayClipAtPoint(clip, transform.position);
}
3.添加黄色小鸟
修改Bird代码
private bool isFly;
/// <summary>
/// 释放技能的操作
/// </summary>
public virtual void ShowSkill()
{
isFly = false;
}
添加YellowBird脚本继承Bird脚本,然后重写ShowSkill方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class YellowBird : Bird {
/// <summary>
/// 重写方法
/// </summary>
public override void ShowSkill()
{
base.ShowSkill();
rg.velocity *= 2;
}
}
4.添加绿色的小鸟
添加GreenBird脚本继承Bird脚本,然后重写ShowSkill方法
public override void ShowSkill()
{
base.ShowSkill();
Vector3 speed = rg.velocity;
speed.x *= -1;
rg.velocity = speed;
}
然后给小鸟们添加受伤的图片
public Sprite hurt;
private SpriteRenderer render;
public void Hurt()
{
render.sprite = hurt;
}
在Pig合适的地方进行调用
5.添加黑色小鸟
添加BlackBird脚本继承Bird脚本,然后重写ShowSkill方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlackBird : Bird {
public List<Pig> blocks = new List<Pig>();
/// <summary>
/// 进入触发区域
/// </summary>
/// <param name="collision"></param>
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.tag == "Enemy")
{
blocks.Add(collision.gameObject.GetComponent<Pig>());
}
}
/// <summary>
/// 离开触发区
/// </summary>
/// <param name="collision"></param>
private void OnTriggerExit2D(Collider2D collision)
{
blocks.Remove(collision.gameObject.GetComponent<Pig>());
}
public override void ShowSkill()
{
base.ShowSkill();
if(blocks.Count > 0 && blocks != null)
{
for(int i = 0; i > blocks.Count; i++)
{
blocks[i].Dead();
}
}
}
}
6.处理黑色小鸟的爆炸问题
给黑色小鸟添加爆炸的代码
public override void ShowSkill()
{
base.ShowSkill();
if(blocks.Count > 0 && blocks!=null)
{
for(int i = 0; i < blocks.Count; i++)
{
blocks[i].Dead();
print("1");
}
}
OnClear();
}
void OnClear()
{
rg.velocity = Vector3.zero;
Instantiate(boom, transform.position, Quaternion.identity);
render.enabled = false;
GetComponent<CircleCollider2D>().enabled = false;
myTrail.ClearTrails();
}
protected override void Next()
{
GameManager._instance.birds.Remove(this);
Destroy(gameObject);
GameManager._instance.NextBird();
}
运行结果,代码如下
7.处理星星数组越界的问题
在出现星星的地方添加下面的代码
IEnumerator Show()
{
for (int i = 0; i < birds.Count + 1; i++)
{
if(i >= stars.Length)
{
break;
}
yield return new WaitForSeconds(0.2f);
stars[i].SetActive(true);
}
}
8.制作选择地图UI界面
9.地图选择的逻辑编写
给每个地图添加新脚本MapSelect,并添加Button组件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MapSelect : MonoBehaviour {
public int starsNum = 0;
private bool isSelect = false;
public GameObject locks;
public GameObject stars;
private void Start()
{
if (PlayerPrefs.GetInt("totalNum", 0) >= starsNum)
{
isSelect = true;
}
if (isSelect)
{
locks.SetActive(false);
stars.SetActive(true);
}
}
}
10.制作关卡选择界面
11.添加地图选择和关卡选择界面的交互
在MapSelect中添加下面的代码,进行鼠标交互
public void Selected()
{
if (isSelect)
{
panel.SetActive(true);
map.SetActive(false);
}
}
然后在各个按钮上给按钮注册该事件
12.存储关卡星星数据
首先在LevelSelect中添加代码,用来存储当前的关卡
public void Selected()
{
if (isSelect)
{
PlayerPrefs.SetString("nowLevel", "level" + gameObject.name);
}
}
然后在GameManager中添加代码,用来存储当前关卡的星星数量以及调用它
public void Replay()
{
SaveData();
SceneManager.LoadScene(2);
}
public void Home()
{
SaveData();
SceneManager.LoadScene(1);
}
public void SaveData()
{
PlayerPrefs.SetInt(PlayerPrefs.GetString("nowLevel"), starsNum);
}
13.关卡选择,场景跳转
首先创建关卡level1并保存为预制体,如下图所示
在02-game的摄像机上添加新的脚本LoadLevel用来加载关卡
public class LoadLevel : MonoBehaviour {
private void Awake()
{
Instantiate(Resources.Load(PlayerPrefs.GetString("nowLevel")));
}
}