官方太空射击游戏总结

  • 很大一部分问题是碰撞体,刚体,还有碰撞器里面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();
    }
    }

原文地址:https://www.cnblogs.com/chiwang/p/7510645.html