官方太空射击游戏总结
- 很大一部分问题是碰撞体,刚体,还有碰撞器里面Is Trigger的勾选问题。这些问题在上一篇里面解释的很清楚了。
- 实现石头自动旋转功能:GetComponent<Rigidbody>().angularVelocity = Random.insideUnitSphere * tumble;
- 实现石头一波一波下降并终止游戏的功能:
思路:首先实现一个石头的正常下降,之后实现多个石头的正常下降(for),再实现多个石头持续下降(while)。然后是比较难的,控制石头多久下降,以及多久开始游戏。
代码://这个代表协同程序,在Start()函数中要使用StartCoroutine(StoneDrow());
IEnumerator StoneDrow()
{
yield return new WaitForSeconds(startWait);
while (true)
{
for (int i = 0; i < 5; i++)
{
Vector3 place = new Vector3(Random.Range(-stonePosition.x, stonePosition.x), stonePosition.y, stonePosition.z);
Quaternion angle = Quaternion.identity;
Instantiate(manyStone, place, angle);
yield return new WaitForSeconds(spawnWait);
}
yield return new WaitForSeconds(waveWait);
if (gameover)
{
RestartText.text = "Please input 'R' to restart";
restart = true;
break;
}
}
}
- 实现石头不能越出边界的功能:添加Plane 去掉Mesh Render
- 控制飞机的移动范围:使用Mathf.Clamp(value,xMin,xMax)
- 实现分数的统计功能:首先要有一个共有函数实现增加分数的功能,然后在石头摧毁的时候调用这个函数,
- 实现用键盘和鼠标两种方法控制飞机的移动: 代码1.float x = Input.GetAxis("Horizontal")*Time.deltaTime*speed;
- float z = Input.GetAXIS("Vertical")*Time.delatTime*speed;
- transform.Translate(x,0,z);
- 2.
IEnumerator OnMouseDown()
{
Vector3 scenceSpace = Camera.main.WorldToScreenPoint(transform.position);
Vector3 offer = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, scenceSpace.z));
while (Input.GetMouseButton(0))
{
Vector3 curs001 = new Vector3(Input.mousePosition.x, Input.mousePosition.y, scenceSpace.z);
Vector3 curpos = Camera.main.ScreenToWorldPoint(curs001) + offer;
transform.position = curpos;
yield return new WaitForFixedUpdate();
}
}