unity_unity3d - CSDN
unity 订阅
Unity是游戏引擎开发商 [1-2]  ,实时3D互动内容创作和运营平台 [3]  。 [2]  包括游戏开发、美术、建筑、汽车设计、影视制作在内的创作者运用Unity实现。 [2]  Unity提供一整套软件解决方案,可用于创作、运营和变现实时互动的2D和3D内容 [2]  ,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 [2]  2019年使用Unity制作的游戏和体验已在全球范围内覆盖将近30亿台设备 [4]  ,月均下载量超过30亿次 [5]  。并且其在2019年的安装量已超过370亿次。 [4]  全平台(包括PC/主机/移动设备)游戏中有一半都是基于Unity创作的。 [5]  Unity提供易用实时平台,开发者可以在平台上构建各种AR和VR互动体验 [5]  ,全球超过60%的AR和VR内容都用Unity制作。 [5]  2020年5月9日,Unity宣布收购加拿大技术服务公司Finger Food,拓展工业应用版图。 [6] 展开全文
Unity是游戏引擎开发商 [1-2]  ,实时3D互动内容创作和运营平台 [3]  。 [2]  包括游戏开发、美术、建筑、汽车设计、影视制作在内的创作者运用Unity实现。 [2]  Unity提供一整套软件解决方案,可用于创作、运营和变现实时互动的2D和3D内容 [2]  ,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 [2]  2019年使用Unity制作的游戏和体验已在全球范围内覆盖将近30亿台设备 [4]  ,月均下载量超过30亿次 [5]  。并且其在2019年的安装量已超过370亿次。 [4]  全平台(包括PC/主机/移动设备)游戏中有一半都是基于Unity创作的。 [5]  Unity提供易用实时平台,开发者可以在平台上构建各种AR和VR互动体验 [5]  ,全球超过60%的AR和VR内容都用Unity制作。 [5]  2020年5月9日,Unity宣布收购加拿大技术服务公司Finger Food,拓展工业应用版图。 [6]
信息
开发公司
Unity Technologies
类    别
创作引擎、开发工具 [2]
员工数
约3500名 [2]
CEO
John Riccitiello [7]
别    名
U3D、Unity3D
属    性
软件公司 [2]
成立时间
2004年 [4]
支持维度
2D、3D、VR、AR、MR [2]
外文名
Unity
编程语言
C# [2]
Unity基本介绍
Unity3D(7张) Unity [8]  引擎使开发者能够为超过20个平台创作和优化内容 [5]  ,包括iOS、安卓、Windows [2]  、Mac OS、索尼PS4、任天堂Switch [2]  、微软Xbox One、谷歌Stadia、微软Hololens、谷歌AR Core、苹果AR Kit、商汤SenseAR等等 [2]  。公司超过1400人规模的研发团队让Unity的技术跟随合作伙伴迭代 [5]  ,确保在最新的版本和平台上提供优化支持服务。 [5]  Unity还提供运营服务来帮助创作者 [2]  ,包括:Unity Ads广告服务、Unity游戏云一站式联网游戏服务、Vivox游戏语音服务、Multiplay海外服务器托管服务 [2]  、Unity内容分发平台(UDP)、Unity Asset Store资源商店 [2]  、Unity云构建等。 [2]  Unity在中国、比利时、芬兰、加拿大、法国、新加坡、德国等16个国家拥有44个办公室 [5]  ,创作者分布在全球190个国家和地区。 [5] 
收起全文
精华内容
参与话题
  • 基于Unity的游戏开发(上)

    万人学习 2019-06-24 11:55:37
    本课程是Unity游戏开发的入门课程,课程分为上、下两个部分。上篇主要讲述游戏的基本概念、Unity的开发环境、游戏资源的创建和使用等基础内容。
  • Unity入门:第一个游戏

    万次阅读 多人点赞 2018-02-02 22:12:12
    Unity官网提供了详尽的文档和丰富的教学视频,昨天跟着视频做了一个简单的3d游戏“roll-a-ball”。游戏涉及了许多Unity的基本知识,用来入门很不错。 这篇博文并不讲述整个游戏的制作流程,如果您感兴趣,可以访问...

    Unity官网提供了详尽的文档和丰富的教学视频,昨天跟着视频做了一个简单的3d游戏“roll-a-ball”。游戏涉及了许多Unity的基本知识,用来入门很不错。

    这篇博文并不讲述整个游戏的制作流程,如果您感兴趣,可以访问这里,如果访问遇到什么困难,在B站有一摸一样的视频

    这是完成以后的样子:


    运行效果:


    作为个人小结,下面写一些做这个游戏的收获:

    1、什么是Unity?

    一款游戏引擎,至于什么是游戏引擎,这里不展开。

    2、下载和安装

    官网:Unity官网

    作为学习用途,下载personal版即可。

    3、熟悉Unity界面

    进入Unity后,将会看到这样的界面:


    上图将界面划分成了5部分,下面分别解释每部分的功能:

    (1)Toolbar

    上面的按钮有不同的功能,比如左侧的第一个按钮可以用来移动场景中的物体,第二个按钮用来进行平移变换,第三个按钮用来进行旋转变换等。

    (2)Hierarchy window

    顾名思义,这个部分显示的是“层次结构”,场景中的对象都会被列到这个窗口中。当我们新建一个Unity项目时,Unity就会自动为我们添加两个东西:Main Camera和Directional Light,一个是相机,一个是光照。Hierarchy window上面有一个create按钮,点击这个按钮,我们可以看到一个包含了空对象、2d,3d对象、UI、光照、相机等在内的菜单,在这里你可以点击你想创建的东西。

    (3)Scene view

    这是游戏的场景,我们可以通过调整右上角的坐标系图案来调整观察场景的位置。

    (4)Inspector window

    当我们选中一个对象,打开Inspector window,这个对象的信息,例如所在的位置,平移了多少等等都会在这个窗口显示,当然也可以用这个窗口来调整场景中的对象,例如为了编辑方便,一开始我们会使用transform中的reset,将对象放置在坐标原点(0,0,0)。Inspector window最下面有一个Add Component按钮,通过这个按钮可以给对象增加其它的component,例如添加一条C#脚本等。

    (5)Project window

    这个窗口显示的是这个游戏使用的资源,通常我们会在这里建立一些文件夹,例如Scenes文件夹专门保存场景,Materials文件夹专门保存材质,Scripts文件夹专门保存脚本等。Project window上有一个不起眼的create按钮,这个按钮很有用,例如我们可以点击create->folder来新建一个文件夹等等。

    事实上,这只是Unity界面一个最基本的布局,你可以自己拖动这些window或者view来将它们放置在自己喜欢的位置,也就是说,操作界面是可以个性化的。其实上面漏掉了一个很重要的view:game view,如下图所示:


    这个view的按钮就在scene view旁边,上图中我已经将它拖动到了scene view下面,这个视图显示的是我们的游戏最终呈现给用户的样子,制作好一个游戏后,可以点击Toolbar中间那个表示Play的按钮进行试玩,游戏的运行情况就显示在这个视图中。

    为了方便编辑,我们常把Scene view和Game view并列在一起,就像上图一样,这样,在用Play试玩调试的时候可以不用频繁切换视图,从而节省了时间。

    4、怎么理解游戏中的几个脚本?

    Unity会自动为每个新建的C#脚本生成void Start()和void Update()两个方法,第一个在第一帧,也就是游戏刚开始时调用,第二个在画面更新时调用(准确地说是在渲染每一帧之前被调用)。

    在这个游戏中我们会用到三个脚本:

    (1)CameraController.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CameraController : MonoBehaviour {
    	public GameObject player;
    	private Vector3 offset;
    
    	void Start () {
    		offset = transform.position - player.transform.position;
    	}
    	
    	void LateUpdate () {
    		transform.position = player.transform.position + offset;
    	}
    }
    脚本的作用是当Player移动时,让相机也随着移动。

    这里有一个问题:要达到类似的效果,为什么不直接把Main Camera设置成Player的孩子?

    (2)PlayerController.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class PlayerController : MonoBehaviour {
    	public float speed;
    	public Text countText;
    	public Text winText;
    
    	private Rigidbody rb;
    	private int count;
    
    
    	void Start()
    	{
    		rb = GetComponent<Rigidbody>();
    		count = 0;
    		SetCountText();
    		winText.text = "";
    	}
    
    	void FixedUpdate()
    	{
    		float moveHorizontal = Input.GetAxis("Horizontal");
    		float moveVertical = Input.GetAxis("Vertical");
    		Vector3 movement=new Vector3(moveHorizontal,0.0f,moveVertical);
    		rb.AddForce (movement*speed);
    	}
    
    	void OnTriggerEnter(Collider other)
    	{
    		if (other.gameObject.CompareTag ("PickUp")) 
    		{
    			other.gameObject.SetActive (false);
    			count++;
    			SetCountText();
    		}	
    	}
    
    	void SetCountText()
    	{
    		countText.text = "Count:" + count.ToString ();
    		if(count>=12)
    		{
    			winText.text="You Win!";
    		}
    	}
    }

    这个脚本被添加到了叫做Player的小球上,Start函数用来做初始化,其中的getComponent用来获取刚体对象,也就是添加到叫做Player的小球上的那个RigidBody。为什么用FixedUpdate()不用Update()?因为FixedUpdate在做物理计算之前被调用,这个游戏中的碰撞属于physics的范畴,所以用FixedUpdate()。还有一个要注意的函数是OnTriggerEnter(),这个函数在对象碰到collider的时候会被触发,在这个例子中,我们给12个Pickup关联上了一个叫“PickUp”的Tag,当碰撞发生时如果发现Tag是PickUp,就deactivate这个PickUp(每个PickUp的is trigger需要勾选上)。教学视频中提到一个问题:除了要给PickUp的collider勾选is trigger,还要加上rigidbody(is kinematic),这是因为Unity计算所有collider的体积后把它们放在一个cache里,如果collier是静态的(static),这样做可以避免在每帧更新的时候重复计算,但是在我们这个游戏中,因为每次collider都在旋转,所以每次它的体积都会被重复计算,为了节省资源,可以把collider设置成动态的(dynamic=collider+rigidbody)。

    (3)Rotater.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Rotator : MonoBehaviour {
    
    	
    	// Update is called once per frame
    	void Update () {
    		transform.Rotate (new Vector3(15,30,45)*Time.deltaTime);
    	}
    }
    这里要用的是Update而不是FixedUpdate(和物理无关)。

    5、其他

    (1)prefab

    类似模板一样,可以将需要复用某个逻辑的一堆对象放到prefab文件夹中,这就可以对整体进行编辑、修改了。

    (2)快捷键

    例如ctrl+D用来duplicate

    (3)有不懂的查文档!!!

    展开全文
  • 深入浅出Unity3D——第一篇

    万人学习 2019-07-01 10:35:43
    Unity3D基础知识、游戏算法一网打尽。
  • C# For Unity系列之入门篇

    万人学习 2020-07-13 14:36:00
    学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806 ...
  • Unity3D基本入门及功能介绍

    万次阅读 多人点赞 2017-06-10 22:44:17
    本章主要是 Unity3D 的基础快速入门篇,通过本章的学习,能让初学者们快速的掌握和 应用 Unity3D 软件。 本章导读 本章无论对于 Unity3D 初学者、或是以前从事建模工作的设计师、又或者是从事过 3D 编程的人群,...

    本章主要是 Unity3D 的基础快速入门篇,通过本章的学习,能让初学者们快速的掌握和
    应用 Unity3D 软件。
    本章导读
    本章无论对于 Unity3D 初学者、或是以前从事建模工作的设计师、又或者是从事过 3D
    编程的人群,在转向 Unity3D 的学习的时候,学习本章内容都极有必要的。通过本章节内容
    的学习,你可以迅速的掌握 Unity3D 的软件结构,各个板块具体的功能和作用以及场景制作
    流程等等。本章节可以说是全书的根基,只要你能把本章节的内容掌握熟悉,那在今后的日
    子里面开发任何的游戏可以说是事半功倍。这就像运动员们在小的时候打好了坚实的基础,
    再向今后的专业突破的时候,就感觉游刃有余,几乎不费吹灰之力就拿下任何一个项目。
    对于有一定 Unity3D 基础的人群而言,笔者也强力建议在有充足时间的情况下,耐心的
    阅读下本章节的内容。因为笔者时常在网上发现一些 Unity3D 早期的开发者,往往对一些 U
    nity3D 很基础性的功能莫不着头脑。这不能怨这些开发者的水品不够,而是有许多 Unity3D
    的功能在长期未被使用的情况下,被他们遗忘了,突然有一天需要使用的时候,就抓了狂,
    发了疯。
    另外笔者要在这里提醒一下建模设计师,可能你们在原先的行业里面已经将 3DS MA
    X、Maya 等建模软件摸索得相当熟练了,但游戏场景和影视场景还是存在很大的差异。首
    先最大的差异就在于灯效的实时性,游戏讲究的是动态灯光,追求与游戏者视觉互动;而影
    视灯光则是一种静态的逐帧灯光,所有效果都被渲染成一张张静态的连续图片,它们主要倾
    向与影迷们的观赏互动;前者比较主动,而后者相对来说比较被动。前者在使用灯效处理的
    时候受硬件的局限性大,面对的客户群体需要有所区分;后者在观赏灯效处理的时候,几乎
    不受任何计算机硬件的影响,面对的客户群体也比较广泛。

    1.1 界面入门


    如图 1-1 所示为 Unity3D 最经典 2 by 3 结构界面,上面呈现了 Unity3D 最为常用的几
    个面板,下面为各个面板的详细说明。
      Scene【场景面板】:该面板为 Unity3D 的编辑面板;你可以将你所有的模型、灯光、
    以及其他材质对象拖放到该场景中。构建游戏中所能呈现景象。
      Game【游戏面板】:与场景面板不同,该面板是用来渲染场景面板中景象的。该面
    板不能用作编辑,但却可以呈现完整的动画效果。
      Hierarchy【层次清单栏】:该面板栏主要功能是显示放在场景面板中所有的物体对
    象。
      Project【项目文件栏】:该面板栏主要功能是显示该项目文件中的所有资源列表。
    除了模型、材质、字体等,还包括该项目的各个场景文件。
      Inspector【监视面板】:该面板栏会呈现出任何对象的所固有的属性,包括三维坐
    标、旋转量、缩放大小、脚本的变量和对象等等。
      【场景调整工具】:可改变你在编辑过程中的场景视角、物体世界坐标和本地坐标
    的更换、物体法线中心的位子,以及物体在场景中的坐标位置,缩放大小等等。
      【播放、暂停、逐帧按钮】:用于运行游戏,暂停游戏和逐帧调试程序。
      【层级显示按钮】:勾选或取消该下拉框中对应层的名字,就能决定该层中所有物
    体是否在场景面板中被显示。
      【版面布局按钮】:调整该下拉框中的选项,即可改变编辑面板的布局。
      【菜单栏】:和其他软件一样,包含了软件几乎所有要用到的工具下拉菜单。
    除了 Unity3D 初始化的这些面板而外,你还可以通过“Add Tab”按钮和菜单栏中的“W
    indow”下拉菜单中,增添其他面板和删减现有面板。特别是“Window”下拉菜单中的“Li
    ghtmapping”和“Occllusion Culling”面板对游戏的后期优化尤为管用。除此而外还有用
    于制作动画文件的 Animation【动画面板】,用于观测性能指数的 profiler【分析器面板】,
    用于购买产品和发布产品的 Asset Store【资源商店】,用于控制项目版本的 Asset Server
    【资源服务器】,用于观测和调试错误的 Console【控制台面板】。
    在【菜单栏】中包含有八个菜单选项:分别是 File【文件】、Edit【编辑】、Assets【资
    源】、GameObject【游戏对象】、Component【组件】、Terrain【地形】、Window【窗口】、He
    lp【帮助】。这些是 Unity3D 中最标准的菜单选项卡,其各自又有自己的子菜单,表 1-1 中
    列出了各个菜单栏以及它们所包含的下拉菜单及其译名,仅供读者参考。

    主菜单  包含的子菜单

    File【文件】

    New Scene【新建场景】
    Open Scene【打开场景】
    Save Scene 【保存场景】
    Save Scene as…【场景另存为…】
    New Project… 【新建工程文件】
    Open Project… 【打开工程文件】
    Save Project 【保存工程文件】
    Build Settings… 【创建设置】(这里可以设置你的游戏将要以
    何种方式发布,发布的场景文件又包含那些)
    Build & Run 【创建并运行】(这里以“Build Settings”里设
    置好的方式,发布并运行游戏)
    Exit 【退出】

    Edit【编辑】

    Undo 【撤销上一步操作】
    Redo 【恢复被撤销的操作】
    Cut 【剪切】
    Copy 【拷贝】
    Paste 【粘贴】
    Duplicate 【复制】
    Delete 【删除】
    Frame Selected 【在编辑场景中最大化显示被选中的物体】
    Select All 【全选编辑面板中的所有物体】
    Preferences… 【首选参数设置】
    Play 【播放】(如果游戏已经开始播放,点此按钮代表停止播
    放)
    Pause 【暂停】
    Step 【逐帧播放游戏】
    Load selection 【载入所选】(与“Save selection”【存储所选】
    联合使用,你可以把它理解为一个临时的快捷键,帮你快速的
    找到特定的以被存储的物体对象。)
    Save selection 【存储所选】(与“Load selection”【载入所选】
    联合使用,你可以把它理解为一个临时的快捷键,帮你快速的
    找到特定的以被存储的物体对象。)
    Project Settings 【工程文件设置】(包含了该工程项目的“Inp
    ut”【热键】、“Tags”【标签管理】、“Audio”【音频设置】、“Ti
    me”【时间设置】、“Player”【播放器设置】、“Physics”【默认仿
    真物理设置】、“Quality”【播放质量参数设置】、“NetWork”【网
    络工作参数设置】、“Editor”【编辑器设置】)“Script Execution
    Order”【脚本编译顺序设置】
    Render settings 【渲染设置】(默认渲染参数设置,包括环境光,
    周围的雾化程度,环境颜色等等一系列参数的设定)
    Network emulation 【网络仿真】(由于你制作的游戏将会在不
    同的网络环境中工作,所以需要这个参数来模拟不同的网络工
    作环境)
    Graphics emulation 【图形卡仿真】(由于你制作的游戏将会在
    不同的图形卡环境中工作,所以将需要这个参数来模拟不同硬
    件条件下的游戏显示质量)
    Snap settings 【捕捉设置】(和 3Ds Max 的“栅格和捕捉设置”
    类似。)

    Assets 【资源】

    Create 【创建】(包含有“Folder”【文件夹】、“JavaScript”【Ja
    vaScript 编程脚本】、“C# Script”【C#编程脚本】、“Boo Script”
    【Boo 编程脚本】、“Shader”【着色语言】、“Prefab”【预置物体】、
    “Material”【材质】、“Animation”【动画】、“Cubemap”【立方
    体贴图】、“Lens Flare”【镜头光晕】、“Custom Font”【自定义
    字体】、“Render Texture”【渲染纹理】、“Physic Material”【物
    理材质】、“GUI Skin”【用户图形界面皮肤】)
    Show in Explor 【显示项目资源所在的文件夹】
    Open【打开选中的资源】
    Delete【删除选定资源】
    Import New Asset... 【导入新的资源】
    Import Package...【导入资源包】
    Export Package... 【导出资源包】
    Select Dependencies 【选择相关联的文件】
    Export compressed audio file... 【导出压缩的音频文件】
    Refresh 【刷新】
    Reimport 【重新导入选中的资源】
    Reimport All 【重新导入所有的资源文件】
    Sync MonoDevelop Project 【与 Mono 项目文件同步】

    GameObject【游戏项目】

    Create Empty【创建空的游戏对象】
    Create Other 【创建其他组件】(包含了“Particle System”【粒
    子系统】、“Camera”【摄像机】、“GUI Text”【图形用户界面文
    本】、“GUI Texture”【图形用户界面图片】、“3D Text”【3D 文
    字】、“Directional Light”【平行光】、“Point Light”【点光源】、
    “Spotlight”【聚光灯】、“Cube”【立方体】、“Sphere”【球】、“C
    apsule”【胶囊】、“Cylinder”【圆筒】、“Plane”【平面】、“cloth”
    【布料】、“Audio Reverb Zone”【声音回响区域】、“Ragdoll..”
    【布娃娃系统】、“Tree”【植被树系统】、“Wind Zone”【风的区
    域】)
    Center On Children 【归位到子物体中心点】
    Make Parent 【创建父集】(必须选择两个以上的物体才能使用
    该命令,最先被选中的物体为父级对象,其余的对象都为该对
    象的子集)
    Clear Parent 【取消父集】(取消被选中物体与它上一个父级之
    间的父子级关系)
    Apply Changes To Prefab 【改变影响预制物体】(如果你在场
    景中编辑的物体是从资源面板拖拽出的预制物体,默认的情况
    下,你在场景面板中对物体做出的改变不会影响原先的预制物
    体,除非你点击该按钮)
    Move To View 【移动物体到“Scene”视窗的中心点】
    Align With View 【移动物体到“Scene”视窗的中心点,并且
    与显示口正对齐,物体中心位于显示口的中心点】
    Align View to Selected 【移动“Scene”视窗与物体对齐,并
    且显示口的中心点位于物体的中心】

    Component【组件】

    Mesh 【网格】(“Mesh Filter”【网格填充】、“Text Mesh”【文
    字网格】、“Mesh Renderer”【网格渲染】、“Combine Children”
    【合并子物体】)
    Particles 【粒子系统】(能打造出非常棒的流体效果,是制作烟
    雾、激光、火焰等效果的首选。“Ellipsoid Particle Emitter”【
    椭球粒子发射器 】,“Mesh Particle Emitter”【面片粒子发射器】,
    “Particle Animator” 【粒子动画】, “World Particle Collider” 【世
    界粒子碰撞机】,“Particle Renderer”【粒子渲染器】,“Trail Re
    nderer”【蔓延渲染】)
    Physics 【物理系统】(可使物体带有对应的物理属性)
    Audio 【音频】(可创建声音源和声音的听者)
    Rendering 【渲染】
    Miscellaneous 【杂项】
    Scripts 【脚本】(Unity 内置的一些功能很强大的脚本)
    Image Effects【图形渲染效果】(仅限专业版)
    Character【角色控制器】
    Camera-Control 【摄像机控制】

    Terrain【地形】 

     Create Terrain 【创建地形】
    Import Heightmap - Raw... 【导入高度图】
    Export Heightmap - Raw... 【导出高度图】
    Set Resolution... 【设置分辨率】
    Create Lightmap... 【创建光影图】
    Mass Place Trees... 【批量种植树】
    Flatten Heightmap... 【展平高度图】
    Refresh Tree and Detail Prototypes 【刷新树及细节模型】

    Window【窗口】

    Next Window 【下个窗口】
    Previous Window 【前一个窗口】
    Layouts 【布局】
    Scene 【场景窗口】
    Game 【游戏窗口】
    Inspector 【监视窗口】(这里主要指各个对象的属性)
    Hierarchy 【层次窗口】
    Project 【项目文件窗口】
    Animation 【动画窗口】(用于创建时间动画的面板)
    Profiler 【性能探测窗口】
    Asset Store 【资源商店】
    Asset Server 【源服务器】
    Lightmapping 【灯影视图窗口】
    Occlusion Culling 【遮挡剔除窗口】
    Console 【控制台】

    Help【帮助】

    About Unity... 【关于 Unity】
    Enter serial number... 【输入序列号】
    Unity Manual 【Unity 手册】
    Reference Manual 【参考手册】
    Scripting Manual 【脚本手册】
    What’s New 【最新功能】
    Unity Forum 【Unity 论坛】
    Unity Answers 【Unity 在线答疑】
    Unity Feedback 【Unity 使用信息反馈】
    Welcome Screen 【欢迎窗口】
    Check for Updates 【查看升级】
    Release Notes 【发行说明】
    Report a bug【软件缺陷反馈】

    展开全文
  • Unity3d特效粒子 多彩烟花特效包 Flare Volume 1. Unity3d
  • Unity 烟花特效

    2020-07-29 14:20:07
    Unity3D的粒子效果系列,各类丰富的插件,丰富的粒子效果,非常绚丽的特效
  • Unity3d2D特效 多彩烟花特效包 内包含20种多彩烟花特效
  • 3D烟花粒子,好用不好用,谁用谁知道
  • Unity 使用 Spine 动画

    万次阅读 2019-07-27 13:13:19
    Unity 中,常常使用 Spine 来制作一些动画,引擎本身并不能直接播放 Spine 动画,需要额外导入一个 RunTime 插件库才能支持。 运行库导入 关于运行库的导入,有两种方式: 1. 从开源库导入 下载 Spine 的 ...

    在 Unity 中,常常使用 Spine 来制作一些动画,引擎本身并不能直接播放 Spine 动画,需要额外导入一个 RunTime 插件库才能支持。

     

    运行库导入

    关于运行库的导入,有两种方式:

    1. 从开源库导入

    下载 Spine 的 runtime 库:EsotericSoftware/spine-runtimes ,只需要将其中的 spine-csharpspine-unity 两个部分导入到 Unity 中即可。

    2. 从官网插件导入

    当然,也可以到 Spine 官网关于 Unity 插件的下载地址spine-unity-download 直接下载最新的插件包,例如:Spine-Unity 3.6 runtime unitypackage ,然后直接导入工程中。

    第二种方式是比较常用而且方便的,因为在导入插件核心库的同时,还是导入一些 demo 例子,帮助我们快速上手使用插件的 API ,因此这里我也选择使用第二种方式导入插件。建议新建一个空工程来导入相关 demo 了解插件的使用,而正式工程只导入 spine-csharpspine-unity 两个部分即可。

     

    插件导入步骤

    • 在 Unity 菜单中依次点击:Assets->Improt Package->Custom Package

    • 选中 Spine-Unity 3.6 runtime unitypackage 并导入,去掉 Spine Examples 的勾选(假如需要查看 demo 则点击 All );

    • 点击 Import 完成导入,导入完成后在工程 Assets 下会多出一个 Spine 目录,表示导入成功。

     

    Spine 资源导入步骤

    通常制作好的 Spine 动画导出时会有三个文件: .png.json.atlas

    • 在导入 Unity 之前需要将 .atlas 后缀的文件改为 .atlas.txt 后缀(不修改可能会有问题);

    • 将三个文件拖到 Unity 的 Project 面板中,假如运行库导入正常,此时会生成三个新的文件:_Atlas_Material_SkeletinData ,并且在 Console 面板中会打印导入成功的日志:

      三个文件的作用:

      • _Material资源包含一个着色器引用和.png纹理。

      • _Atlas资源包含一个材质引用和.atlas.txt

      • _SkeletonData资源包含一个json引用和_Atlas资源。

     

    在 UGUI 中使用 Spine

    Hierarchy 面板中,右键 Spine->SkeletonGraphic(UnityUI)

    然后将 Spine 资源导入时生成的 _SkeletinData 文件拖到动画 UI 对象的 Skeleton Data Asset 属性中,且可以编辑相应的动画控制属性:

    勾选 Starting Loop 然后运行场景即可看到当前 Starting Animation 所选中动画的效果,并能动态切换其他动画。

     

    程序控制

    很多时候,动画需要通过程序控制实现动态创建、切换和销毁,主要会用到几个组件:SkeletonAnimationSkeletonGraphicSkeletonRenderer

    • SkeletonAnimation 动画基本控制组件:

      skeletonAnimation.timeScale = 1.5f;
      skeletonAnimation.loop = true;
      skeletonAnimation.AnimationName = "run";

      这里用于设置动画的播放速度,是否循环,还有切换动画,如下脚本,将其挂在带 SkeletonAnimation 或继承自 SkeletonAnimation 的组件的物体上,用于播放一次动画:

      using UnityEngine;
      ​
      public class TestSpineAnimCtl : MonoBehaviour {
          public SkeletonAnimation sa;
      ​
          // Use this for initialization
          void Start () {
              sa = sa ?? gameObject.GetComponent<SkeletonAnimation>();
              PlayAnim("run2");
          }
      ​
          public void PlayAnim(string animName) {
              sa.state.SetAnimation(0, animName, false);
          }
      }

      通过获取其 state 属性,其实是 Spine.AnimationState 对象。

    • SkeletonGraphic 用于 Unity 的 UI 中:

      using UnityEngine;
      ​
      public class TestSpineAnimCtl : MonoBehaviour {
          public SkeletonGraphic sgp;
      ​
          // Use this for initialization
          void Start () {
              sgp = sgp ?? gameObject.GetComponent<SkeletonGraphic>();
              PlayAnim("run2");
          }
      ​
          public void PlayAnim(string animName) {
              sgp.AnimationState.SetAnimation(0, animName, false);
          }
      }

      通过其 AnimationState 组件来控制动画,其实也是获取一个 Spine.AnimationState 对象。

    • SkeletonRenderer 还没用到,暂不记录。

    • Spine.AnimationState 主要需要了解其事件和回调:Spine事件 & AnimationState回调

       

    效率优化

    上面提到从 Spine 导出的文件有三种:.png.json.atlas ,但使用 .json 格式读取动画数据是比较慢且运行效率较低的方式。Spine 新版本其实还支持更快的数据导出方式,即 Binary format ,那就是二进制的数据导出,采用这种方式导出的格式是:.png.skel.atlas

    导入前需要将 .skel 后缀改成 .skel.bytes ,将 .atlas 后缀改成 .atlas.txt ,然后再拖入 Unity 中,不然 .skel 文件不会对应生成 Unity 可识别的 .asset 格式的数据文件。

     

    插件自带材质

    由于打包的时候资源需要打包成 Assetbundle ,有几个插件自带的材质球需要注意一下的:

    • spine-unity\Modules\SkeletonGraphic\Shaders 中的 SkeletonGraphicDefault.matSkeletonGraphicTintBlack.mat

    • spine-unity\Shaders\Utility 中也有 HiddenPass.mat

    • spine-unity\Modules\SlotBlendModes 中有 SkeletonPMAMultiply.matSkeletonPMAScreen.mat

    需要动态加载这些材质球的话,需要将这些材质球与其他材质球资源一起打包,否则在手机包会出现材质球丢失。

     

    手机包贴图丢失问题

    当然,除了材质丢失,还有可能出现贴图丢失的问题,情况如下:

    只有几个白色的方块,而正常的应该如下:

    1. 问题分析

    现在这就是贴图丢失了,看了 《unity 在代码中创建spine动画组件》 才发现项目中用到了spine 动画,使用 Assetbundle 打包后,在手机上运行会出现丢材质的情况。如果不进行打包,直接放到 Resources 目录下是可以正常加载的,但是,这样包就会很大,而且也不能进行热更新。进过测试,发现在代码中创建 spine 组件是可以解决这个问题。

    其实,最根本的问题是 :xxx_Altas.assetxxx_SkeletonData.asset 这两个资源打包到 Assetbundle 之后就取不出来了(偶尔能取出),从而导致了 SkeletonGraphicskeletonDataAsset 属性值变为 null 。

    所以,要解决此问题可以干脆用代码动态创建两个对象替换这两个文件的作用即可:

        // 动态创建一个 spine 动画数据
        public static SkeletonDataAsset BuildSkeletonDataAsset(string skeletonPath, GameObject go) {
            SkeletonDataAsset sda;
            sda = ScriptableObject.CreateInstance<SkeletonDataAsset>();
            sda.fromAnimation = new string[0];
            sda.toAnimation = new string[0];
            sda.duration = new float[0];
            sda.scale = 0.01f;
            sda.defaultMix = 0.2f;
            AtlasAsset[] arrAtlasData = new AtlasAsset[1];
            for (int i = 0; i < arrAtlasData.Length; i++) {
                AtlasAsset atlasdata = ScriptableObject.CreateInstance<AtlasAsset>();
                atlasdata.atlasFile = ResourceManager.Instance.LoadAsset(skeletonPath + ".atlas.txt", typeof(TextAsset), go) as TextAsset;
                atlasdata.materials = new Material[1];
                atlasdata.materials[0] = ResourceManager.Instance.LoadAsset(skeletonPath + "_Material.mat", typeof(Material), go) as Material;
                arrAtlasData[i] = atlasdata;
            }
            sda.atlasAssets = arrAtlasData;
            sda.skeletonJSON = ResourceManager.Instance.LoadAsset(skeletonPath + ".skel.bytes", typeof(TextAsset), go) as TextAsset;
            return sda;
        }

    步骤其实很简单,用代码动态创建一个 SkeletonDataAsset 对象,然后赋值给 SkeletonGraphic 中的 skeletonDataAsset 再调整相应的动画参数即可:

    using Spine.Unity;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    /// <summary>
    /// 用于解决 Spine 动画在手机 ab 包资源管理模式下贴图丢失问题
    /// </summary>
    public class SkeletonGraphicABReseter : MonoBehaviour {
        private SkeletonGraphic skg;
        public string spinePath = "";
        public string animName = "";
        public bool loop = false;
        public float timeScale = 1.0f;
    ​
        // Use this for initialization
        void Start () {
    #if UNITY_EDITOR
    ​
    #else
            skg = gameObject.GetComponent<SkeletonGraphic>();
            if(skg == null) {
                return;
            }
            ResetSkData();
    #endif
        }
    ​
        void ResetSkData() {
            if(skg.SkeletonDataAsset == null && spinePath.Length > 0) {
                Debugger.Log("------------ 重置动画");
                SkeletonDataAsset sda = Utils.BuildSkeletonDataAsset(spinePath, gameObject);
    ​
                skg.skeletonDataAsset = sda;
                // 重置动画
                skg.Initialize(true);
                skg.AnimationState.SetAnimation(0, animName, loop);
                skg.AnimationState.TimeScale = timeScale;
            }
        }
    }

    在使用 SkeletonGraphic 的地方挂上此组件即可解决移动端材质丢失的问题。

     

    参考

    展开全文
  • using UnityEngine; using System.Collections; using System.Collections.Generic; [System.Serializable] ...public class BarrackGroupInfo { ...public BarrackGroupType barrackGroupType;...public List barrack

    只需要在 申明的数组类中 添加  [System.Serializable] 即可


    如下:


    using UnityEngine;

    using System.Collections;

    [System.Serializable]


    public class Student{
    public string name;


    }

    展开全文
  • Unity技巧】Unity中的优化技术

    万次阅读 多人点赞 2014-12-26 22:12:00
    除此之外,还参考了Unity Cookie中的一个教程。这篇文章旨在简要地说明一下常见的各种优化策略。不过对每个基础有非常深入地讲解,需要的童鞋可以自行去相关资料。影响性能的因素首先,我们得了解,影响游戏性能的...
  • Unity中的几种坐标系

    千次阅读 2018-06-13 18:52:04
        在不同的情况下使用不同的坐标系更加方便,所以在Unity中有多种坐标系: 全局坐标系 World Coordinate System 局部坐标系 Local Coordinate System 屏幕坐标系 Screen Space 视口坐标系 ViewPort Space ...
  • Unity 3D - Unity中文手册( 圣典 )

    万次阅读 2017-03-22 14:45:17
    Unity圣典
  • UnityHub使用方法教程和简介

    万次阅读 2018-10-16 23:51:15
    UnityHub简介 Unity Hub是最新推出的用于简化工作流程的桌面端应用程序。它提供了一个用于管理Unity项目、简化下载、查找,卸载以及安装管理多个Unity版本的工具。   Unity Hub v1.1的主要功能: Unity编辑器...
  • Unity 所有版本下载地址

    万次阅读 2018-05-02 11:06:26
    unity 官网所有版本下载地址: http://unity3d.com/get-unity/download/archive
  • 基于Unity的游戏开发(下)

    万人学习 2020-02-26 11:51:26
    本课程是Unity游戏开发的入门课程,课程分为上、下两个部分。下部分主要介绍JavaScript脚本程序开发、动画、粒子、网络和GUI系统
  • Unity3D开发 - 生成unitypackage包

    万次阅读 2015-06-03 11:07:09
    打包unitypackage文件
  • unityhub下载地址

    万次阅读 2019-07-01 10:12:58
    https://store.unity.com/cn/download?ref=personal
  • Unity——退出程序代码

    万次阅读 2017-06-06 21:49:04
    在退出按钮的点击事件中添加以下代码: Application.Quit(); 即可实现退出程序的功能。
1 2 3 4 5 ... 20
收藏数 247,130
精华内容 98,852
关键字:

unity