博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D--学习太空射击游戏制作(二)
阅读量:5852 次
发布时间:2019-06-19

本文共 3772 字,大约阅读时间需要 12 分钟。

步骤三:创建主角

游戏的主角是一艘太空飞船,我们将使用一个飞船模型作为游戏的主角,并赋予他一个脚本,控制他的运动,游戏体的组件必须依赖于脚本才能运行。

01:在Project窗口找到Player.fbx(通过3D Max制作的模型),将其拖动到Hierarchy窗口创建飞船的模型游戏体,然后在Inspector窗口将它的Y轴坐标设置为0,并旋转180度,如图:

 

02:在Project窗口选择Assets,右键选择Create->Folder创建一个文件夹,取名为Scripts,用于存放脚本文件,然后选择Scripts文件夹,右键选择Create->C# Script创建一个C#脚本,取名为Player,双击Player.cs脚本将其打开,Unity自动已经创建了一些基本代码,如图:

using UnityEngine;using System.Collections;[AddComponentMenu("MyGame/Player")] //此处为自定义脚本在菜单栏的位置,可以在Component->MyGame->Player找到public class Player : MonoBehaviour{	// Use this for initialization	void Start () {		}		// Update is called once per frame	void Update () {		}}

03:控制飞船的移动,在Player类中默认有一个Update函数,这个函数在程序运行时候每一帧都会调用一次,我们的代码主要就是写在这里:

using UnityEngine;using System.Collections;[AddComponentMenu("MyGame/Player")] //此处为自定义脚本在菜单栏的位置,可以在Component->MyGame->Player找到public class Player : MonoBehaviour{    public float m_speed = 1;//控制飞船的速度    public Transform m_transform; //定义游戏的Transform组件,Transform组件提供的主要功能都是和移动、    //旋转、缩放游戏体有关的    void Start()    {        m_transform = this.transform;    }    void Update()    {        //纵向移动距离        float moveVertical = 0;        //水平移动距离        float moveHorizontal = 0;        //按上键        if (Input.GetKey(KeyCode.UpArrow))        {            moveVertical -= m_speed * Time.deltaTime;//Time.deltaTime表示每帧的经过时间,那些需要每帧做增减变动的数值都需要乘上Time.deltaTime            //此处速度与Time.deltaTime相乘表示每帧移动N米距离        }        //按下键        if (Input.GetKey(KeyCode.DownArrow))        {            moveVertical += m_speed * Time.deltaTime;        }        //按左键        if (Input.GetKey(KeyCode.LeftArrow))        {            moveHorizontal += m_speed * Time.deltaTime;        }        //按右键        if (Input.GetKey(KeyCode.RightArrow))        {            moveHorizontal -= m_speed * Time.deltaTime;        }        //移动 Translate函数移动游戏体 Vector3类型的参数分别表示x、y、z三个方向上的移动距离        m_transform.Translate(new Vector3(moveHorizontal, 0, moveVertical));//此处是根据模型在设计器中的Scene坐标来讲的    }}

  此时运行游戏,按键盘的上下左右键已经可以移动游戏体,但是速度有些慢,我们可以在编辑器中修改一下Speed的值改变速度,这里需要注意的是在后台代码中定义的Public类型的变量,在编辑器中都会有所呈现,如图:

04:创建子弹,因为这是一个射击游戏,所以飞船要发射子弹,我们创建子弹的游戏体和脚本,在Project窗口找到rocket.fbx模型文件,拖动到Hierarchy窗口创建子弹游戏体,然后在Scripts文件夹中创建子弹的脚本文件Rocket,并将其指定给rocket游戏体,如图:

在Rocket类中添加3个属性,分别控制子弹的飞行速度、生存时间和威力:

