SIKI学院简易射击游戏与数据读取保存学习笔记

知识点(疑问点)
1、如何控制枪的旋转(朝向)?
2、如何控制怪物的生成,消灭?
3、如何保存当前游戏数据?
4、游戏相关的开始结束,暂停功能如何制作?

1、
首先将枪放置在一个合适的位置,分别在X轴和Y轴上旋转,获取X轴和Y轴的最大旋转幅度。
通过Input.mousePosition,获取当前的X、Y坐标,然后分别处以Screen.width与Screen.height,算出当前屏幕位置的百分比,接着用百分比乘以最大旋转幅度。
接下来就是一些功能补充,添加一个子弹预制件,点击的时候生成,然后通过Rigidbody组件调用.AddForce()方法添加一个力发射子弹。
小总结:学习到了根据屏幕百分比距离位置控制枪的朝向,以及AddForce()方法。

2、
首先设计一个怪物类,一共有四种怪物种类,声明一个游戏数组,然后通过界面拖拽赋值(代码赋值也可以,界面拖拽更方便)。怪物类本身通过协程来控制。在Start()里先对数组所有游戏物体遍历,将BoxColider的状态设置为false。调用第一个协程,随机怪物生成。

        private void Start()
    {
        foreach(GameObject monster in monsters)
        {
            monster.GetComponent<BoxCollider>().enabled = false;
            monster.SetActive(false);
        }
        //调用协程
        StartCoroutine("AliveTimer");
    }
        IEnumerator AliveTimer()
    {
        //等待1-4秒后执行ActivateMonster方法
        yield return new WaitForSeconds(Random.Range(1, 5));
        ActivateMonster();
    }
        private void ActivateMonster()
    {
        int index = Random.Range(0, monsters.Length);
        activeMonster = monsters[index];
        activeMonster.SetActive(true);
        activeMonster.GetComponent<BoxCollider>().enabled = true;
        //调用死亡时间的协程
        StartCoroutine("DeathTimer");
    }

调用完毕开始调用第二个协程,怪物死亡消失协程。

    IEnumerator DeathTimer()
    {
        yield return new WaitForSeconds(Random.Range(3, 8));
        DeActivateMonster();
    }
        private void DeActivateMonster()
    {
        if (activeMonster != null)
        {
            activeMonster.GetComponent<BoxCollider>().enabled = false;
            activeMonster.SetActive(false);
            activeMonster = null;
        }
        //调用激活时间的协程,达到一个反复激活和死亡的循环
        StartCoroutine("AliveTimer");
    }

计时时间到之后再调用生成怪物协程。
逻辑:Start()开始调用生成怪物计时函数,计时结束,生成怪物,同时开启怪物消失计时函数,计时结束,怪物消失,再次调用怪物计时函数。无限循环。实现方式——协程。
总结:学习了协程的闭环使用。

3、
存档有四种方法,二进制,XML,Json,还有持久化数据(很少用来存储大型数据,一般用来制作记住账号等功能),调用相关API。
小总结:暂无,都是调用相关的API。

4、制作一个UI界面,添加Button相关组件,在该类中拿到怪物控制类,点击开始的时候调用开始协程。暂停功能:通过Time.timeScale,因为使用的是协程,将Time.TimeScale设置为0即可。另外设置游戏状态,因为枪类的转向代码是写在update中,用控制状态确定是否执行。
小总结:了解到Time.timeScale控制游戏状态。

总体总结:通过鼠标在屏幕上的位置控制物体的转向。Time.timeScale控制游戏状态。协程的循环使用。

ps:这里是萌新U3D程序员,记录工作中的问题的解决方法与日常的学习笔记。
ps:如果你无意中看到了这篇文章,估计不知道我在写啥,如果你也对unity制作游戏感兴趣,可以学一下这个视频,然后再来看我的总结,或许能有点收获。unity射击游戏独挡与独挡(免费)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值