一、游戏策划
1、游戏介绍
游戏背景是在火星的上空,主角和敌人是不同的太空飞行器,敌人迎面向主角飞来,主角通过射击消灭敌人来获得分数。如果主角战败,则游戏结束。
2、游戏UI
屏幕上显示主角生命值以及得分。如果游戏结束,屏幕上显示“游戏结束“,同时显示“再来一次”按钮。按ESC键,游戏会处于暂停状态,显示“继续游戏”,“退出游戏”。
3、主角
主角有三条性命,被敌人撞击一次性命直接清零,被敌方子弹命中,性命减一,当性命值为0时,游戏结束。
4、操作
游戏在pc上进行开发,键盘上的上下左右键控制角色在相应位置上移动。空格键和鼠标左键控制发射子弹。
5、敌人
敌人分为两类:初级敌人,装甲较弱,以撞击主角为主;高级敌人,装甲较强,可以发射子弹,也可以撞击主角。
二、代码分析
1、创建地图
- 在Scene中创建一个3D的Plane对象,用星空的图像作为背景
- 另外创建一个3D对象,用火星的图像贴图
- 为星空的Plane对象添加动画效果,使在太空的背景更加逼真。
- 在地图的周围设置空对象,当敌人走出地图时,要及时销毁对象,节省内存。
2、创建主角和子弹
- 创建主角的Object对象,并贴图
- 创建子弹的Object对象,并贴图。这里由于子弹是可重复使用对象,于是将其变为profeb预设对象,只要将Scene中创建好的对象拖进Project相应文件夹中即可。
- 为场景中的对象添加相关tag,并在对象中指定tag名

- 为主角添加碰撞容器,并在脚本里实现碰撞效果

- 为主角添加Audio source容器,这样才能有声音,并在脚本中添加开枪声音以及爆炸特效。
- 为主角和子弹创建相应脚本,指定脚本中的Transform对象
// Palyer.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[AddComponentMenu("MyGame/Player")]
public class Player : MonoBehaviour
{
public float m_life = 3;//主角共3条命
public float m_speed = 3; //控制主角移动速度
float m_rocketRate = 0.3f; //控制子弹发射频率
private float m_rocketspeed = 0;
public Transform m_rocket;
protected Transform m_transform;
public AudioClip m_shootClip; //声音
protected AudioSource m_audio; //声音源
public Transform m_explosionFX; //爆炸特效
public Transform m_explosionFX2; //爆炸特效
// Start is called before the first frame update
void Start()
{
m_transform = this.transform;
m_audio = this.GetComponent<AudioSource>();
}
private void OnTriggerEnter(Collider other)
{
if (other.tag.CompareTo("EnemyRocket") == 0) //碰到敌人的子弹,生命值减一
{
m_life -= 1;
//主角掉血反馈
Instantiate(m_explosionFX2, m_transform.position, Quaternion.identity);
if (m_life <= 0)
{
//主角死亡爆炸特效
Instantiate(m_explosionFX, m_transform.position, Quaternion.identity);
Destroy(this.gameObject);
}
}
if (other.tag.CompareTo("Enemy") == 0) //碰到敌人,生命值清零并销毁
{
m_life = 0;
//主角死亡爆炸特效
Instantiate(m_explosionFX, m_transform.position, Quaternion.identity);
Destroy(this.gameObject);
}
}
// Update is called once per frame
void Update()
{
float moveV = 0; //纵向距离
float moveH = 0; //横向距离
if (Input.GetKey(KeyCode.DownArrow))
{
moveV += m_speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.UpArrow))
{
moveV -= m_speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.RightArrow))
{
moveH -= m_speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
moveH += m_speed * Time.deltaTime;
}
m_rocketspeed -= Time.deltaTime;
if (m_rocketspeed <= 0)
{
m_rocketspeed = m_rocketRate;
if (Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0))
{
Instantiate(m_rocket, new Vector3(m_transform.position.x,m_transform.position.y,m_transform.position.z + 0.5f), m_transform.rotati
太空射击游戏开发详解

本文档详述了一个太空背景的射击游戏的策划与代码实现。游戏主角在火星上空与不同类型的敌人战斗,通过射击敌人得分,生命值耗尽则游戏结束。游戏包括主角、子弹、敌人、敌人生成器和游戏管理器等多个组件,每个组件都有详细的脚本实现,如主角的碰撞检测、敌人的生成与移动、子弹的发射和销毁等。此外,还介绍了游戏的UI设计和暂停、重新开始功能。
最低0.47元/天 解锁文章
1478

被折叠的 条评论
为什么被折叠?



