unity_unitytext - 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入门:第一个游戏

    万次阅读 多人点赞 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)有不懂的查文档!!!

    展开全文
  • 基于Unity的游戏开发(上)

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

    万人学习 2019-07-01 10:35:43
    Unity3D基础知识、游戏算法一网打尽。
  • 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【软件缺陷反馈】

    展开全文
  • C# For Unity系列之入门篇

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

    千次阅读 2016-11-30 21:49:11
    2、使用的Unity版本为Unity5.3.3 二、制作方法 1、C#部分的代码如下: using UnityEngine; using System.Collections; [ExecuteInEditMode] public class CamRendImage : MonoBehaviour { [SerializeField] ...

    一、前言

    1、效果图如图所示:
    2、使用的Unity版本为Unity5.3.3
    、制作方法
    1、C#部分的代码如下:
    using UnityEngine;
    using System.Collections;
    
    [ExecuteInEditMode]
    public class CamRendImage : MonoBehaviour {
    
    	[SerializeField]
    	private Material m_mat;
    
    	// Use this for initialization
    	void Start () {	
    	}
    	
    	// Update is called once per frame
    	void Update () {
    
    	}
    	void OnRenderImage(RenderTexture src,RenderTexture dest)
    	{
    		Graphics.Blit (src,dest,m_mat);
    	}
    	void OnMouseDown()
    	{
    		
    	}
    	void OnMouseUp()
    	{
    		
    	}
    }
    
    2、Shader代码如下:
    Shader "Unlit/Flame"
    {
    	Properties{
    		
        }
    
        CGINCLUDE    
        #include "UnityCG.cginc"   
        #pragma target 3.0      
    
        #define vec2 float2
        #define vec3 float3
        #define vec4 float4
        #define mat2 float2x2
        #define mat3 float3x3
        #define mat4 float4x4
        #define iGlobalTime _Time.y
        #define mod fmod
        #define mix lerp
        #define fract frac
        #define texture2D tex2D
        #define iResolution _ScreenParams
        #define gl_FragCoord ((_iParam.scrPos.xy/_iParam.scrPos.w) * _ScreenParams.xy)
    
        #define PI2 6.28318530718
        #define pi 3.14159265358979
        #define halfpi (pi * 0.5)
        #define oneoverpi (1.0 / pi)
    
        vec4 main(in vec2 fragCoord );
    
        struct v2f {    
            float4 pos : SV_POSITION;    
            float4 scrPos : TEXCOORD0;   
        };              
    
        v2f vert(appdata_base v) {  
            v2f o;
            o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
            o.scrPos = ComputeScreenPos(o.pos);
            return o;
        }  
    
        fixed4 frag(v2f _iParam) : COLOR0 { 
            vec2 fragCoord = gl_FragCoord;
            return main(gl_FragCoord);
        }  
    
        float noise(vec3 p) //Thx to Las^Mercury
    {
    	vec3 i = floor(p);
    	vec4 a = dot(i, vec3(1., 57., 21.)) + vec4(0., 57., 21., 78.);
    	vec3 f = cos((p-i)*acos(-1.))*(-.5)+.5;
    	a = mix(sin(cos(a)*a),sin(cos(1.+a)*(1.+a)), f.x);
    	a.xy = mix(a.xz, a.yw, f.y);
    	return mix(a.x, a.y, f.z);
    }
    
    float sphere(vec3 p, vec4 spr)
    {
    	return length(spr.xyz-p) - spr.w;
    }
    
    float flame(vec3 p)
    {
    	float d = sphere(p*vec3(1.,.5,1.), vec4(.0,-1.,.0,1.));
    	return d + (noise(p+vec3(.0,iGlobalTime*2.,.0)) + noise(p*3.)*.5)*.25*(p.y) ;
    }
    
    float scene(vec3 p)
    {
    	return min(100.-length(p) , abs(flame(p)) );
    }
    
    vec4 raymarch(vec3 org, vec3 dir)
    {
    	float d = 0.0, glow = 0.0, eps = 0.02;
    	vec3  p = org;
    	bool glowed = false;
    	
    	for(int i=0; i<64; i++)
    	{
    		d = scene(p) + eps;
    		p += d * dir;
    		if( d>eps )
    		{
    			if(flame(p) < .0)
    				glowed=true;
    			if(glowed)
           			glow = float(i)/64.;
    		}
    	}
    	return vec4(p,glow);
    }
    
    vec4 main(in vec2 fragCoord )
    {
    	vec4 fragColor;
    	vec2 v = -1.0 + 2.0 * fragCoord.xy / iResolution.xy;
    	v.x *= iResolution.x/iResolution.y;
    	
    	vec3 org = vec3(0., -2., 4.);
    	vec3 dir = normalize(vec3(v.x*1.6, -v.y, -1.5));
    	
    	vec4 p = raymarch(org, dir);
    	float glow = p.w;
    	
    	vec4 col = mix(vec4(1.0,0.5,0.1,1.0), vec4(0.1,0.5,1.0,1.0), p.y*0.02+0.4);
    	
    	fragColor = mix(vec4(0,0,0,0), col, pow(glow*2.,4.));
    	//fragColor = mix(vec4(1.), mix(vec4(1.,.5,.1,1.),vec4(0.1,.5,1.,1.),p.y*.02+.4), pow(glow*2.,4.));
    	return fragColor;
    }
    
        ENDCG    
    
        SubShader {    
            Pass {    
                CGPROGRAM    
    
                #pragma vertex vert    
                #pragma fragment frag    
                #pragma fragmentoption ARB_precision_hint_fastest 
    
    
                ENDCG    
    
            }    
        }     
        FallBack Off    
    }
    
    将1中的C#脚本赋给主摄像机,然后将附有2中的Shader的材质赋值给C#脚本中的“m_mat”变量。


    展开全文
  • 如果您对Shader Forge的常用操作还不熟悉,请先看 Unity3D Shader Forge 入门学习(一)。刚开始学习时,可以先不用固执的探究为什么节点要这么连接,可以先以效果为目的,然后再慢慢地优化连接方式,熟悉节点作用。 ...

    引言:本篇博客主要记录ShaderForge的常用案例,包括外发光、火焰燃烧、溶解、扭曲等效果。由于内容较多会分成几篇博客记录。如果您对Shader Forge的常用操作还不熟悉,请先看 Unity3D Shader Forge 入门学习(一)。刚开始学习时,可以先不用固执的探究为什么节点要这么连接,可以先以效果为目的,然后再慢慢地优化连接方式,熟悉节点作用。

    开发版本:Unity 2017.1.1f1

    适合人群:了解ShaderForge常用操作

    目录:

    节点作用查看方式:
    右键点击“What does Texture 2D do?”
    常用节点
    随即打开官方的Shader Forge节点介绍网址

    外发光及光晕效果

    简介:使用Fresnel节点实现外发光效果,通过Post processing Stack后处理插件,实现光晕效果
    注意:Fresnel外发光效果适合较为圆润的对象,而Cube这种棱角分明的对象不适合
    Post processing Stack是官方免费插件,可以在Assets Store上下载,适合PC端,不适合移动端,需要适配移动端可以使用 Moblie Post processing插件。
    效果如下:

    Inspector面板显示如下:
    面板显示
    节点连接情况如下图所示:
    节点连接

    在资源商店上下载Post processing Stack,并导入Unity中
    创建Post-Processing Profile:
    创建Post-Processing Profile

    勾选Bloom选项,可以使得场景中对象的HDR值超过Threshold值
    勾选Bloom选项

    在主摄像机上挂载Post Processing Behaviour脚本,将刚才创建的Post-Processing Profile,挂载在Profile上。
    挂载Post Processing Behaviour脚本

    **P.S.**如果Scene场景中没有显示出光晕效果,需要勾选Image Effects。
    这里写图片描述

    火焰效果

    使用 UV Coordinates节点实现纹理的运动效果,结合Distance节点实现遮罩效果,在使用Step和Subtract节点实现火焰边缘的效果。最后还是通过post processing stack插件实现光晕效果,如下所示:
    火焰效果
    Inspector面板显示如下:
    面板显示
    使用纹理如下,建议使用纹理稍微连贯一点的,不会有明显的分界边缘
    纹理
    节点连接情况如下所示:
    节点连接

    溶解效果

    效果演示:
    效果演示
    Inspector面板显示:
    面板显示
    使用的渐变贴图如下:
    渐变贴图
    节点连接情况:
    节点连接
    可以通过脚本动态控制对象溶解效果

    public class DissolutionCtr : MonoBehaviour
    {
        public float smooth = 0.2f;
    
        private MeshRenderer meshRenderer;
        private float intensity;
        private bool forward = true;
    
        private void Start()
        {
            meshRenderer = gameObject.GetComponent<MeshRenderer>();
        }
    
        private void Update()
        {
            if (forward)
            {
                intensity += Time.deltaTime * smooth;
                if (intensity > 1.0f)
                    forward = false;
            }
            else
            {
                intensity -= Time.deltaTime * smooth;
                if (intensity < 0)
                    forward = true;
            }
            //SetFloat用于设置溶解的程度
            meshRenderer.material.SetFloat("_Intensity", intensity);
        }
    }
    

    扭曲效果

    主要通过折射背景像素的屏幕空间UV偏移实现扭曲画面,然后通过粒子系统实现类似发射波的效果,如下所示:
    效果演示
    Inspector面板显示:
    面板显示
    节点连接情况如下所示:
    节点连接
    粒子系统主要实现让粒子间断发射效果即可,可以参照如下设置:
    粒子设置
    因为使用了Vertex Color节点的Alpha通道,通过修改Color over Lifetime的透明度,可以实现发射波渐隐渐现的效果,如下所示:
    透明度
    Size over Lifetime的动画曲线如下所示,随着时间逐渐变大。需要注意Renderer一栏中的Render Mode需要修改为Horizontal Billboard,才可以让粒子贴着水平表面发射。
    大小设置

    展开全文
  • unity 火焰特效

    2020-07-22 23:34:36
    unity3d 火焰特效
  • UnityShader实例09:Stencil Buffer&Stencil Test

    万次阅读 多人点赞 2015-07-22 09:51:45
    在开始前先吐槽下unity的官方文档,说实话关于stencil ,官方文档真的是可以不要了,除了记流水账般解释了下各个参数的作用,作为例子的shader也是让人一头雾水,整个文档看下来,你发觉stencil是用来干嘛的,怎么...
  • Unity技巧】Unity中的优化技术

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

    万次阅读 2018-07-11 09:43:47
    Unity构建美国西海岸真实地形在进行3D游戏开发的时候,尤其是战争题材或者模拟飞行类型的游戏,经常要构建真实的地形地貌。今天小编将带领大家学习几种Unity3D中常见的并且非常好用的真实地形构建方法。方法1:利用...
  • using UnityEngine; using System.Collections; using System.Collections.Generic; [System.Serializable] ...public class BarrackGroupInfo { ...public BarrackGroupType barrackGroupType;...public List barrack
  • Unity开发环境搭建

    千次阅读 2018-11-12 17:56:51
    Unity开发环境搭建序言Unity 序言 工欲善其事必先利其器,想做开发,肯定得先选号工具,我们来看下,你需要什么:Unity和Microsoft Visual Studio,怎么样?简单吧!就两样工具你就能开发了,这简单的背后,是强大的...
  • Unity Shader Graph初次尝试

    万次阅读 2020-02-24 09:56:37
    Unity Version: 2018.1.2f1 边缘发光材质效果 创建工程 打开Unity并创建一个新工程 安装依赖项 Window -> Package Manager打开包管理器,安装二个依赖包: 1. Lightweight Render Pipeline 2. Shader ...
  • 首先去官网下载对应版本的UnityHub 地址: https://unity.cn/releases 安装完UnityHub,运行会提示登录Unity账号,可以用微信登录,点击右上角的这个按钮 选择微信登录 然后用手机扫码即可 登录成功后,会提示...
  • Unity Hub许可证激活问题

    万次阅读 多人点赞 2020-02-18 12:16:45
    去官网下了个Unity2019.1.02f,然后打开的时候又要我下一个Unity Hub2.0.0,很迷,不知道这个是干嘛的,了解了一下才知道,原来这个就是个管理Unity版本的软件,也就是我们可以在自己电脑上安装多个Unity版本,然后...
  • 使用UnityHub下载任意版本Unity

    千次阅读 热门讨论 2020-10-20 09:07:01
    unityHub上只能下载官方指定的版本,很多其他版本不能下载,下面介绍的是在unityHub下载任意版本的方法 举例: 2019.2.11f1版本的unity----> unityhub://2019.2.11f1/5f859a4cfee5 格式 unityhub://version/...
  • [Unity3d]unity与html通信

    万次阅读 2019-07-26 09:54:06
    更多教程请访问: ... 谈谈今天的学习收获,发现了一个好东西,unity与html能够相互通信,意味着我之前学的web开发还能在unity中用得上,哈哈,太happy了!下面简单谈谈通过Unity3D调用HTML网页的脚本...Unity3D浏览...
  • Android与Unity交互研究

    万次阅读 多人点赞 2015-07-03 00:28:19
    unity与android交互的由来 unity简单介绍 unity与android交互介绍 unity调用android的方法 android调用untiy的方法unity与android交互的由来本人在项目开发过程中,遇到这样一个需求,把unity的场
  • Unity官网地址变更为https://unity.cn/

    万次阅读 2020-06-19 11:45:41
    注意:Unity官网地址变更为 https://unity.cn/
1 2 3 4 5 ... 20
收藏数 241,046
精华内容 96,418
关键字:

unity