Player
思路
-
资源商店下载一个飞机模型
-
Tag:Player
-
飞机碰到敌机会游戏结束,需要碰撞
- 检查有无Collider,若无则补充
-
检查有无刚体,如无则补充
Rigidbody
,飞机不能自己掉落,勾选
Is Knematic
-
模型位置
- 手动放好
-
脚本实现思路
-
方向键控制飞机飞行,Y、X可控制,Z方向不可控制
-
不能超出一定飞行区域
-
U键发射子弹
-
准备子弹出现位置:用一个空物体的position来表示
Instantiate(BulletPre,firePoint.position,firePoint.rotation);
-
准备子弹出现位置:用一个空物体的position来表示
-
碰到敌机游戏结束
-
-
代码部分
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerControl : MonoBehaviour
{
//子弹预制件,关联创建好的Bullet预制件
public GameObject BulletPre;
//子弹发射位置
private Transform firePoint;
private void Start()
{
firePoint = transform.Find("FirePoint");
}
void Update()
{
//横向飞行
//获得水平轴数值
float horizontal = Input.GetAxis("Horizontal");
//如果不为0,证明按下了左或方向键
if (horizontal != 0)
{
//移动
transform.position -= Vector3.left * 10f * Time.deltaTime * horizontal;
//设定范围,限制飞机不能无限远移动
if (transform.position.x < -10 || transform.position.x > 10)
{
//超出范围,复原位置
transform.position += Vector3.left * 10f * Time.deltaTime * horizontal;
}
}
//纵向飞行
//获得垂直数轴
float vertical = Input.GetAxis("Vertical");
//如果不为0,证明按下了上或下方向键
if (vertical != 0)
{
//移动
transform.position += Vector3.up * 10f * Time.deltaTime * vertical;
//同样设定一个垂直移动的范围
if (transform.position.y < -10 || transform.position.y > 10)
{
transform.position -= Vector3.up * 10f * Time.deltaTime * vertical;
}
}
//按下空格键发射子弹
if (Input.GetKeyDown(KeyCode.U))
{
Instantiate(BulletPre,firePoint.position,firePoint.rotation);
}
}
//如果碰到敌人游戏结束
private void OnCollisionEnter(Collision collision)
{
Debug.Log("游戏结束");
Time.timeScale = 0;
}
}
子弹
思路
-
准备子弹预制体,调整位置
- Tag:Bullet
-
实现子弹运行速度
-
子弹打到敌机,敌机消失,,子弹也消失,这之间有触发
-
准备
Capsule Collider
,勾选触发
-
准备
-
实现子弹消失时间
代码部分
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletControl : MonoBehaviour
{
void Start()
{
GetComponent<Rigidbody>().velocity = Vector3.forward * 50;
//10s后自动销毁
Destroy(gameObject,10f);
//设定一个速度
}
private void OnTriggerEnter(Collider other)
{
//触发后销毁
Destroy(gameObject);
}
}
敌机
-
资源商店下载一个飞机模型
-
Tag:Enemy
-
飞机碰到敌机会游戏结束,需要碰撞
- 检查有无Collider,若无则补充
-
检查有无刚体,若有,勾选
Is Knematic
-
模型位置调整
- 方向对向Player
-
脚本实现思路
-
敌机出现位置
-
准备一个空物体,名为EnemyPoint,拖动好飞机出现位置,用脚本驱动敌机生成(
脚本在
**
EnemyPoint
上**)
敌机出现时机(
脚本在
**
EnemyPoint
上**)- 按照一定时间间隔产生,时间间隔可是在一定区间随机的
-
准备一个空物体,名为EnemyPoint,拖动好飞机出现位置,用脚本驱动敌机生成(
-
触发(
脚本在
**
Enemy
**
上
)- 碰到子弹消失
-
-
脚本
**
EnemyPoint
**
EnemyPoint
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyPointControl : MonoBehaviour
{
//关联敌机预制件
public GameObject EnemyPre;
//生成敌机计时器
private float timer = 0;
//生成敌机CD
private float CD = 1f;
void Update()
{
//计时器计时
timer += Time.deltaTime;
//如果计时器时间到
if (timer>CD)
{
//重置计时器
timer = 0;
//重置CD
CD = Random.Range(0.3f, 3f);
//随机一个敌机生成位置
Vector3 pos = transform.position + Vector3.left * Random.Range(-10f, 10f) + Vector3.up * Random.Range(-10f,10f);
//实例化敌机
Instantiate(EnemyPre,pos,transform.rotation);
}
}
}
**
Enemy
**
Enemy
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyControl : MonoBehaviour
{
void Update()
{
//移动
transform.position -= Vector3.forward * 100f * Time.deltaTime;
//超过摄像机后
if (transform.position.z<-20)
{
//销毁自身
Destroy(gameObject);
}
}
private void OnTriggerEnter(Collider other)
{
//如果碰到子弹
if (other.tag=="Bullet")
{
Destroy(gameObject);
}
}
}