using UnityEngine;using System.Collections;[AddComponentMenu("MyGame/Rocket")]public class Rocket : MonoBehaviour{    //子弹飞行速度    public float m_speed = 10;    //生存时间    public float m_liveTime = 1;    //威力    public float m_power = 1.0f;    protected Transform m_transform;    void Start()    {        m_transform = this.transform;         Destroy(this.gameObject, m_liveTime); //表示一定时间后销毁自身    }    void Update()    {       m_transform.Translate(new Vector3(0, 0, -m_speed * Time.deltaTime));    }}

05:创建子弹Prefab,由于游戏中的子弹是由玩家发射的,并可以发射很多,对于需要重复发射的游戏体,需要做成Prefab,Prefab可以理解为可以重复使用的游戏体。在Project窗口的Assets目录内创建一个名为prefabs的文件夹用于保存prefab,然后单击右键选择Create->Prefabs,创建一个空的Prefab,命名为Rocket,如图:

 在Hierarchy窗口选择前面创建的子弹的游戏体,将其拖动到刚刚创建的prefab上,Prefab的制作就完成了,场景中的原始子弹游戏体已经没有用,可以删掉,如图:

06:发射子弹,首先我们需要将飞船和子弹的Prefab关联起来,打开Player.cs脚本文件,添加一个Transform属性,将它指向子弹的Prefab

public Transform m_rocket; //在飞船的类中定义一个子弹的变量 把二者联系起来

  在Unity编辑器中,选择Player游戏体,在Inspector窗口找到Player脚本组件,发现多了一个Rocket选项,选择子弹的Prefab,将其拖动到Rocket选项上,如图:

打开Player.cs脚本,在Update函数中的最下面添加发射子弹的代码:

public float m_rocketRate = 0;//发射子弹的速度Void Update(){  ...       //按空格或者鼠标左键发射子弹        m_rocketRate -= Time.deltaTime;        if (m_rocketRate <= 0)        {            m_rocketRate = 0.1f; //每隔0.1秒发射一次子弹            if (Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0))            {                //Instantiate函数动态的创建子弹游戏体 发射子弹                Instantiate(m_rocket, m_transform.position, m_transform.rotation);            }        }}

  下面是创建敌人...

转载于:https://www.cnblogs.com/yk123/p/4896413.html

你可能感兴趣的文章
python 逆向生成正则表达式_python正则表达式
查看>>
python中组合数据类型有哪些_Python中的四种组合数据类型
查看>>
python预测新航线的票价_2020年中国大学MOOC的APP用Python玩转数据章节测验答案
查看>>
单片机原理及应用姜志海pdf_《单片机原理及应用(C语言版)》郭军利,祝朝坤,张凌燕【pdf】...
查看>>
mysql多实例管理脚本_mysql多实例停启脚本
查看>>
python interactive函数_Python 私有函数的实例详解
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
centos7.4编译mysql5.6_centos7.4 mysql5.6 源码安装
查看>>
mysql题目 以下语句错误的是什么意思_这条mysql语句有什么问题吗?教程上不出错,我全复制却出错....
查看>>
python 邮件解析_Python解析邮件
查看>>
python写windows小程序_在Windows环境下用Python写了一个小程序,出现下面的问题,希望大神能帮忙解答一下...
查看>>
sybase asa转mysql_SYBASE ASA数据库恢复方法
查看>>
java sdk mac 路径_Mac 上jdk默认存放路径以及环境变量配置
查看>>
java map 写法_Java中List与Map初始化的一些写法
查看>>
java垃圾回收 面试_Java垃圾回收相关面试题
查看>>
java linux命令测试网络连接_Linux系统查看网络配置信息的命令
查看>>
java swing combobox_java的swing中,我想在JComboBox下拉框中添加文本内容,该如何去实现?...
查看>>
java文件地址_Java 文件下载 不是真实的某文件地址
查看>>
jovi语音助手安装包_jovi语音助手下载
查看>>
maven导入项目java文件到不进去_IDEA是如何导入项目的,及启动导入项目遇到的问题:无法加载主类的一连串问题...
查看>>