您的位置:首页 > 移动开发 > Unity3D

Unity 3D 手机游戏开发学习随笔

2017-05-24 11:17 615 查看

——————————————————————————————————————————–

快速入门

本章主要介绍什么是Unity,Unity的安装和激活,并使用Unity创建一个运行在PC平台的Hello World程序。

Unity 简介

Unity(也称Unity3D)是一套包括图形、声音、物理等功能的游戏引擎,提供了一个强大的关卡编辑器,支持大部分主流3D软件格式,使用C#或JavaScript等高级语言实现脚本功能,使开发者无需了解底层复杂的技术,快速的开发出具有高性能、高品质的游戏产品。

特别棒的游戏网站——http://www.kongregate.com

第一人称射击游戏

策划

1、游戏介绍。在游戏场景中,会有若干个敌人的出生点,它会定时生成一些敌人,他们会寻找并攻击主角。游戏的目的就是生存下去,消灭更多的敌人,获取更多分。

2、UI界面。游戏中的UI比较简单,包括主角的生命值、弹药数量、得分和瞄准星。游戏失败后提供一个按钮重新开始游戏。

3、主角。我们看不到主角本人,在屏幕上看到的是一支端在胸前的M16 机关枪。按键盘的W、S、

A、D键控制主角前后左右行动,移动鼠标旋转视角,按鼠标左键进行射击。

4、敌人

敌人只有一种,是一个护士模样的僵尸,它将具有智能寻路功能,躲避障碍物,并攻击主角。

游戏场景

首先我们要准备一个游戏的场景,场景中的美术光盘提供,但我们还需进行一些设置,使其具有碰撞功能。

创建两个Plane及相应的material,作为火星表面和星空背景

摄像机视角调整和确定:alt+鼠标左键;GameObject→Align With View

Unity3D “xx AnimationEvent has no function name specified!”解决方案



创建主角

这个游戏的主角是一艘太空飞船,我们将使用一个飞船模型作为主角的游戏体,并赋予它一个脚本,控制它的运动。脚本是实现游戏逻辑的核心,它本身并不能独立运行,它必须作为某个游戏体的组件才能运行。

1、创建脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour {
public float m_speed = 1;
// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
//纵向移动距离
float movev = 0;
//水平移动距离
float moveh = 0;

if (Input.GetKey(KeyCode.UpArrow))
{
movev -= m_speed * Time.deltaTime;
}

if (Input.GetKey(KeyCode.DownArrow))
{
movev += m_speed * Time.deltaTime;
}

if (Input.GetKey(KeyCode.LeftArrow))
{
moveh += m_speed * Time.deltaTime;
}

if (Input.GetKey(KeyCode.RightArrow))
{
moveh -= m_speed * Time.deltaTime;
}

//移动
this.transform.Translate(new Vector3(moveh, 0, movev));
}
}


Input 是一个包装了输入功能的类,它包括几乎所有的键盘、鼠标或触控操作函数。

Time.delta Time 表示每帧的经过时间,那些需要每帧做增减变动的数值都需要乘上Time.deltaTime 。在我们这个例子中,速度与Time.deltaTime 相乘,表示每帧移动N 米距离。

tliis.transform 调用的是游戏体的Transform 组件, Transform 组件提供的主要功能都是和移动、旋转、缩放游戏体有关的。我们调用了Translate 函数移动游戏体,其中有一个Vector3类型的参数,用来表示x 、y、z 三个方向上的移动距离。

在Update 函数中每帧都去调用this.transform组件会造成一定的效率问题,我们可以在对象初始化时只调用一次并将其保存起来。Start 函数会在对象被实例化时自动调用一次,我们可以在这里做一些初始化工作,然后在Update 函数中修改控制移动的代码,将this.transform 替换为this.m_ transform,这样程序就不用每帧去查找Transform 组件,提高了程序的运行效率。

可以在编辑器窗口改变speed的值,只有public类型的属性才可以在编辑器窗口中实例化。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour {
public float m_speed = 1;
// Use this for initialization
protected Transform m_transform;
void Start () {
m_transform = this.transform;
}

// Update is called once per frame
void Update () {
//纵向移动距离
float movev = 0;
//水平移动距离
float moveh = 0;

if (Input.GetKey(KeyCode.UpArrow))
{
movev -= m_speed * Time.deltaTime;
}

if (Input.GetKey(KeyCode.DownArrow))
{
movev += m_speed * Time.deltaTime;
}

if (Input.GetKey(KeyCode.LeftArrow))
{
moveh += m_speed * Time.deltaTime;
}

if (Input.GetKey(KeyCode.RightArrow))
{
moveh -= m_speed * Time.deltaTime;
}

//移动
this.m_transform.Translate(new Vector3(moveh, 0, movev));
}
}


2、控制飞船移动:将脚本拖动到模型即可

3、创建子弹:飞船需要发射子弹,先创建它的游戏体和脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rocket : MonoBehaviour {
//子弹飞行速度
public float m_speed = 10;
//生存时间
public float m_liveTime = 1;
//威力
public float m_power = 1.0f;

protected Transform m_transform;

// Use this for initialization
void Start () {
m_transform = this.m_transform;
}

// Update is called once per frame
void Update () {
m_liveTime -= Time.deltaTime;
if (m_liveTime <= 0)
Destroy(this.gameObject);

m_transform.Translate(new Vector3(0, 0, -m_speed * Time.deltaTime));

}
}


4、创建子弹prefab

5、发射子弹:使用Instantiate 函数动态的创建子弹游戏体。

——————————————————————————————————————————–

随机阅读:











内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: