概述
最近开始接触游戏制作,用Unity制作一些简单的游戏进行入门。这几篇博客总结了Space Shooter的制作流程,并对代码进行了分析。一是方便自己日后进行回顾与补充,二是为了让让更多的游戏爱好者接触游戏开发,少走弯路。
Space Shooter是一个入门级的项目,很适合新手学习。借由这款游戏,我们可以了解Unity中的界面以及常用操作,并对整个引擎有个笼统的认知,代码只需要一些编程基础,门槛不高(主要是C#)
说回正题,制作这款游戏需要如下资料。
泰课在线免费教学课程:
http://www.taikr.com/my/course/63 (需要进行注册)
Unity软件以及资源包:
http://download.csdn.net/download/s1314_jhc/10239210
下载分不够的私聊我发链接
(资源包含:Unity4.6.9软件安装包、破解器、破解教程以及Space Shooter资源包)
以上就是准备工作,接下来就可以正式进入这个游戏开发之中。具体操作参见视频。
本博客侧重于步骤梳理以及代码分析,不足之处敬请指正,也欢迎各位留言交流问题与看法。
博客结构分为三部分:
第一部分为游戏基本素材的添加。包括飞机、背景、灯光以及子弹的添加,涉及到一些基本的代码操作。
第二部分为游戏基本功能的实现,包括陨石的产生、碰撞等操作。
第三部分为游戏性能的完善部分,包括音效、计分,销毁以及游戏结束后的重新加载部分。
传送门:
太空射击(Space Shooter)流程介绍与代码分析(上)
太空射击(Space Shooter)流程介绍与代码分析(中)
太空射击(Space Shooter)流程介绍与代码分析(下)
1.添加飞机
添加飞机是完成该游戏的第一步,首先,将素材导入进Asset中,将飞机部件拖入编辑环境中,调整Roatation使飞机处在摄像机的视角内。
此时的飞机只是一个静止的图片,为了检测飞机是否与子弹发生碰撞,我们需要加入一个
碰撞检测器,在Inspector中的Add Component中添加一个Mesh Collider,再将下图中文件拖入Mesh中,完成添加,之后只要去掉Mesh Renderer,即可看到下右图中的刚体文件。
除此之外,我们需要加入一个rigidbody(刚体,操作类似添加Mesh Collider),将重力去除。
之后,为了模拟真实飞机情况,我们加入飞机的火焰喷射效果,将Prefabs中的engineer拖动至playerShip中,并设置位置,使喷射器与飞机结合,如下图。
以上就完成了简单的第一步,可以看到一架飞机正在待命!
2.添加灯光与背景
上述的操作只是添加了一个飞机,整个飞机的纹理特性不能很好地看出,因此需要加入一些灯光效果。在GameObject中添加Light——Directional Light,灯光的亮度又途中红框部分决定,可以自定义设定。并且Intensity可以调节灯光强度。
同理,可以再添加一个灯光(Fill Light),与之前添加的灯光效果形成叠加,增强立体感。如下所示。
背景的添加通过以下步骤完成:新建一个空的GameObject,并将背景素材拖入。
3.飞机控制
在playership中新建一个new script,用以控制玩家飞机的移动。在脚本中输入
using UnityEngine;
using System.Collections;
public class PlayeControl : MonoBehaviour {
public float speed = 10f;
void fixedUpdate()
{
float h = Input.GetAxis("Horizontal");
//飞机的水平移动
float v = Input.GetAxis("Vertical");
//飞机的垂直移动
Vector3 move = new Vector3 (h, 0f, v);
//移动数据赋值给move
rigidbody.velocity = speed * move;
}
}
即可,此时飞机可以实现运动功能,但是范围却无法限定,因此对上述代码进行修改,在Game模式下,获取飞机的x,z信息以设置PlayerShip的活动范围
using UnityEngine;
using System.Collections;
public class PlayeControl : MonoBehaviour {
public float speed = 10f;
public float xMin = -10.15f;//移动范围
public float xMax = -1.69f;
public float yMin = -6.66f;
public float yMax = 10.90f;
void FixedUpdate()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 move = new Vector3 (h, v, 0f);
rigidbody.velocity = speed * move;
rigidbody.position = new Vector3
(
Mathf.Clamp(rigidbody.position.x,xMin,xMax),
//用Clamp函数对范围进行限制
Mathf.Clamp(rigidbody.position.y,yMin,yMax),
1.3f
);
}
}
即可
4.创建子弹
新建一个空的object,再新建一个quad,将
为了去除子弹的背景黑框,将背景设置为additive
之后,为子弹添加一个rigidbody,参见飞机PlayerShip的设置,去除gravity,并新建一个脚本反映子弹运动,如下
using UnityEngine;
using System.Collections;
public class BulletMovement : MonoBehaviour {
public float speed = 10f;
// Use this for initialization
void Start () {
rigidbody.velocity = transform.up* speed;
//子弹运动
}
}
即可
之后就可以看见子弹沿着垂直方向往上运动并最终消失的场景,可以通过更改speed以改变运动速度。
子弹在运动中会碰到敌机或者陨石,这时候我们就要判断子弹是否与物体发生碰撞,我们在Bullet中加入一个Capsule Collider以检测子弹是否与物体发生碰撞,将半径(radius)与高度(height)设置好即可。
5.发射子弹
随着飞机的移动,子弹发射点也要随着飞机进行移动,因此在playership中创建一个空object记录子弹位置。(采用bulletPosition表示)
对playerControl函数中进行修改
using UnityEngine;
using System.Collections;
public class PlayeControl : MonoBehaviour {
public float speed = 10f;
public GameObject bullet;
//创建子弹
public GameObject bulletPosition;
//创建子弹发射位置
public float xMin = -10.15f;
public float xMax = -1.69f;
public float yMin = -6.66f;
public float yMax = 10.90f;
void FixedUpdate()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 move = new Vector3 (h, v, 0f);
rigidbody.velocity = speed * move;
rigidbody.position = new Vector3
(
Mathf.Clamp(rigidbody.position.x,xMin,xMax),
Mathf.Clamp(rigidbody.position.y,yMin,yMax),
1.3f
);
}
void Update()
{
if (Input.GetButton ("Fire1"))
{
Instantiate
//子弹射击函数
(
bullet,
bulletPosition.transform.position,
bulletPosition.transform.rotation
);
}
}
}
并按照下左图操作将代码中创建的两个实例填充,即可实现发射子弹功能,但此时的子弹发射过快并且会四处散开,如下右所示
只需l勾选子弹VFX中的的Is Trigger以及给子弹一个发射限制函数即可,Is Trigger属性勾选表示物体不受作用力的影响,相当于一个虚体,但能产生碰撞事件。
代码中加入
public float fireRate = 0.25f; //一秒最多发射4发
private float nextFireTime;
以及将Update中if函数修改为
if (Input.GetKeyDown(KeyCode.Space)&&Time.time > nextFireTime)
//按空格发射并受到发射频率的限制
{
nextFireTime = Time.time + fireRate;
Instantiate
(
bullet,
bulletPosition.transform.position,
bulletPosition.transform.rotation
);
}
即可
以上就是基本素材的添加及相应的代码操作,之后将会介绍核心的游戏功能代码。
最后
以上就是默默蛋挞为你收集整理的Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(上)的全部内容,希望文章能够帮你解决Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(上)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复