哭了倒腾了几个礼拜总算弄好了,这里是菜单界面,百分之八十的功能都已经做出来了ww(此博客仅个人制作存档,参考价值不大的==
游戏场景,游戏代码挑些麻烦的来做记录吧QAQ
整个游戏我觉得比较难的算法就是这个用鼠标控制发射设计了,代码参考了siki学院的教学
if (isClick)
{
transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);//获取鼠标位置
transform.position += new Vector3(0, 0, 10);//z加个10使小鸟在鼠标操作弹射运动正确
if (Vector3.Distance(transform.position, rightPos.position) > MaxDis)//设定小鸟在弹弓上的最远位置
{
Vector3 pos = (transform.position - rightPos.position).normalized;//获取弹弓和小鸟的单位向量
pos =pos* MaxDis;//方向乘最大距离
transform.position = pos + rightPos.position;//控制最远位置(哭了 其实我也不太懂
}
Line();//小鸟飞翔特效
}
float posX = transform.position.x;
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, new Vector3(Mathf.Clamp(posX, 1, 10), Camera.main.transform.position.y, Camera.main.transform.position.z), smooth * Time.deltaTime);//这里控制相机跟随小鸟
第二段代码是判断猪猪受伤和消失
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.relativeVelocity.magnitude > maxSpeed)//总之大概就是取相对速度去判断了..学习了一个新函数relativeVelocity.magnitude
{
Destroy(gameObject);
Dead();
}else if(collision.relativeVelocity.magnitude > minSpeed&& collision.relativeVelocity.magnitude < maxSpeed)
{
render.sprite = hurt;
}
}
第三段代码,游戏星星数量的存储以及解锁关卡(这里设计得挺绕的,主要是掌握playerPrefs的用法,要注意关卡的命名
private void Start()
{
if (transform.parent.GetChild(0).name == gameObject.name)
{
isSelect = true;
}
else {// 判断当前关卡是否可以选择
int beforeNum = int.Parse(gameObject.name) - 1;
if (PlayerPrefs.GetInt("level" + beforeNum.ToString()) > 0) { //上一关是否有星星
isSelect = true;
}
}
if (isSelect) {
image.overrideSprite = levelBG;
transform.Find("num").gameObject.SetActive(true);
int count = PlayerPrefs.GetInt("level" + gameObject.name);//获取现在关卡对应的名字,然后获得对应的星星个数
if (count > 0) {
for (int i = 0; i < count; i++) {
stars[i].SetActive(true);//在关卡上显示星星
}
}
}
}
public void Selected()
{
if (isSelect) {
//
PlayerPrefs.SetString("nowLevel","level" +gameObject.name);//
SceneManager.LoadScene(2);
}
}
}
第四段,关卡生成器
public void Selected()
{
if (isSelect) {
//
PlayerPrefs.SetString("nowLevel","level" +gameObject.name);
SceneManager.LoadScene(2); //选择后进入游戏场景
}
}
private void Awake()
{
Instantiate(Resources.Load(PlayerPrefs.GetString("nowLevel")));
}
第五段代码,用方法重写分别设置其他小鸟的技能
注意virtual与override方法的使用,设置虚函数和重新实现虚函数==
最后: 总体难度不大,普通应届毕业生水平, 注意方法的调用和逻辑实现