2017-08-09 12:43:07 SakuraLLj 阅读数 1691
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4644 人正在学习 去看看 张刚

什么是协程(Coroutine)

在unity中,协程的概念类似于线程,它是一种特殊的函数,能够中断(通过yield语句)执行当前的代码,直到中断指令(YieldInstruction)结束后再接着执行之前的代码。

典型用法

这里写图片描述

注意事项

  1. 协程的返回值必须是IEnunmerator
  2. 协程的参数不能加ref或out
  3. 在c#脚本中,必须通过StartCoroutine来驱动协程
  4. yield语句要用yield return 来代替
  5. StartCoroutine只能在monoBehaviour或其子类中使用
  6. StartCoroutine接收协程的名称(字符串)或IEnumerator实例作为参数
  7. 在Unity中,可以使用函数StopCoroutine来终止一个协程,但这种方法只适用于使用协程的名称作为参数启动的协程。使用StopAllCoroutine可以终止该monoBehaviour中的所有协程。还有一个不常用的方法来终止协程,即将协程所在的游戏对象的active属性设置为false,但是当再次将active改为TRUE时,协程不会自动启动。
  8. yield return 语句不能用在try-catch语句块中,但可以用在try-finally中的try语句块中
  9. yield return语句不能放在匿名方法中
  10. yield return语句不能放在unsafe语句块中

示例代码

 IEnumerator WaitAndPrint()
    {
        yield return new WaitForSeconds(1);//WaitForSeconds()受Time.timeScale影响,当Time.timeScale为0时,yield return new WaitForSeconds(n) 将失效
        print("WaitAndPrint");
    }
 IEnumerator Download()
    {
        string url = "http://download.csdn.net/detail/sakurallj/9926053";
        WWW w =new WWW(url);
        yield return w;
        if (w!=null)
        {
            Debug.Log(w.text);
        }
        StopAllCoroutines();
    }

参考
Unity官方案例精讲的协程章节,下载地址在这里

2018-04-18 23:46:10 MadBam_boo 阅读数 1153
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4644 人正在学习 去看看 张刚

案例来源:Unity3d - Flappy Bird
资源:Flappy Bird Asset

Unity3d官方案例之Flappy Bird(上篇)

本案例来自Unity3d官方案例教程,一切资源均为官方视频内提供。
游戏介绍:
 本案例是实现之前很火的一款游戏《flappy bird》。
 《flappy bird》是一款由来自越南的独立游戏开发者Dong Nguyen所开发的作品。(信息来源:百度)

 这款游戏我们可以通过点击屏幕,实现类似“跳跃”的飞翔,通过一个又一个的关卡。
 这里写图片描述
 实现这个游戏我们需要完成以下功能:
 · 游戏界面的布置(背景、地板、小鸟等);
 · 小鸟动画和逻辑实现(Animation Clip的设置、Animation Controller的设置等);
 · 游戏UI 制作
 · “无限”滚动背景的实现;
 · “无限“生成障碍;
 · 额外功能…
 话不多说我们开始吧~

一、游戏界面的布置

1、新建Project,重命名为Flappy Bird,选择2D,将下载后解压完成的资源包拖进Assets中。(选中对应文件夹直接拖拽即可)
这里写图片描述
2、目录如下所示:
这里写图片描述
 其中,
 ① LuckiestGuy, 项目中用到的字体。
 ② BirdHero,小鸟的三种形态(飞行、展翅、坠机),因为都在同一张贴图里,因此待会儿需要将它分开。
 ③ ColumnSprite,障碍物贴图,也就是水管。
 ④ GrassThinSprite,草地贴图。
 ⑤ SkyTileSprite,天空贴图,天空背景。
