知识点(疑问点)
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射击游戏独挡与独挡(免费)