2d路径 unity3d_unity3d 路径 - CSDN
精华内容
参与话题
  • Live2DUnity中的使用

    千次阅读 2019-04-23 12:00:12
    Live2D-Unity Live2D是日本Cybernoids公司开发的绘图渲染技术,在2D中能实现类似2.5D效果的人物动画,在电子游戏中可能会用得到。 前一阵子公司游戏客户端想要导入Live2D模型,将游戏里剧情人物替换,让剧情看...

    Live2D模型在Unity中的使用

    Live2D是日本Cybernoids公司开发的绘图渲染技术,在2D中能实现类似2.5D效果的人物动画,在电子游戏中可能会用得到。
    
    前一阵子公司游戏客户端想要导入Live2D模型,将游戏里剧情人物替换,让剧情看起来更加的好看,中间走了很多坑,下面我就记录下Live2D导入Unity的过程。

    先放官方链接:Live2D官网
    在官网里下载Live2D Unity SDK然后导入Unity,然后Live2D官网有几个Demo可以直接下载使用。
    直接上图嘻嘻嘻
    看完Demo之后可能会一脸蒙蔽,什么鬼东西,动来动去的怎么动的。
    作为程序员的我们可能不需要了解动画人物制作的详细过程,但是使用过UI动画编辑器之类的应该知道类似的原理,人物的动作其实就类似网格图,然后通过这些点来拉动人物的动作;动画大概就是设置一些关键点之类的差不多都那样;live2D有自己的物理系统,大概是设置一些重量,偏移值之类的。
    当美术做完Live2D模型之后,这个文件夹包括了moc3模型信息动作json文件physics文件等等;然后我们为每一个模型创建一个文件夹,把每个模型相关的motion文件放在一起,然后直接导入Unity工程目录下;unity因为提前导入了sdk,它会自动识别模型文件信息,然后自动把文件编译成unity可用的Prefab和AnimationClip。
    接下来工作就简单啦,创建Animator Controller来控制这些AnimationClip,这部分内容就自己去学习吧~
    这里有几点:
    1.最好将嘴部动画和肢体动作分开管理,animation controller增加parramator即可,然后设置

    blendingMode = AnimatorLayerBlendingMode.Override;
    

    直接看Animator长这样
    代码写好的animator,通过unity直接查看就长这样,通过AnyState?各个状态就能使用unity的动作融合啦
    2.为了动作融合,Aninator只能通过对应的transaction Index来切换状态。我是把Transation和动作名之间的关系写了个对应关系脚本存储为程序可读的数组,那样就能通过动作名直接获取链接名啦~~

    //Animator可以直接创建Controller在指定路径
    CreateAnimatorControllerAtPath
    
    3.为了更好的控制模型,在创建Prefab的时候就要添加几个Component用来控制模型的位置,动画,渲染等
    4.有时候会遇到Live2D在Scene界面有轮廓,但是没有贴图的情况,
    我直接上代码啦:
    
    	local shaderName = "Live2D Cubism/Unlit"
    	local shader = CS.UnityEngine.Shader.Find(shaderName)
    
    	local trans = self.obj.transform:Find("Drawables")
    	local renders = CS.LuaMgr.getCubismRendersInChildren(trans)
    	for i=0, renders.Length - 1 do
    		renders[i].Material.shader = shader
    	end
    

    这段是Lua代码,大概就是找到Unlit这个shader然后把它指定下就好啦,不知道新版sdk还有没有这个问题。

    再说一点Live2D比较坑的几个问题:
    1.物理效果非常容易跟项目代码进行冲突,这个自己阅读SDK找问题吧~
    2.Live2D脚本自带的控制Alpha的Component跟Unity的Animator不能兼容,两者只能同时有一个运行……是我傻逼了么,没想到别的解决方案。
    3.如果遇到经常创建销毁模型的情况,最好是创建资源池进行管理,
    并且频繁移除的时候,不要频繁的setActive,这样会导致各种未知情况的发生 。

    最后说一点动画播放结束之后的回掉函数和几个动作自动进行联合播放的问题,一般情况下可以在动画后面添加关键帧或者监听动画机的状态,最简单的方法就是计算动画的长度,然后使用计时器……

    public static float GetClipLength(Animator animator, string clip)
        {
            if (null == animator || string.IsNullOrEmpty(clip) || null == animator.runtimeAnimatorController)
                return 0;
            RuntimeAnimatorController ac = animator.runtimeAnimatorController;
            AnimationClip[] tAnimationClips = ac.animationClips;
            if (null == tAnimationClips || tAnimationClips.Length <= 0) return 0;
            AnimationClip tAnimationClip;
            for (int tCounter = 0, tLen = tAnimationClips.Length; tCounter < tLen; tCounter++)
            {
                tAnimationClip = ac.animationClips[tCounter];
                if (null != tAnimationClip && tAnimationClip.name == clip)
                    return tAnimationClip.length;
            }
            return 0F;
        }
    
    

    上边这个直接给了计算的代码~~

    别忘了最后释放内存……

    展开全文
  • Unity3d-加载Texture2D

    万次阅读 2012-04-25 11:46:59
    加载图片有几种方法 1.Resource.Load:在编辑器的Resource文件夹中放置资源,不仅仅是图片。可以是不同层次的Resource文件夹,注意没有后缀名,所以…… ...3.自己写通过类通过Texture2D.LoadImage等

    加载图片有几种方法

    1.Resource.Load:在编辑器的Resource文件夹中放置资源,不仅仅是图片。可以是不同层次的Resource文件夹,注意没有后缀名,所以……

    2.WWW类,Pro版功能,加载方法有好几种,.texture;LoadImageToTexturet;通过AssetBundle

    3.自己写通过类通过Texture2D.LoadImage等

    展开全文
  • Unity3D 渲染路径

    千次阅读 2017-06-14 18:26:28
    Unity渲染路径Unity支持不同的渲染路径。您应具体取决于你的游戏内容和目标平台/硬件来选择使用哪一个。不同的渲染路径有不同的特点和性能特点,主要影响灯光和阴影如果图形卡不能处理选定的渲染路径Unity将...

    Unity渲染路径: 

    Unity支持不同的渲染路径。您应具体取决于你的游戏内容和目标平台/硬件来选择使用哪一个。不同的渲染路径有不同的特点和性能特点,主要影响灯光和阴影

    如果图形卡不能处理选定的渲染路径,Unity将自动使用一个较低保真度的设置。因此,在GPU上不能处理延迟照明(Deferred Lighting),将使用正向渲染(Forward Rendering )。如果不支持正向渲染(Forward Rendering ),将使用顶点光照(Vertex Lit)。

    Deferred Lighting延迟光照

    延时光照是有着最高保真度的光照和阴影的渲染路径。如果你有很多实时灯光,最好是使用延时光照。它需要一定水平的硬件支持,仅在 Unity Pro可用,移动设备上不支持

    Forward Rendering 正向渲染

    正向渲染一个基于着色器的渲染路径。它支持逐像素计算光照(包括法线贴图和灯光Cookies)和来自一个平行光的实时阴影。在默认设置中,少数最亮的灯光在逐像素计算光照模式下渲染。其余的灯光计算对象顶点的光照。

    Vertex Lit顶点光照

    顶点光照(Vertex Lit) 是最低保真度的光照、不支持实时阴影的渲染路径。最好是用于旧机器或受限制的移动平台上

    顶点照明渲染路径通常在一个通道中渲染物体,所有光源的照明都是在物体的顶点上进行计算的

    顶点照明渲染路径是最快的渲染路径并且有最广泛的硬件支持(然而,请记住:它无法工作在游戏机上[看渲染路径比较图])。

    由于所有的光照都是在顶点层级上计算的,此渲染路径不支持大部分的逐像素渲染效果:如,阴影法线贴图灯光遮罩高精度的高光

    其他参考:http://blog.sina.com.cn/s/blog_471132920101dfvh.html


    1. rendering path的技术基础


    在介绍各种光照渲染方式之前,首先必须介绍一下现代的图形渲染管线。这是下面提到的几种Rendering Path的技术基础。


    目前主流的游戏和图形渲染引擎,包括底层的API(如DirectX和OpenGL)都开始支持现代的图形渲染管线。现代的渲染管线也称为可编程管线(Programmable Pipeline),简单点说就是将以前固定管线写死的部分(比如顶点的处理,像素颜色的处理等等)变成在GPU上可以进行用户自定义编程的部分,好处就是用户可以自由发挥的空间增大,缺点就是必须用户自己实现很多功能。

    下面简单介绍下可编程管线的流程。以OpenGL绘制一个三角形举例。首先用户指定三个顶点传给Vertex Shader。然后用户可以选择是否进行Tessellation Shader(曲面细分可能会用到)和Geometry Shader(可以在GPU上增删几何信息)。紧接着进行光栅化,再将光栅化后的结果传给Fragment Shader进行pixel级别的处理。最后将处理的像素传给FrameBuffer并显示到屏幕上。

    2. 几种常用的Rendering Path


    Rendering Path其实指的就是渲染场景中光照的方式。由于场景中的光源可能很多,甚至是动态的光源。所以怎么在速度和效果上达到一个最好的结果确实很困难。以当今的显卡发展为契机,人们才衍生出了这么多的Rendering Path来处理各种光照。

    2.1 Forward Rendering


    Forward Rendering是绝大数引擎都含有的一种渲染方式。要使用Forward Rendering,一般在Vertex Shader或Fragment Shader阶段对每个顶点或每个像素进行光照计算,并且是对每个光源进行计算产生最终结果。下面是Forward Rendering的核心伪代码[1]。

    For each light:
        For each object affected by the light:
            framebuffer += object * light

    比如在Unity3D 4.x引擎中,对于下图中的圆圈(表示一个Geometry),进行Forward Rendering处理。


    将得到下面的处理结果


    也就是说,对于ABCD四个光源我们在Fragment Shader中我们对每个pixel处理光照,对于DEFG光源我们在Vertex Shader中对每个vertex处理光照,而对于GH光源,我们采用球调和(SH)函数进行处理。  什么情况?

    Forward Rendering优缺点

    很明显,对于Forward Rendering,光源数量对计算复杂度影响巨大,所以比较适合户外这种光源较少的场景(一般只有太阳光)。

    但是对于多光源,我们使用Forward Rendering的效率会极其低下。因为如果在vertex shader中计算光照,其复杂度将是 ,而如果在fragment shader中计算光照,其复杂度为 。可见光源数目和复杂度是成线性增长的。

    对此,我们需要进行必要的优化。比如

    • 1.多在vertex shader中进行光照处理,因为有一个几何体有10000个顶点,那么对于n个光源,至少要在vertex shader中计算10000n次。而对于在fragment shader中进行处理,这种消耗会更多,因为对于一个普通的1024x768屏幕,将近有8百万的像素要处理。所以如果顶点数小于像素个数的话,尽量在vertex shader中进行光照。
    • 2.如果要在fragment shader中处理光照,我们大可不必对每个光源进行计算时,把所有像素都对该光源进行处理一次。因为每个光源都有其自己的作用区域。比如点光源的作用区域是一个球体,而平行光的作用区域就是整个空间了。对于不在此光照作用区域的像素就不进行处理。但是这样做的话,CPU端的负担将加重,因为要计算作用区域。 怎么计算
    • 3.对于某个几何体,光源对其作用的程度是不同,所以有些作用程度特别小的光源可以不进行考虑。典型的例子就是Unity中只考虑重要程度最大的4个光源。

    2.2 Deferred Rendering

    注意下具体渲染的3个步骤http://blog.csdn.net/heyuchang666/article/details/51564954 


    Deferred Rendering(延迟渲染)顾名思义,就是将光照处理这一步骤延迟一段时间再处理。具体做法就是将光照处理这一步放在已经三维物体生成二维图片之后进行处理。也就是说将物空间的光照处理放到了像空间进行处理。要做到这一步,需要一个重要的辅助工具——G-Buffer。G-Buffer主要是用来存储每个像素对应的Position,Normal,Diffuse Color和其他Material parameters。根据这些信息,我们就可以在像空间中对每个像素进行光照处理[3]。下面是Deferred Rendering的核心伪代码。

    For each object: 
        Render to multiple targets 
    For each light: 
        Apply light as a 2D postprocess
    
    

    下面简单举个例子[1]。

    首先我们用存储各种信息的纹理图。比如下面这张Depth Buffer,主要是用来确定该像素距离视点的远近的。


    图. Depth Buffer

    根据反射光的密度/强度分度图来计算反射效果。


    图.Specular Intensity/Power

    下图表示法向数据,这个很关键。进行光照计算最重要的一组数据。


    图.Normal Buffer

    下图使用了Diffuse Color Buffer。


    图.Diffuse Color Buffer

    这是使用Deferred Rendering最终的结果。


    图.Deferred Lighting Results

    Deferred Rendering的最大的优势就是将光源的数目和场景中物体的数目在复杂度层面上完全分开。也就是说场景中不管是一个三角形还是一百万个三角形,最后的复杂度不会随光源数目变化而产生巨大变化。从上面的伪代码可以看出deferred rendering的复杂度为 。

    但是Deferred Rendering局限性也是显而易见。比如我在G-Buffer存储以下数据

    Depth

    R32F

    Normal + scattering

    A2R10G10B10

    Diffuse color + emissive

    A8R8G8B8

    Other material parameters

    A8R8G8B8

    这样的话,对于一个普通的1024x768的屏幕分辨率。总共得使用1024x768x128bit=20MB,对于目前的动则上GB的显卡内存,可能不算什么。但是使用G-Buffer耗费的显存还是很多的。一方面,对于低端显卡,这么大的显卡内存确实很耗费资源。另一方面,如果要渲染更酷的特效,使用的G-Buffer大小将增加,并且其增加的幅度也是很可观的。顺带说一句,存取G-Buffer耗费的带宽也是一个不可忽视的缺陷。

    对于Deferred Rendering的优化也是一个很有挑战的问题。下面简单介绍几种降低Deferred Rendering存取带宽的方式。最简单也是最容易想到的就是将存取的G-Buffer数据结构最小化,这也就衍生出了light pre-pass方法。另一种方式是将多个光照组成一组,然后一起处理,这种方法衍生了Tile-based deferred Rendering。

    2.2.1 Light Pre-Pass

    Light Pre-Pass最早是由Wolfgang Engel在他的博客[2]中提到的。具体的做法是

    • (1)只在G-Buffer中存储Z值和Normal值。对比Deferred Render,少了Diffuse Color, Specular Color以及对应位置的材质索引值。
    • (2)在FS阶段利用上面的G-Buffer计算出所必须的light properties,比如Normal*LightDir,LightColor,Specular等light properties。将这些计算出的光照进行alpha-blend并存入LightBuffer(就是用来存储light properties的buffer)。
    • (3)最后将结果送到forward rendering渲染方式计算最后的光照效果。

    相对于传统的Deferred Render,使用Light Pre-Pass可以对每个不同的几何体使用不同的shader进行渲染,所以每个物体的material properties将有更多变化。这里我们可以看出相对于传统的Deferred Render,它的第二步(见伪代码)是遍历每个光源,这样就增加了光源设置的灵活性,而Light Pre-Pass第三步使用的其实是forward rendering,所以可以对每个mesh设置其材质,这两者是相辅相成的,有利有弊。另一个Light Pre-Pass的优点是在使用MSAA上很有利。虽然并不是100%使用上了MSAA(除非使用DX10/11的特性),但是由于使用了Z值和Normal值,就可以很容易找到边缘,并进行采样。

    下面这两张图,左边是使用传统Deferred Render绘制的,右边是使用Light Pre-Pass绘制的。这两张图在效果上不应该有太大区别。

    imageimage

    2.2.2 Tile-Based Deferred Rendering

    TBDR主要思想就是将屏幕分成一个个小块tile。然后根据这些Depth求得每个tile的bounding box。对每个tile的bounding box和light进行求交,这样就得到了对该tile有作用的light的序列。最后根据得到的序列计算所在tile的光照效果。[4][5]

    对比Deferred Render,之前是对每个光源求取其作用区域light volume,然后决定其作用的的pixel,也就是说每个光源要求取一次。而使用TBDR,只要遍历每个pixel,让其所属tile与光线求交,来计算作用其上的light,并利用G-Buffer进行Shading。一方面这样做减少了所需考虑的光源个数,另一方面与传统的Deferred Rendering相比,减少了存取的带宽。

    2.3 Forward+

    Forward+ == Forward + Light Culling[6]。Forward+很类似Tiled-based Deferred Rendering。其具体做法就是先对输入的场景进行z-prepass,也就是说关闭写入color,只向z-buffer写入z值。注意此步骤是Forward+必须的,而其他渲染方式是可选的。接下来来的步骤和TBDR很类似,都是划分tiles,并计算bounding box。只不过TBDR是在G-Buffer中完成这一步骤的,而Forward+是根据Z-Buffer。最后一步其实使用的是forward方式,即在FS阶段对每个pixel根据其所在tile的light序列计算光照效果。而TBDR使用的是基于G-Buffer的deferred rendering。

    实际上,forward+比deferred运行的更快。我们可以看出由于Forward+只要写深度缓存就可以,而Deferred Render除了深度缓存,还要写入法向缓存。而在Light Culling步骤,Forward+只需要计算出哪些light对该tile有影响即可。而Deferred Render还在这一部分把光照处理给做了。而这一部分,Forward+是放在Shading阶段做的。所以Shading阶段Forward+耗费更多时间。但是对目前硬件来说,Shading耗费的时间没有那么多。


    Forward+的优势还有很多,其实大多就是传统Forward Rendering本身的优势,所以Forward+更像一个集各种Rendering Path优势于一体的Rendering Path。

    3. 总结


    首先我们列出Rendering Equation,然后对比Forward Rendering,Deferred Rendering和Forward+ Rendering[6]。

    3.1 Rendering Equation

    其中点 处有一入射光,其光强为 ,入射角度为 。根据函数 和 来计算出射角为 处的出射光强度。最后在辅以出射光的相对于视点可见性 。注意此处的 为场景中总共有 个光源。


    3.2 Forward Renderng

    由于Forward本身对多光源支持力度不高,所以此处对于每个点 的处理不再考虑所有的 个光源,仅仅考虑少量的或者说经过挑选的 个光源。可以看出这样的光照效果并不完美。另外,每个光线的 是计算不了的。


    3.3 Deferred Rendering

    由于Deferred Rendering使用了light culling,所以不用遍历场景中的所有光源,只需遍历经过light culling后的 个光源即可。并且Deferred Rendering将计算BxDF的部分单独分出来了。


    3.4 Forward+ Rendering

    可以看出Forward+和Forward最大区别就是光源的挑选上有了很到改进。


    参考文献

    [1] Shawn Hargreaves. (2004) “Deferred Shading”. [Online] Available:

    http://hall.org.ua/halls/wizzard/books/articles-cg/DeferredShading.pdf (April 15,2015)

    [2] Wolfgang Engel. (March 16, 2008) “Light Pre-Pass Renderer”. [Online] Available:

    http://diaryofagraphicsprogrammer.blogspot.com/2008/03/light-pre-pass-renderer.html(April 14,2015)

    [3] Klint J. Deferred Rendering in Leadwerks Engine[J]. Copyright Leadwerks Corporation, 2008.

    [4] 龚敏敏.(April 22, 2012) “Forward框架的逆袭:解析Forward+渲染”. [Online] Available:

    http://www.cnblogs.com/gongminmin/archive/2012/04/22/2464982.html(April 13,2015)

    [5] Lauritzen A. Deferred rendering for current and future rendering pipelines[J]. SIGGRAPH Course: Beyond Programmable Shading, 2010: 1-34.

    [6] Harada T, McKee J, Yang J C. Forward+: Bringing deferred lighting to the next level[J]. 2012.

    展开全文
  • Unity3D 2D贴图 与 帧动画

    千次阅读 2019-08-06 20:01:36
    2D贴图绘制方式有两种,第一种由 GUI 绘制,第二种是将贴图以材质的形式绘制在游戏对象中。 GUI绘制 在屏幕中绘制一张静态贴图,需要使用 GUI.DrawTexture() 方法,该方法原型如下: GUI.DrawTexture(位置, 图片...

    2D贴图绘制方式有两种,第一种由 GUI 绘制,第二种是将贴图以材质的形式绘制在游戏对象中。

    GUI绘制

    在屏幕中绘制一张静态贴图,需要使用 GUI.DrawTexture() 方法,该方法原型如下:

    GUI.DrawTexture(位置,  图片对象,  缩放模式,  是否开启图片混合模式,  图片缩放宽高比);

    例如:GUI.DrawTexture(new Rect(100,100,120,120), texSingle, ScaleMode.StretchToFill, true, 0);

    第一个参数表示图片绘制的区域,第二个参数表示绘制图片的对象,第三个参数表示图片缩放模式,第四个参数表示是否开启图片混合模式,第五个参数表示图片缩放宽高比。

     

    示例1

    分别读取单个图片与多个图片,并且将加载的图片绘制在屏幕当中。

    一定要将加载的图片保存在“Assets”下的“Resources”文件夹(自己创建一个)中,否则的话程序将无法识别。

    其中 Resource.Load()方法 和 Resource.LoadAll()方法的参数均为资源文件夹的完整路径,但是前者返回的是读取的资源对象,后者返回的是资源数组对象。

    两者读取的都是“Resources”文件夹的对象

    Resources.Load(string path) ;        //加载储存在Resources文件夹中path处的资源,加载单一的贴图资源。

    Resources.Load(string path ,Type type) ;        //加载储存在Resources文件夹中path处的资源,只返回type的物体。

    Resources.LoadAll(string path) ;        //加载Resources文件夹中的path文件夹或者文件中的所有资源。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class toPictrue : MonoBehaviour {
    
        private Texture2D tex;    //贴图
        private Object[] texs;    //贴图数组
        void OnGUI()
        {
            if(GUI.Button(new Rect(10,10,100,50),"加载一张贴图"))
            {
                if(tex == null)
                {
                    //加载一张贴图
                    tex = (Texture2D)Resources.Load("single/0");
                }
            }
            if(GUI.Button(new Rect(10,160,100,50),"加载一组图片"))
            {
                if(texs == null)
                {
                    //加载一组贴图
                    texs = Resources.LoadAll("textures");
                }
            }
            if(tex != null)
            {
                //绘制贴图
                GUI.DrawTexture(new Rect(110,10,120,120),tex,ScaleMode.StretchToFill,true,0);
    
            }
            if(texs != null)
            {
                for(var i = 0;i<texs.Length;i++)
                {
                    GUI.DrawTexture(new Rect(110+i*120,160,120,120),(Texture)texs[i],ScaleMode.StretchToFill,true,0);
                }
            }
    
        }
    }
    

    运行结果:点击“加载一张贴图”按钮会显示上面那一张图,点击“加载一组图片”按钮会把指定文件夹的图片全部显示

     

    绘制动画

    帧动画绘制原理:首先需要一组帧动画资源,然后在屏幕中设定一个显示区域,接着将动画的每一帧图片按照固定的时间在这个区域顺序切换,实现动画的播放。

    使用程序将动画资源存储在动画数组中,然后设定刷新时间,每次刷新动画时将在原有显示区域中绘制下一帧图片,到了最后一帧则从第一帧重新开始。

    示例2

    下图是“Assets”文件夹里的资源。

    人物行走循环动画已经在屏幕中播放,并且播放帧数的序列号以标签的形式绘制在屏幕中

    示例中,将播放动画的功能封装在 DrawAnimation() 方法中,该方法第一个参数表示动画资源数组对象,第二个参数表示动画的显示区域。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class E3_06 : MonoBehaviour {
    
        private Object[] anim;    //动画数组
        private int nowFram;    //帧序列
        private int mFrameCount;    //动画帧的总数
        private float fps = 5;    //限制一秒多少帧
        private float time = 0;    //限制帧的时间
    	void Start () {
            //得到帧动画中的所有图片资源
            anim = Resources.LoadAll("WalkingCartoons");
    	    //得到该动画共有多少帧
            mFrameCount = anim.Length;
        }
        void OnGUI()
        {
            //绘制帧动画
            DrawAnimation(anim, new Rect(50, 80, 32, 48));
        }
    
        void DrawAnimation(Object[] tex,Rect rect)
        {
            //绘制动画信息
            GUILayout.Label("当前动画播放:第"+nowFram+"帧");
            //绘制当前帧
            GUI.DrawTexture(rect,(Texture)tex[nowFram],ScaleMode.StretchToFill,true,0);
            //计算限制时间
            time += Time.deltaTime;
            //超过限制帧则切换图片
            if(time >= 1.0 / fps)
            {
                nowFram++;  //帧序列切换
                time = 0;   //限制帧清空
                if(nowFram >= mFrameCount)
                {
                    nowFram = 0;
                }
            }
            
        }
    	
    }
    

    运行结果:

    展开全文
  • Unity3D制作2D精灵动画

    千次阅读 2015-09-17 14:00:20
    图片导入unity3d,修改sprite model,点击 sprite editor。 如果,图片中的各个元素距离比较开,可以用Slice自动划分。如果不行的话,手动划分下,然后点击Apply确定。这样就吧一副大图片上的各个元素分开了。 ...
  • Unity3D下修改Polygon Collider 2D

    千次阅读 2015-03-17 22:52:42
    向GameObject添加一个Polygen Collider 2D组件应该没什么问题,添加完成之后Unity会自动根据Sprite的形状来自动计算出Polygen Collider 2D的形状。 但是有时系统自动计算出来的Polygon并不准确,需要进行一些微调。 ...
  • 这个工具呢,博主在Unity3D游戏开发之反编译AssetBundle提取游戏资源这篇文章中其实已经提到过了,不过因为有些朋友对如何使用这个工具依然存在问题,所以博主决定特地写一篇文章来讲解如何使用disunity来提取Unity...
  • Unity3d中实现点击目标点,然后出现引路线段,动态更新线段等功能 主要用到组件:NavMeshAgent参数就不全部说明了,就说几个重要的吧 Steering->Speed <1>这个是设置自动寻路的速度的,可以把这个值...
  • 本文介绍了Unity3D界面及游戏对象基本操作。
  • 该资源,是Unity 3D路径跟随,可以选择闭合曲线和非闭合曲线,目标跟随时可以选择旋转跟随和非旋转跟随,曲线的绘制采用Hermite曲线。
  • unity3d 】沙盒路径

    千次阅读 2018-06-27 09:16:19
    在使用XML解析的时候会要加载相对路径或绝对路径,但是在打包给其他人的时候,是不可取得。这时需要传入一个沙河路径沙河路径需要一个XML名,并把XML文档放入Resorces文件里(Resorces文件夹自己创建)就可以接收:...
  • 声明: 本博客文章翻译类别的均为个人业余时间翻译,版权所有。...    译者说明:  ... 公司目前的3D项目由OGRE 3D转为Unity3D了,由于整个3D项目组只有我对Unity3D比较熟,所以前期研究工作都是我来完成的
  • Unity 3D Polygon Collider2D 使用方法

    千次阅读 2014-06-27 13:50:27
    1.在物体上添加Polygon Collider2D
  • Unity3D学习路线与学习经验分享

    万次阅读 多人点赞 2019-07-22 13:34:34
    Unity3D学习路线与学习经验分享//最后一次更新为2019.7.22日,更新了一些废掉的链接 作者:15游02 丁祺 你好,这篇文档是我的导师孙老师(以下简称老孙)指名我 书写给新手、初学者以及技能有些许缺陷的人的一篇...
  • Unity3d 引擎原理详细介绍

    万次阅读 2014-03-25 13:22:52
     为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则。 Unity3D 引擎  Unity3D的是一个屡获殊荣的工具,用于创建交互式3D应用程序在多个...
  • [Unity3D]Unity3D游戏开发之截屏保存精彩瞬间

    万次阅读 热门讨论 2014-09-10 20:37:27
    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/...比如博主在写《[Unity3D]Unity3D游戏开发之自由视角下的角色控制》和《[Unity3D]Unity3D游戏开发之角色控制漫谈》这两篇
  • Unity3d不久之前正式发布了Unity3d 2017.1, 这个版本的发布也宣告了Unity3d正式告别了5.x时代,并且开始已年份直接命名,开启了新的纪元。那么Unity3d 2017相较上一版本到底有哪些改进呢?这介绍这些改进之前先放出...
  • unity3D-下载安装指南

    2020-02-17 20:20:28
    下载安装unity3D ​ 2.下载安装JavaJDK ​ 3.下载安装AndroidSDK ​ 4.下载安装NDK ​ 5.在unity3D中将2-4安装的地址在制定位置连接上[最重要的一步] ​ 6.3DMax下载安装 ​ 7.3DMax基本使用 ​ 8.3DMax 创建一个...
  • Unity3D常用函数说明

    2018-03-07 17:02:11
    Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结。 Awake当前控制脚本实例被装载的时候调用。一般...
  • 我们知道,Unity3d会将Assets folder下的图片进行编译预处理,在程序打包完成后,我们是无法动态的修改图片内容,所以,如果能动态的从非Assets 目录下加载图片就是一个非常好的方法。我们可以使用Unity3d WWW类提供...
1 2 3 4 5 ... 20
收藏数 3,190
精华内容 1,276
关键字:

2d路径 unity3d