3、我们选中BirdHero Sprite,在Inspector中,
· 将Texture Type设置成(Sprite 2D and UI),
· 将Sprite Mode设置成Multiple。
这样我们就能将小鸟的三种形态分离开来。
· 点击Sprite Editor,在弹出的窗口中选择Apply
这里写图片描述
· 在打开的面板中选择Slice,Type为Automatic,然后点击Slice,最后点击右上方的Apply。
(Sprtie Editor的好处在于美工可以将一堆的UI制作在一个贴图内,然后我们只需要在Sprite Editor中根据需求选择不同的Type方式去对贴图进行分割,这样我们就能统一管理一堆的贴图了。)
这里写图片描述
· 这时点击三个小鸟的位置,都会有一个个框框,这表示该贴图已经被分成3个贴图了,在右下方的Sprite小窗口中我们可以观察到相关的参数,具体的作用有兴趣的可以自己捣鼓一下,这里就不赘述了。
这里写图片描述
` 关闭Sprite Editor后,我们可以在Project中看到切割后的结果。
这里写图片描述
· 我们把BirdHero_1拖到Hierarchy中,制作小鸟GameObject,重命名为Bird。
4、分别将GrassThinSprite和SkyTileSprite拖拽到Hierarchy中生成草地和天空背景,分别重命名为Ground、Background。
5、Bird、Gound、Background的Sprite Renderer Component中都有一个属性Sotring Layer,我们可以通过给不同的GameObject设置不同的Layer来决定哪一个GameObject在前哪一个在后。我们选择Sprite Renderer Component中的Sotring Layer,点击Add Sorting Layer… 定义不同的Layer。
这里写图片描述
我们自定义三个Layer,分别为Background、Middle、Front,最下方的Layer显示在最前方,最上方的Layer显示在最下方,跟PS里的图层概念相似。通过Layer我们可以更好的管理UI,比如我们可以把Game中静态的物体(不能和用户产生互动的物体、墙壁之类的)设置一个Layer,这样我们在编写逻辑时可以无视该Layer下所有Object的交互。
这里写图片描述
这里,我们给Bird的Sorting Layer设置为Middle,Ground设置为Front,Background设置为Background,然后调整各个UI的位置。
这里写图片描述
6、Ctrl+S,新建Scenes文件夹,将场景保存,名字 这里命名为main(你喜欢都ok)。养成良好的Ctrl+S习惯,不然一旦崩溃或者什么的.. em…
7、给Bird添加Polygen Collider 2D 和 Rigidbody 2D Component
这里写图片描述
8、给Ground添加Box Collider 2D,并调整Offset和Size属性使其合理地包裹着Ground。
这里写图片描述
9、运行,如果你的步骤正确,Bird在运行后会掉落在地上,Bird的Rigidbody 2D Component提供了物理模拟,Bird和Ground的Collider 2D提供了碰撞检测,因此Bird会向下掉落,碰到Ground后会停止。
这里写图片描述
10、这一步的准备工作就完成啦。记得Ctrl + S

二、小鸟动画和逻辑实现

1、选择Bird > Window > Animation,或者直接快捷键Ctrl+6(选中Bird的前提下)。
这里写图片描述
2、选择Create(注意,请选中Bird再Create)创建Animation Clip(一个Animation Clip表示一个动作),点击Create后创建新文件夹重命名为Animations,用于存放Animations相关资源,将当前Clip重命名为Idle并保存到Animations文件夹中。
这里写图片描述
3、点击录制按钮(红色的点),Add Property,选择Sprite Renderer下的Sprite,点击+按钮。
这里写图片描述
4、选中最后一个关键帧,右键Delete。
这里写图片描述
5、选中第一个关键帧,在Inspector中的Sprite Renderer Component中,将Sprite设置为BirdHero_0..
这里写图片描述
6、选中第一个关键帧,Ctrl+C,点击左上方的Idle,下拉列表中选择Create New Clip,命名为Flappy,确定之后将会调到Flappy Clip的设置面板,注意左上方Clip的名称。
这里写图片描述
这里写图片描述
点击Animation面板,然后Ctrl + V,开启录制(小红点),选中第一个关键帧,在右方Inspector中设置Sprite为BirdHero_1。
这里写图片描述
按照同样的方法,新建Clip命名为Die,开启录制,选中第一个关键帧,将Sprite更改为BirdHero_2。完成后,可以切换不同的Clip查看Sprite是否设置正确,确定无误后退出Animation面板,这时Project下的Animations文件夹中会有:
3个Clip和一个Bird Controller。
这里写图片描述
7、双击Bird Controller进入Animator面板,我们通过该动画状态机面板对刚刚制作的三个Clip进行流程设置。
 在Animator中有三个基本Clip:Any State、Entry、Exit。并且我们可以看到Idle Clip被标注为亮橙色。这是默认状态。启动Animator后,将会由Entry转换到Idle状态,并且一直循环,直到触发了某些条件后将会发生状态转换。
 这里写图片描述
 在Animator中不同状态之间的切换过程称为Transition,Transition的创建方法就是选中一个Clip右键拖拽到下一个Clip上即可。点击创建好的Transition后我们可以在右方面板中对其进行相关属性的设置。本案例中我们只需要关注Has Exit Time以及Conditions属性即可。
 · Has Exit Time: 选中后,当前状态会播放完毕再转换到下一个状态;反之,立即切换;
 · Conditions:通过添加Conditions可以设置状态转换的条件。
 这里写图片描述
 我们通过设置变量来实现状态之间的转换,变量的转变可以在脚本中实现。
 左上方选择Parameters > 点击+即可添加变量。变量有四种:
 · Float 浮点型:可用于数值判断,比如说大于某某值时转换状态,举个例子,移动速度 站立 > 步行 > 奔跑 > 冲刺;
 · Int 整型:跟Float类似,区别在于精度;
 · Bool 布尔型:只有True和False两个值;
 · Trigger 触发型:每触发一次就会进行状态转换,常见于开关设置等等。
 我们Add了相关的parameter后便可选中Transition并添加Conditions了。
 这里写图片描述
 更详细的内容可以去官网查看文档,这里不再赘述。
回到正题,先分析下我们需要的状态转换:
我们希望的功能:
 当点击屏幕后,Bird由Idle转换到Flappy。
 Flappy动画播放完毕后,自动切换回Idle Clip。
 当Bird碰到地板、障碍物后,Bird播放Die。
根据以上描述,我们先设置好Transition以及添加两个Trigger变量分别命名为Die和Flappy。如图:这里写图片描述
由于我们希望当Die触发后,立刻播放Die Clip,因此我们选中对应的Transition,取消Has Exit Time的勾选,设置Conditions为Die:
这里写图片描述
在Idle切换到Flappy的过程中,我们也希望能立即切换,因此选中相关Transition,取消Has Exit Time的勾选,设置Conditions为Flappy:
这里写图片描述
第三个Transition,由于我们希望在Flappy播放完后自动切换回Idle,因此不需要取消Has Exit Time的勾选,也不需要设置Conditions,因此可以不对他作任何操作。
至此,完成动画Clip的设置,Ctrl+S,关闭Animator窗口,选中Bird,我们可以看到Bird下多了一个Animator的Component,这是在我们创建第一个Clip的时候Unity3d就帮我们自动添加的,其中的Controller就是我们刚刚设置的Controller。
这里写图片描述
8、接下来我们开始编辑脚本实现Bird的动画效果以及点击Flappy功能。
选中Bird,在Inspector中点击Add Component,输入Bird,创建新的名字为Bird的C# Script。
双击Bird Script进行编辑。a..最后还是在Project中新建一个Scripts文件夹然后把Bird Script拖拽到Scripts文件夹中,Ctrl+S养成良好习惯。
在脚本中我们这一步需要实现的功能是:
· 点击屏幕Bird向上Flappy(我们通过使用一直向左滑动的背景和小鸟向上Flappy制作出飞翔效果,即相对背景,Bird移动了,这是“无限”背景滚动类游戏通用的方法,比如说打飞机。)。
· 不同状态下的Bird 播放不同动画。

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

public class Bird : MonoBehaviour {

    public float upperForce = 250f;         // the force add to bird when it flappy.

    private Rigidbody2D rb2d;               // the rigidbody 2d component
    private Animator animator;              // the animator component
    private bool isDead = false;            // mark if bird is dead.

    void Start()
    {
        rb2d = GetComponent<Rigidbody2D> ();
        animator = GetComponent<Animator> ();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown (0) && !isDead) {      // check input and bird's status
            rb2d.velocity = Vector2.zero;
            rb2d.AddForce (new Vector2 (0, upperForce));    // add a upper force
            animator.SetTrigger ("Flappy");                 // change current animation clip to flappy
        }
    }

    void OnCollisionEnter2D()
    {
        rb2d.velocity = Vector2.zero;
        isDead = true;
        animator.SetTrigger ("Die");                        // change current animation clip to Die
    }

}

这是个简单的实现,编辑完成后Ctrl + S,返回Unity3d,运行测试一下吧,如果感觉不顺手可以调整一下upperForce的数值或者调整一下Bird的Rigidbody2D相关数值,直到自己顺手为止。记得Ctrl + S,如果出现Error,请根据错误提示检查你的代码。

下一篇我们将实现剩下的功能~

2017-08-09 16:45:29 SakuraLLj 阅读数 423
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4644 人正在学习 去看看 张刚

unity脚本事件的执行顺序

这里写图片描述
这里写图片描述
这里写图片描述
注:
可以在Edit->Project Setting->Script Execution Order 来设置多个脚本的执行顺序

参考
Unity官方案例精讲-unity脚本事件的执行顺序,下载地址在这里

2018-01-14 22:09:51 weixin_41556165 阅读数 1356
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4644 人正在学习 去看看 张刚
如果有不懂得先看http://blog.csdn.net/weixin_41556165/article/details/79013817谢谢
一般使用ISO更加方便,大佬都这么用不要问我为什么
创建材质,紫色材质的地面。新建文件夹取名Materials,右键create->material并命名为Ground
创建一个场景,本案例只有一个场景命名为main
创建地面(放大两倍)和小球,并将Ground材质(右键创建)给地面。通过拖动材质到Scenes上或拖动至层级视图的Ground上
如下所示:
将小球设置为刚体
刚体的概念:在任何力的作用下,体积和形状都不发生改变的物体叫做“刚体”(Rigid body)。它是力学中的一个科学抽象概念,即理想模型。
点击添加组件,搜索rigi并添加。小球具有了物理属性
给小球添加脚本:project下右键创建文件夹在文件夹上右键创建C# script脚本。
拖动脚本至Player的Add Component上,即应用该脚本。

编辑脚本:双击脚本进行编辑。
开启动画(点击上面的播放图标),发现小球沿着x轴滚动起来了
小球受方向键控制
input.GetAxis 用法(GetAxis("Mouse X"),GetAxis("Mouse Y"),GetAxis("Mouse ScrollWheel"),GetAxis("Vertical "),GetAxis("Horizontal "),
GetAxis 是个方法,需要传参数,参数为string类型,参数如下:
一:触屏类
1.Mouse X 鼠标沿着屏幕X移动时触发
2.Mouse Y 鼠标沿着屏幕Y移动时触发
3.Mouse ScrollWheel 当鼠标滚动轮滚动时触发
二:键盘操作类
1.Vertical 对应键盘上面的上下箭头,当按下上或下箭头时触发
2.Horizontal 对应键盘上面的左右箭头,当按下左或右箭头时触发

定义变量用于改变力的大小,public变量可在unity中脚本所在位置修改
控制相机跟随
在相机脚本中定义一个playerTransform组件,指定组件功能所控制的物体。
相机脚本如下,三维向量offset用于接收两者的相对位置向量


知识点:Transform
变换组件决定了场景中所有物体的方位,旋转和缩放。每个物体都有一个变换组件。
变换组件的所有属性都是相对其父物体进行衡量的,如果此物体没有父物体,这些属性则相对于世界坐标进行计算。
Properties 属性
  • Position 位置
以X、Y、Z坐标系表示变换的位置。
  • Rotation 旋转
表示此变换以X,Y,Z轴为准的旋转程度,以角度为单位。
  • Scale 缩放
沿着X,Y,Z轴缩放此变换。值为"1"时表示原始尺寸(物体最初被导入时的大小)

控制小球的移动范围
创建cube改变样式将地面围起来就控制了范围。
创建碰撞消失的物体
创建一个cube并改名为PickUp,设置其倾斜x,y,z均为45度,要创建一样的很多个实物方法如下:
1.再project窗口中创建一个模型文件夹Prefabs用于存放模型,将该PickUp拖入该文件夹,由于要创建多个在层级视图中创建PickUps存放所有的PickUp。
注意:其他PickUp由模型PickUp(Prefabs文件夹里的)拖至面板生成,或者ctrl+D生成。
控制碰撞消失物体的旋转
创建脚本用于旋转,使用transform组件,将脚本用于模型PickUp(Prefabs文件夹里的这样所有由模型创建的物体均沿着y轴旋转起来了。
小球碰撞的物体消失
给所有物体添加PickUp标签,小球碰撞到的带标签的物体该物体就消失。碰撞函数为OnCollisionEnter,传入碰撞体参数,该脚本为Player的脚本所以碰撞体为小球。



2019-05-07 16:08:49 hjdh70 阅读数 441
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4644 人正在学习 去看看 张刚

    作为Unity引擎的辅助学习资料,Unity公司提供了大量的官方示例和演示程序供开发者参考,这些程序示例涵盖了各个主要游戏类型的程序架构,以及Unity引擎本身的几乎所有重要功能,极富参考价值。可惜的是,Unity公司在提供这些程序示例的同时,并没有给出相应的详细文字讲解和说明。

Unity官方案例精讲》[5.x版本]即从这些示例中精心挑选了若干个具有代表性的实例进行详细讲解,在每个实例中都重点切入一个或几个Unity引擎的核心功能点,进而以接近于现场教学的方式,引导读者一边阅读、一边动手,通过实际操作来掌握学习内容。在讲解过程中,本书还对与Unity编程相关的重要知识加以特别关注和讲解,使读者在实践中深刻理解Unity引擎的原理和使用方法,真正做到融会贯通。

 

                                                                               资源获取链接

Unity官方案例精讲目录

第1章 C#脚本编程基础


第一章属于基础向,告诉那些刚接触Unityt同时没有什么编程经验的的新人,怎么在Unity中使用C#进行开发。

第2章 JavaScript脚本编程基础


第二章和第一章本质上是一样的,只是介绍的语言不一样。

第3章 星际航行游戏——JSpaceShooter


第三章是通过制作一个类似愤怒的小鸟的游戏,讲解资源的导入、控制物体移动、添加音效。

第4章 潜行游戏——Stealth


第四章是通过制作一个潜行的小游戏,讲解加载场景、导入和配置人物角色、主角和环境的交互、主角和敌人的交互。

第5章 粒子碰撞回调功能——ParticleCallbacks 


第五章是通过实际制作粒子效果,讲解在游戏中如何创建粒子效果。

第6章 Mecanim动画系统介绍——MecanimExampleScenes


第六章是通过实际制作游戏动画,讲解动画系统的工作流程和相关术语、以及如何使用。

第7章 Mecanim系统高级课程——MecanimGDC2013SampleProject


第七章通过制作复杂的动画,讲解Mecanim系统的高级设置部分。

第8章 移动设备输入控制——StarTrooper


第八章通过制作游戏案例,讲解StarTrooper的控制。

第9章 人物换装——CharacterCustomization


第九章通过制作游戏案例,讲解游戏换装的实现、以及如何进行操作。

第10章 第三人称射击游戏——ThirdPersonMMOController


第十章通过制作游戏案例,讲解第三人称角色的移动控制、摄像机的移动控制。

第11章赛车游戏——CarTutorial


第十一章通过制作游戏案例,讲解资源的加载、赛车的控制、赛车的物理交互。

第12章原生2D系统游戏——2D Platformer


第十二章通过制作2D组件动画,讲解2D Platformer的制作和交互。

第13章UGU系统应用案例——Nightnares


第十三章通过制作游戏案例,讲解UGUI的元素、UGUI的显示与控制。

                                                                               资源获取链接

 

 

 

 

 

 

 

 

 

没有更多推荐了,返回首页