Unity3D--学习太空射击游戏制作(二)
步骤三:创建主角
游戏的主角是一艘太空飞船,我们将使用一个飞船模型作为游戏的主角,并赋予他一个脚本,控制他的运动,游戏体的组件必须依赖于脚本才能运行。
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);
}
}
}
下面是创建敌人...
Unity3D--学习太空射击游戏制作(二)的更多相关文章
- Unity3D--学习太空射击游戏制作(一)
近期买了本书在学习一些Unity3D的东西,在了解了Unity3D工具的基本面板后开始学习一个太空射击游戏的开发过程. 首先下载一个关于本游戏的资源文件,(百度云下载地址:http://pan.bai ...
- Unity3D--学习太空射击游戏制作(四)
步骤七:添加声音和特效(射击声音和爆炸效果) 01:在Project窗口单机右键,选择Import Package->Custome Package,然后到资源文件目录packages浏览uni ...
- Unity3D--学习太空射击游戏制作(三)
步骤四:创建敌人 创建敌人的方式与创建主角类似,不过敌人的行为需要由计算机来控制,它将从上方迎着主角缓慢飞出来,并左右来回移动: 01:创建Enemy.cs脚本,添加代码: using UnityEn ...
- Unity3D学习笔记(三十二):Xlua(2)
Xlua支持通过子类对象访问父类的变量属性和方法 对于C#的ref,out参数的方法 当调用的时候:out类型的参数是不需要传递实参的,普通的参数和ref参数需要传递实参. out,ref传出值通 ...
- 用canvas制作酷炫射击游戏--part1
好久没写博客了,因为过年后一直在学游戏制作方面的知识.学得差不多后又花了3个月时间做了个作品出来,现在正拿着这个作品找工作. 作品地址:https://betasu.github.io/Crimonl ...
- Cocos2d-x v3.6制作射箭游戏(二)
原文 Cocos2d-x v3.6制作射箭游戏(二) 六 24, 2015by RENSHANin COCOS2D-X 上章我们创建并加载了游戏地图,接下来的两章我们将实现如下的效果. 在开始之前,先 ...
- cocos2d-x学习日志(10) --射击游戏(喵星战争)
转载请标明:转载自[小枫栏目],博文链接:http://blog.csdn.net/rexuefengye/article/details/10553487 一.纵版射击游戏的特点 纵版射击游戏是一种 ...
- 少儿编程Scratch第四讲:射击游戏的制作,克隆的奥秘
上周的宇宙大战射击游戏中,我们只完成了宇宙飞船发射子弹的部分.还未制作敌对方.这周制作了敌方-飞龙,飞龙随机在屏幕上方出现,如果被子弹打中,则得分,飞龙和子弹都消失. 敌方:飞龙:计分. 目的 目的: ...
- 使用Cocos2dx-JS开发一个飞行射击游戏
一.前言 笔者闲来无事,某天github闲逛,看到了游戏引擎的专题,引起了自己的兴趣,于是就自己捣腾了一下Cocos2dx-JS.由于是学习,所谓纸上得来终觉浅,只是看文档看sample看demo,并 ...
随机推荐
- 接入新浪、腾讯微博和人人网的Android客户端实例 接入新浪、腾讯微博和人人网的Android客户端实例
做了个Android项目,需要接入新浪微博,实现时也顺带着研究了下腾讯微博和人人网的Android客户端接入,本文就跟大家分享下三者的Android客户端接入方法. 一.实例概述 说白了,接入微博就是 ...
- C++和python使用struct传输二进制数据结构来实现
网络编程问题往往涉及二进制数据的传输.在C++经常使用的传输是文本字符串和分组结构. 假设该数据可以预先送入连续的内存区域,然后让send函数来获得的第一个地址,这一块连续的内存区就能完成传输数据.文 ...
- java_JdbcUtilis_单实例
//eg1,没有使用单实例,eg2有 package cn.itcast; import java.sql.Connection; import java.sql.DriverManager; imp ...
- 转--object-C 与lua使用wax交互
[51CTO独家译文]2011年6月的编程语言排行榜Lua语言一军突起,一举进入前十名.这与一年前苹果决定在iOS系统上使用Lua语言密不可分.但是,你了解如何用Lua语言在iOS上开发应用吗?51C ...
- 有关<action android:name="android.intent.action.DELETE" />
今天看一个病毒样本时遇到了这个Action,位于一个Activity节点下 通过真机测试与导师指导发现,这个Action的作用就相当于把其所在的应用加入到了“系统卸载程序”列表,当你卸载系统中的任一应 ...
- matlab中num2str的应用
在求导数,积分,方程的过程中,难免会遇到一些参数要随着情况有点变化,这时,你就需要能够动态的表示出你的表达式,Num2str函数是一个相当有用的函数,一般配合[]连接符使用,下面将我接触到的一些用法写 ...
- job interview
一 , 7series clock 二, SDRAM comtroller (DDR) 4.熟悉DDR2/3协议或Ethernet相关协议,并有实际项目经验者优先: 三,AXI bus(AMBA) 四 ...
- windows共享文件夹如何让CentOS 6.5读取
http://www.111cn.net/sys/CentOS/74104.htm 工作需要,需要把本地win7共享的文件夹让CenotOS 6.5服务器临时使用一下,以下是CentOS 6.5系统挂 ...
- [记录] nicescroll 在bootstrap tabs中工作
Operlapping Nicescroll scrolbars in Bootstrap tabs 因为我的tab是指定id的 <!-- Nav tabs --> <ul clas ...
- c# 委托与异步调用
背景:在winform UI中,有时需要对控件进行比较频繁的刷新,如进度条.picturebox显示视频等.如果在主线程进行这些刷新操作,操作还未完成就将执行下一次刷新,程序将发生错误:如果只是创建另 ...