【Unity】愤怒的小鸟

哭了倒腾了几个礼拜总算弄好了,这里是菜单界面,百分之八十的功能都已经做出来了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方法的使用,设置虚函数和重新实现虚函数==


最后: 总体难度不大,普通应届毕业生水平, 注意方法的调用和逻辑实现


  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值