U3D 2D游戏之黑暗纪元 2D游戏基础入门开发全(1)
第一个U3D 2D游戏的例子,全部自己编写,算是入门用,这里记录一下。
1.首先游戏把层次布置好,这里分为 背景层,游戏层,UI层
背景层 (Background-1):就是单纯的背景显示作用。
游戏层 (Background-2): 主角和障碍物。
UI层 (Canvas):存放UI相关的东西。
背景层 :这里可以随便布置一些背景,就算不布置也无所谓,我这里就随便找了几个图布置了一下。
不过这里需要注意的就是背景层和游戏层的层次关系一定要分好,因为后面的射线需要去区分。
游戏层:游戏层的主要就是障碍物和主角,障碍物分很多,不一定就是单纯的阻碍寻找的,这里指的障碍物是所以能够碰撞产生效果的。
先讲解主角:主角要添加一个Animator,用来控制主角的动画状态。
然后给主角添加一些组件。
主角的运动脚本:
NarutoMove.cs
using UnityEngine;
using System.Collections; public class NarutoMove : MonoBehaviour {
private float moveSpeed;
private bool grounded = false;
public Transform Line_floor;
private bool jump = false; //角色的跳起
private float jumpy = 200f;
private Animator Nurutoanimator;
public AudioClip JumpMusic;//跳跃音频
private AudioSource audio;
// Use this for initialization
void Start () {
Nurutoanimator = this.GetComponent<Animator>();
audio = Camera.main.GetComponent<AudioSource>();
} // Update is called once per frame
void Update () {
float inputx = Input.GetAxis("Horizontal"); //获得水平移动
float inputy = Input.GetAxis("Vertical"); //获得垂直移动 if ((Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D)) && (!Input.GetKey(KeyCode.W) && !Input.GetKey(KeyCode.S)))
{
//为反反向
if (inputx <)
{
this.transform.rotation = Quaternion.Euler(, -, );
moveSpeed = -2f;
}else {
this.transform.rotation = Quaternion.Euler(, , );
moveSpeed = 2f;
}
// this.transform.Translate(new Vector3(1, 0, 0)* moveSpeed * Time.deltaTime);
this.transform.Translate(inputx * moveSpeed * Time.deltaTime, inputy * moveSpeed * Time.deltaTime, );
//this.transform.Rotate(new Vector3(inputx * 180, 0, 0));
Nurutoanimator.SetBool("RunFlg", true);
}
else
{
Nurutoanimator.SetBool("RunFlg", false);
} Debug.DrawLine(transform.position, Line_floor.transform.position, Color.red, 1f);
//与地面接触为真,才能够进行跳跃
grounded = Physics2D.Linecast(transform.position, Line_floor.transform.position, << LayerMask.NameToLayer("Ground")); if (grounded && Input.GetKeyDown(KeyCode.J))
{
jump = true; //设置角色的起跳功能
if (jump == true)
{
Musiplay(audio,JumpMusic);
Nurutoanimator.SetBool("RunJumpFlg", true);
// AudioSource.PlayClipAtPoint(jumpclips, gameObject.transform.position); 角色跳跃音效
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(1f, jumpy)); //添加一个向上Y的力
//hero.AddForce(new Vector2(0f,1000f));
jump = false;
grounded = false;
}
}
else {
Nurutoanimator.SetBool("RunJumpFlg", false);
} }
//播放跳跃音乐
void Musiplay(AudioSource audio, AudioClip clip) {
audio.volume = 1f;
audio.PlayOneShot(clip);
audio.volume = 0.2f;
}
}
Health.cs主角的血量控制脚本
using UnityEngine;
using System.Collections;
using UnityEngine.UI; public class Health : MonoBehaviour { public int Hp;
private Slider slider;
private Text time;
private int HpCnt = ;
// Use this for initialization public float fireRate = 3f;//冷却时间
private float nextFire = 0.0f;
void Start () {
//this.GetComponent<text
slider = GameObject.FindGameObjectWithTag("Hp").GetComponent<Slider>();
time = GameObject.FindGameObjectWithTag("Time").GetComponent<Text>(); } // Update is called once per frame
void Update () {
time.text = Time.time.ToString(); CutHp();
}
//每隔一定的时间2s会减少2滴血
public void CutHp() {
//冷却时间
//最开始Time.time ==0 nextFire==3 所以3S过后,Time.time > nextFire
if (Time.time > nextFire)
{
nextFire = Time.time + fireRate;
Hp = Hp - ;
slider.value = Hp;
if (Hp <= )
{
Application.LoadLevel("GameOver");
Destroy(this.gameObject);
}
}
}
public void AddHP(int damageCount,int HPCount) { Hp += damageCount;
if(Hp >= HPCount){
Hp = HPCount;
}
slider.value = Hp;
if (Hp <=)
{
Destroy(this.gameObject);
}
} void OnCollisionEnter2D(Collision2D collision)
{
AddHealth foodHealth = collision.collider.gameObject.GetComponent<AddHealth>();
if (foodHealth != null)
{
AddHP(foodHealth.AddTime, HpCnt);
Destroy(foodHealth.gameObject);
} } }
游戏层中的障碍物:
障碍物也就具有个重力和碰撞器属性,用来阻止主角通过。
游戏层中的水果:
用来给主角加血液,创建一个空物体。然后添加一个脚本,给里面指定一些预置体。
FoodColltor.cs
using UnityEngine;
using System.Collections; public class FoodColltor : MonoBehaviour { public GameObject[] Foods;
private int FoodType;
private float fireRate = 5.0f;//冷却时间
private float nextFire = 0.0f;//定位时间基准
private Transform Playertransform;
private float deathTime = 6.0f;
// Use this for initialization
void Start () {
//得到玩家的坐标
Playertransform = GameObject.FindGameObjectWithTag("Player").transform;
} // Update is called once per frame
void Update () {
//在一定的时间生成水果,和在一定的时间删除水果
FoodTimeColltor();
}
//每隔一定的时间,3个水果
void FoodTimeColltor() {
if (Time.time > nextFire)
{
nextFire = Time.time + fireRate;
RandomCreateFood();
}
}
//随机生成水果
public void RandomCreateFood(int FoodNum) { for (int i = ; i < FoodNum; i++)
{
FoodType = Random.Range(, Foods.Length);
Vector2 foodPosition = new Vector2(Playertransform.position.x + Random.Range(, ), transform.position.y + Random.Range(,0.8f));
GameObject food = GameObject.Instantiate(Foods[FoodType], foodPosition, Quaternion.Euler(new Vector3(, , ))) as GameObject;
food.transform.parent = this.transform; //设定水果的父游戏对象
this.FooddDeath(food);
} } //水果的死亡,到一定的时间后对自动死亡
public void FooddDeath(GameObject food) {
Destroy(food, deathTime);
} }
最后给相机加一个跟随主角运动脚本。
CameraMove.cs
using UnityEngine;
using System.Collections; public class CameraMove : MonoBehaviour { private Transform Playertransform;
// Use this for initialization
void Start () {
//获得游戏玩家对象
Playertransform = GameObject.FindGameObjectWithTag("Player").transform;
} // Update is called once per frame
void LateUpdate () {
//将游戏对象的坐标赋给相机的坐标
//transform.position = new Vector3(Playertransform.position.x, -1.0f, -3.5f); 会稍微出现卡顿的现象
// transform.position = Playertransform.position
transform.position = new Vector2(Playertransform.position.x+2f, -0.1f);
}
}
游戏:http://pan.baidu.com/s/1hsIxUug
源码:
U3D 2D游戏之黑暗纪元 2D游戏基础入门开发全(1)的更多相关文章
- Unity3D 之3D游戏SD快打 3D游戏基础入门开发全(1)
这里记录一个U3D游戏,3D游戏的基本开发. 导入素材 1.首先导入需要的素材.因为FBX格式的素材是通用的,所以尽量导入这样的资源使用 导入后的结果: 然后对人形骨骼进行设置. 看哪里没有映射到骨骼 ...
- JS写小游戏(一):游戏框架
前言 前一阵发现一个不错的网站,都是一些用html5+css+js写的小游戏,于是打算学习一番,写下这个系列博客主要是为了加深理解,当然也有一些个人感悟,如果英文好可以直接Click Here. 概述 ...
- 使用UIKit制作卡牌游戏(一)ios游戏篇
转自朋友Tommy 的翻译,自己只翻译了第三篇教程. 译者: Tommy | 原文作者: Matthijs Hollemans写于2012/06/29 原文地址: http://www.raywend ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程:简介及目录》(附上完整工程文件)
介绍:讲述如何使用Genesis-3D来制作一个横版格斗游戏,涉及如何制作连招系统,如何使用包围盒实现碰撞检测,软键盘的制作,场景切换,技能读表,简单怪物AI等等,并为您提供这个框架的全套资源,源码以 ...
- 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
3.暂停游戏 暂停游戏概述: 在游戏进行时,玩家有可能会遇到多种突发事件.在跑酷游戏中突发状况的发生对游戏的影响更甚,游戏进行时玩家死亡,游戏只能从头开始,那么如果因为外界因素而影响游戏的进行,显然是 ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程07:UI》
概述: UI即User Interface(用户界面)的简称.UI设计是指对软件的燃机交互.操作逻辑.界面美观的整体设计.好的UI设计不仅可以让游戏变得更有品位,更吸引玩家,还能充分体现开发者对游戏整 ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程03:碰撞检测》
3.碰撞检测 碰撞检测的概述: 碰撞在物理学中表现为两粒子或物体间极端的相互作用.而在游戏世界中,游戏对象在游戏世界自身并不受物理左右,为了模拟真实世界的效果,需要开发者为其添加属性,以模拟真实事件的 ...
- 【用PS3手柄在安卓设备上玩游戏系列】谈安卓游戏对手柄的支持
不同的游戏对于手柄的支持程度是不一样的,对应所需要进行的手柄设置也不尽相同.我没有这样的时间和精力,针对每一款游戏去写博客,但找出不同游戏中的共同点,针对同一类的游戏去写博客,应该是可行的.我把安卓上 ...
- 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化
联系QQ:305-710439斗牛app上架应用宝.牛牛手机游戏推广.百人牛牛app应用开发.棋牌游戏上传.手游APP优化 iOS开发iPhone/iPad平台安卓手机软件开发机型覆盖范围 超过113 ...
随机推荐
- 【转】win7与VMware ubuntu虚拟机实现文件共享(最后一定要装open-vm-dkms插件)
原文网址:http://blog.sina.com.cn/s/blog_453b9efb01019hpl.html 一般来说,由于一些特殊的需要,会在Win7系统中利用虚拟机(VMware)安装ubu ...
- 【转】G++ 处理 /usr/bin/ld: cannot find -lc
原文网址:http://blog.sina.com.cn/s/blog_67bbb71101010tto.html 用g++编译C++程序时显示出:/usr/lib/ld: cannot find - ...
- Android学习之路——简易版微信为例(二)
1 概述 从这篇博文开始,正式进入简易版微信的开发.深入学习前,想谈谈个人对Android程序开发一些理解,不一定正确,只是自己的一点想法.Android程序开发不像我们在大学时候写C控制台程序那样, ...
- oracle的exp、imp命令
1.EXP a>完全模式 full=y EXP USER/PASSWORD@DB (AS ROLE) BUFFER=64000 FILE=C:\FULL.DMP FULL=Y b>用户模式 ...
- The Task: Events, Asynchronous Calls, Async and Await
The Task: Events, Asynchronous Calls, Async and Await Almost any software application today will lik ...
- Monkey的简单自动化
手机测试都逃避不了Monkey,但每次都是手动跑Monkey,自己导出包来,一条条的手动输入命令. 现在轮到我去执行这些任务,觉得很是繁琐,于是写了这个脚本,自动读取导出的包名,一键回车搞定. 代码如 ...
- 基于React服务器端渲染的博客系统
系统目录及源码由此进入 目录 1. 开发前准备 1.1 技术选型1.2 整体设计1.3 构建开发 2. 技术点 2.1 react2.2 redux, react-router2.3 server-r ...
- java 小结3 hashcode和equals I/o问题
我需要把星期天看的一些东西记录下来,要不然会忘记. hashCode.equals: 1)每个java对象都有hashCode和equals方法. java的终极类是object类,那么object类 ...
- passwnger
环境:ubuntu10.04 + nginx + passenger + ruby1.8.7 rails2.3.x #安装nginx(手动编译) $ mkdir -p /home/mouse/opt ...
- A Tour of Go Variables with initializers
A var declaration can include initializers, one per variable. If an initializer is present, the type ...