unity3d 模型设置_unity3d 设置模型为默认 - CSDN
精华内容
参与话题
  • Unity3D开发之设置模型显示在UI前面

    万次阅读 2020-01-14 09:50:11
    项目中我们会遇到类似这种需求,弹出一个小UI界面,我们可以在UI界面上看到我们的三维模型。对于广大Unity开发者都知道,unity引擎默认UI渲染在最上层。所以,想要实现这个功能...我们设置模型的Layer层为Model,...

        项目中我们会遇到类似这种需求,弹出一个小UI界面,我们可以在UI界面上看到我们的三维模型。对于广大Unity开发者都知道,unity引擎默认UI渲染在最上层。所以,想要实现这个功能需要我们自己去处理下。

        我这里提供了两个实现的方法。各有优缺点。根据自己的需求来选择。首先我们需要额外一个摄像机ModelCamera来专门渲染我们要显示的模型。我们设置模型的Layer层为Model,自己随便定义。然后在我们主相机上,设置Culling mask去掉Model层,如下图:

    然后设置我们的另一个ModelCamera的Clear Flags为Depth Only。这个选项的含义是代表只渲染指定层级的物体。然后设置Culling mask在Model上勾选,其他全部取消勾选。这样代表此相机只渲染Model层的物体。如下图。好了,前戏结束了,下面是进入两个不同的方法了。

        方法一:

        我们使用一张 Render Texture将ModelCamera摄像机渲染到的东西保存下来,然后在UI上创建一个RawImage,将Render Texture附加到RawImage的Texture上。这里注意我们要设置Render Texture的属性,不然显示会有问题。Render Texture贴图设置如下:

    以防我们显示的内容变形,我们要根据显示图片的大小设置Render Texture的Size。Size越大越清楚哦,但是同样耗费性能。这个方法的缺点是只能观看效果,并不能做一些鼠标与模型的互动。如果只是为了显示效果的可以选择此方法。

    方法二:

    下面这个方法的优点是我们可以做鼠标与模型的交互。我们知道三维空间想让UI显示在模型的后面只有使用世界Canvas。对,就是新建一个Canvas,将Canvas的RenderMode设置为WorldSpace模式。设置如下:

    然后我们就是三维世界调UI的位置,这是耗时的操作,自己慢慢调。要设置显示在屏幕位置,就要调节ModelCamera的ViewRect。如果需要做交互,我们就可以让ModelCamera发射射线和模型做射线检测啦。很简单。以下为个人不确定观点:因为创建了两个Canvas,所以方法二性能消耗是高于方法一的。

        好了,以上是我在做项目时解决问题的方法,希望能帮助到你。如有疑问,欢迎留言交流。对于博客认为讲解不明之处,欢迎多多指导。

        如果本博客对你有帮助,记得点关注哦!

    2018.7.11更新

    上面说的第二种方法中,需要我们手动调UI位置以及ModelCamera的ViewRect。很费劲。今天看到一个非常不错的方法,可以指定我们摄像机渲染的图像到屏幕指定区域上。

     

    就是这个API : Camera.pixelRect 

    这个属性的设置类型是Rect。我们可以看到Rect的结构是(x,y,Xmax,Ymax)。所以假如我们想把渲染到的内容显示在屏幕中间位置,且显示的大小为100*100的正方形,代码如下:

    modelCamera.pixelRect = new Rect(Screen.width/2-50,Screen.height/2-50,100,100);

    2020.1.14更

    方法一里设置rendertexture的方式并不是十分准确。设置成ARGB64在有些平台是不支持的。默认的格式是ARGB32,基本所有平台都支持,所以建议是使用ARGB32.但是会造成一个问题,在每次渲染后上一次渲染到贴图上的颜色没有去掉。导致每次渲染都填充到贴图中,渲染不正确。解决方案有两种:第一种选择输出renderTexture的camera的clear flag为Solid Color,并设置颜色透明度为0.第二种如果选择的clear flag为Depth Only 我们就需要些一个脚本来消除上一帧的颜色缓冲。

    void OnPreRender()
        {
            //在摄像机渲染之前 清除贴图内容
            renderTexture.Release();
        }

    所以可以看出camera的clear flag标签中,Skybox和Solid Color都是清除上一帧颜色缓冲的标签,而depth only和Dont clear都没有清除颜色缓冲的功能。

    展开全文
  • Unity3D3D模型的使用——FBX的使用与Animation设置

    万次阅读 多人点赞 2017-06-11 10:42:03
    FBX的使用与Animation设置是一个很有必要的技能,对于美工MM送过来的3D模型你应该懂得如何将其设置到游戏场景之中使用...下面列举两个例子,说明FBX的使用与Animation设置,说白了,就是3D模型如何在Unity3D中使用。 文

    FBX的使用与Animation设置是一个很有必要的技能,对于美工MM送过来的3D模型你应该懂得如何将其设置到游戏场景之中使用,不然真的羞死人的,这都不会。毕竟游戏里面许许多多的主角的动作都是一系列已经做好的3D动画,包括行走、攻击动作等,很少人在update()中来写一大堆来实现的。下面列举两个例子,说明FBX的使用与Animation设置,说白了,就是3D模型如何在Unity3D中使用。

    文中所用到的两个3D模型:

    Ezreal:http://download.csdn.net/detail/yongh701/9866792

    Alice:http://download.csdn.net/detail/yongh701/9866791

    一、材质贴图已打包为DDS、动画需要切割的FBX

    1、导入

    Ezreal是一个材质贴图已打包为DDS的FBX,其文件结构如下图所示:


    那么在Unity3D中直接导入这个FBX文件即可。


    导入之后如下图所示,可以看到Unity3D能够自动识别此类3D模型,同时,还能识别到3D模型中带有的动画,并且整个FBX模型所带的动画我们还能做个大致的预览,一般情况下,Take 001就是模型最初的动作。


    这个模型被导入到Unity3D就是一个预设Prefab存在,你可以随意拖放,关于什么是预设Prefab,在《【Unity3D】利用预设、实例化Instantiate和协程完成生成器》(点击打开链接)我已经提到过了,这里不再赘述了。我们可以直接将这个Ezreal拖入场景当中,并且在(0,5,-10)拖一个Directional light,给模型提供合理的光照,大家可以看到3D模型已经基本能够使用了。


    2、动画切割

    但这样还不行,我们刚才明明看到这个FBX模型是带有动画Take 001,而且Take 001里面带有3个动作的,一个是模型在静止时发呆的动作、一个是行走动作、一个是攻击的动作。我们需要将这样动作应用到模型上面来。

    首先,我们要在FBX模型的控制面板,设置Rig中的Animation Type为Legacy,Generation按默认就行,然后点击Apply将动画应用到这个模型上。在Unity3D一般使用Legacy动画。


    之后,我们需要对动画进行切割。打开Animation面板,添加三个片段,分别是idle发呆、run跑步、attack攻击,然后分别修改好名字。同时设置好其在Take 001的开始帧与结束帧,设置开始、结束帧的时候,可以边播放动画,边调试。一般美工MM也会告诉你,她设置的各段具体的开始结束帧,这里Ezreal的三段分别为0-39、40-65、66-96。同时对于idle与run的循环模式都从Once改成Loop,因为这是一个长期存在的行为。之后点击Apply,则可以看到Take 001被切割成我们要求的三段。


    3、动画处理

    之后我们则可以对这个模型附着如下的脚本AnimationScript.cs:

    using UnityEngine;
    using System.Collections;
    
    public class AnimationScript : MonoBehaviour
    {
        void Start()
        {
            Animation animation = this.animation;//动画控制器
            animation.Play("idle");//上来直接播放idle动画
        }
        void OnGUI()
        {
            if (GUI.Button(new Rect(0, 0, 100, 30), "行走"))
            {
                animation.Play("run");
            }
            if (GUI.Button(new Rect(100, 0, 100, 30), "停止"))
            {
                animation.Play("idle");
            }
            if (GUI.Button(new Rect(200, 0, 100, 30), "攻击"))
            {
                animation.Play("attack");
                animation.PlayQueued("idle");//播放完attack之后再播放idle
            }
        }
    }
    

    可以看到脚本很短,甚至大家看代码都能直接知道意思,运行结果如下:


    可以看到基本能够达到一个比较不错的水平了,如果你能有个做fbx模型做得很好的MM,和她配合下,其实基本实现很多东西了……当然现实中哪有这么浪漫?基本上要么自己一手包,要么就到外面的三维公司里面买,或者小成本点的,就自己收集些免费的fbx素材……

    上面的动画可以看到行走run这个动画,循环之间的分P还有点小跳跃,这个要么就是没切割好,要么就是动画本身问题,在整个动画,三个动作之间,留得空隙过短,导致不好分割,很遗憾,我这里是后者……毕竟这个素材我也是在网上收集的……


    这里说完一大类的FBX,下面说另一大类的FBX


    二、材质贴图没打包、动画不需要切割的FBX

    1、导入

    alice是一个材质贴图没打包好的fbx模型,文件模型如下图所示:


    那么我们需要在Unity3D的Assets根目录新建一个Textures文件夹,不可改名,就叫这个名字,不为什么。通过Import New Asset...一个一个将材质贴图导入,Import New Asset..貌似不支持多选的,所以只能一个一个导入。所以为了减少鼠标点击次数,请让你的美工MM,打包材质吧!那些做工精致的模型,估计材质贴图要上万。


    之后,我们才在Assets根目录导入这个FBX模型,一定要遵守这个顺序,不然导入的模型会丢失材质的。

    同样可以将个模型拖拽出来,沿Y轴旋转180度,也就是Rotation设置Y为180,并且与上面模型一样,在(0,5,-10)拖一个Directional light,给模型提供合理的光照。在Rig的动画同样设置为Legacy并且应用到模型。


    2、由于这个模型只有一个无须切割的动画,因此可以直接附着如下脚本AnimationScript2.cs:

    using UnityEngine;
    using System.Collections;
    
    public class AnimationScript2 : MonoBehaviour
    {
        void Start()
        {
            Animation animation = this.animation;
            animation.Stop();//由于只有一条动画,无须切割,Unity3D默认将会直接播放这个动画的
        }
        void OnGUI()
        {
            if (GUI.Button(new Rect(0, 0, 100, 30), "行走"))
            {
                animation.Play();
            }
            if (GUI.Button(new Rect(100, 0, 100, 30), "重新行走"))
            {
                animation.Rewind();
            }
            if (GUI.Button(new Rect(200, 0, 100, 30), "停止"))
            {
                animation["Take 001"].normalizedTime = 0;//定位到此动画的第0帧
                animation.Sample();//跳转
                animation.Stop();//再停止
            }
        }
    }
    
    这里基本已经完全展示如何使用Animation类的基本方法来控制动画了,其中这里唯一需要注意的一点,animation.Stop();单单是暂停动画,如果你想将动画调回第一帧再播放,需要如上的来使用Animation类的基本方法。

    运行效果如下所示:



    估计这两大例子基本已经能让大家明白Unity3D中3D模型的使用。

    展开全文
  • 当我们将模型导入到Unity3D中时,经常会遇到模型的中心点与物体中心点相差甚远的情况 这种情况通常会对我们的物体位置控制产生一些不利影响(当然这种设置也有其存在的好处……) 要解决类似问题,我们通常可以在...

    当我们将模型导入到Unity3D中时,经常会遇到模型的中心点与物体中心点相差甚远的情况,如下图所示:
    物体中心点与物体中心不一致
    这种情况通常会对我们的物体位置控制产生一些不利影响(当然这种设置也有其存在的好处……)
    要解决类似问题,我们通常可以在Unity3D中进行设置。
    1. 设置一个空物体作为我们进行修改的模型的父物体,设置其坐标为(0,0,0),随后将我们需要修改的子物体拖动到与父物体坐标系原点相重合的位置这样便可实现我们预期的目标。
    这里写图片描述
    2. 通过代码设置中心点

    /// <summary>
    /// 重置模型的中心点位置
    /// </summary>
    [MenuItem("Tool/ResetCenterPosition")]
    public static void ResetCenterPosition()
    {
        Transform transform = Selection.activeTransform;
        Bounds bounds = new Bounds(Vector3.zero, Vector3.zero);
        Vector3 center = Vector3.zero;
        //获取物体的Bound最终合成信息
        foreach (var item in transform.GetComponentsInChildren<MeshRenderer>())
        {
            bounds.Encapsulate(item.bounds);
        }
        center = bounds.center;
        //新建空物体,将原来中心点有问题的物体放置到该物体下作为子物体存在
        GameObject obj = new GameObject();
        obj.name = transform.name;
        obj.transform.position = center;
        obj.transform.rotation = Quaternion.identity;
        //获取原物体在模型中的路径
        string selectedObjPath = "";
        Transform currentSelectTransform = transform;
        while (currentSelectTransform.parent != null)
        {
            selectedObjPath = currentSelectTransform.parent.name + "/" + selectedObjPath;
            currentSelectTransform = currentSelectTransform.parent;
        }
        //设置空物体的层级,使之与原物体处于同一层级
        obj.transform.SetParent(GameObject.Find(selectedObjPath).transform);
        transform.SetParent(obj.transform);
    }

    该方法同样通过计算当前物体及子物体的Bounds的大小和位置,新建一个空物体,将空物体的位置放置在模型Bounds的中心点中,将原来的物体设置为空物体的子物体来实现坐标点的重置。该方法为单个物体进行重置,也可以通过修改代码,自动将整个模型中的所有物体进行重置,但是需要注意的是该种方法并没有改变原始物体MeshFilter的中心点位置,如果用户要对其MeshFilter进行操作,可能会有其他的情况发生。
    如果需要对物体进行碰撞或者射线检测,然后在进行位置的操作,请先确定操作的物体是空物体还是有网格信息的物体。否则不会出现预期的效果。
    3. 通过将FBX文件重新导入到3DMax中进行设置来完成对Pivot的重置,该方法可以从本质上实现对模型中心点的设置。
    将模型导入到3DMax中后,全选所有物体,选择右侧工具栏的层次->轴->仅影响轴->居中到对象。然后再将模型导出即可。
    3DMax中居中到对象
    4. 另一种方式可以通过重新计算MeshFilter的方式进行,该种方法暂时无法得到模型准确的中心点,需要借助Bounds来计算,但是无法通过MeshFilter中所有的点的平均位置来计算,因此暂时无法对不规则物体进行中心点重置,这种方法仅供参考,可以在此基础上深入研究。

    [MenuItem("Tool/ResetCenterPositionWithMeshFilter")]
    public static void ResetCenterPositionWithMeshFilter()
    {
        Transform transform = Selection.activeTransform;
        //获取物体的Bound最终合成信息
        foreach (var item in transform.GetComponentsInChildren<MeshFilter>())
        {
            Vector3[] testVector = item.mesh.vertices;
            for (int i = 0; i < testVector.Length; i++)
            {
                testVector[i] += new Vector3(1, 1, 1);
            }
            item.mesh.vertices = testVector;
            item.mesh.RecalculateBounds();
            item.mesh.RecalculateNormals();
            item.mesh.RecalculateTangents();
        }
    }
    展开全文
  • Unity3D 模型换肤技术

    千次阅读 2015-07-05 10:52:57
    最近在看Unity3D的人物模型和动画。所以今天先说下人物的换装吧。相信大家都玩过网游吧,没有玩过的也相信见过,就是网游或者单机... 一.Unity3D里的3D模型 Unity3D里的基础模型是从3D工具中导出来的fbx文件。把f

     最近在看Unity3D的人物模型和动画。所以今天先说下人物的换装吧。相信大家都玩过网游吧,没有玩过的也相信见过,就是网游或者单机游戏里的人物会有更换服装,更换武器的功能。如果外形(mesh)是一样的,那么把贴图换下就好,但是如果外形不一样甚至骨骼都变了的话,就需要我们今天讨论的技术了。

      一.Unity3D里的3D模型

    Unity3D里的基础模型是从3D工具中导出来的fbx文件。把fbx放在Assets目录下会自动生成一个Materials文件夹,里面会生成一个材质球。在Unity3D项目里的显示是这样

    注意:Textrue需要另外添加进去。

             模型的主要文件就是那个蓝色的方块,前面两个(WGKS_wugang,WGKS_yaodai)这两个文件是模型的Mesh信息,一个是人物本身的,一个是腰带的,因为比较简单的模型,所以只有两个。下面的一坨是动作信息,动作是可以自己设置的,这个以后文章会讲。而紧接着的

    “Bip001”这个是模型的骨骼信息,你拖到Scene里就能层层打开看到了。而WGKS_yaodai则是蒙皮信息的一些玩意。选择到它会在Inspector属性栏里看到SkinnedMeshRenderer组件,这里会看到它牵扯到的mesh,material,bone信息。

      

      二.换装方案1组合模型的显示和隐藏

      这个题目可能说的不合适,但是想不到更合适的了。我们的第一种换装的方法很简单,就是让模型或者Mesh进行显示和隐藏。就比如让人物穿两套衣服,显示第一套的时候隐藏第二套,显示第二套的时候显示第一套。

             例如这个模型:

             

    这里有TBJ_SR_01和TBJ_SR_03两个SkinnedMeshRenderer.那么我们可以分别设置Active来设置是否可见。代码如下:

    [csharp] view plaincopy
    1. public GameObject clothA = null;  
    2. public GameObject clothB = null;  
    3.   
    4. if (GUI.Button(new Rect(5, 5, 100, 50), "ClothA"))  
    5. {  
    6.     clothA.SetActive(true);  
    7.     clothB.SetActive(false);  
    8. }  
    9.   
    10. if (GUI.Button(new Rect(5, 60, 100, 50), "ClothB"))  
    11. {  
    12.     clothA.SetActive(false);  
    13.     clothB.SetActive(true);  
    14. }  


    运行起来的效果如下:

    ClothA

    ClothB

          如果角色是换武器而不是换装备的话,原理是一样的,只不过我们要找到附属的武器GameObject然后设置让它显示和隐藏就可以了。

      三.换装方案2 替换Skin信息

          方案1的方法用起来比较简单,比较适合简单的模型替换,比如一个模型来来回回就两把武器的话,就可以用。但是如果一个模型有十来套衣服或者十几件装备的话,这么做会比较悲剧的,因为太占资源了,创建一个模型,牵扯的不用的东西也整进内存了,暴殄天物。

          所以我想能不能游戏运行的时候替换模型的Skin信息达到我们的目的。一开始我觉得,其实我们只需要把sharedmesh,material替换掉就行了。实验证明不行的。大家可以自己尝试下,Unity3D会报错,即使不报错模型也会变形的。模型中还有一块是骨骼没有动,所以我想尝试下如果把骨骼去掉能不能拿到mesh信息等,然后再替换。结果是从3DMAX里去掉骨骼导出的话,蒙皮信息也没有了。所以我确定了一点是,被换装的模型必须有骨架,而源Mesh信息中必须包含骨架信息,按照我的理解就是Mesh中保存着这个点依附的是哪个骨头,权重是多少等。

     

      这里我准备了两个模型:

                

    带有完整的信息(骨头,动作,蒙皮信息等,只不过模型只有一个mesh而已)。

    放在Scene的样子:

                

      我的目的是想让左边的那个模型读取右边模型的SkinnedMeshRenderer信息,然后赋值给自己。首先我把右边的模型除了骨架的所以资源赋值给一个prefab,然后加载prefab,读取信息给左边的模型。

      代码如下:

    [csharp] view plaincopy
    1. // 声明两个SkinnedMeshRenderer  
    2. public SkinnedMeshRenderer MyskinMeshRender = null;  
    3. public SkinnedMeshRenderer SrcSkinMeshRender = null;  
    4.   
    5. //加载资源  
    6. Object Src = Resources.Load("Res/Materials2");  
    7. objSrc = Instantiate(Src) as GameObject;  
    8.   
    9. //找到目标模型的SkinnedMeshRenderer  
    10. MyskinMeshRender = GameObject.Find("TBJ_SR_01").GetComponent<SkinnedMeshRenderer>();  
    11. //获取加载的SkinnedMeshRenderer  
    12. SrcSkinMeshRender = objSrc.GetComponent<SkinnedMeshRenderer>();  
    13. //获取目标模型的骨骼  
    14. Transform[] bonesMy = gameObject.GetComponentsInChildren<Transform>();  
    15. Debug.Log(bonesMy.Length);  
    16. //Transform[] bonesSrc = GameObject.Find("TBJ_SR_03").GetComponentsInChildren<Transform>();  
    17. //获得源SkinMesh中依附的骨骼信息  
    18. Transform[] bonesSrc = SrcSkinMeshRender.bones;  
    19. Debug.Log(bonesSrc.Length);  
    20.   
    21. //根据源SkinMesh依附的骨骼信息重新排列目标骨骼  
    22. List<Transform> bones = new List<Transform>();  
    23. foreach (Transform boneS in bonesSrc)  
    24. {  
    25.     foreach (Transform boneM in bonesMy)  
    26.     {  
    27.         if (boneS != null && boneM != null)  
    28.         {  
    29.             if (boneS.name != boneM.name)  
    30.             {  
    31.                 continue;  
    32.             }  
    33.             bones.Add(boneM);  
    34.         }  
    35.     }  
    36. }  
    37. MyskinMeshRender.bones = bones.ToArray();  
    38. MyskinMeshRender.sharedMesh = SrcSkinMeshRender.sharedMesh;  
    39. MyskinMeshRender.sharedMaterials =SrcSkinMeshRender.sharedMaterials;       


    运行之后发现皮肤换了,而且动画信息没有丢失掉,也就是说还能动,但是有个奇葩的现象,人物是倒着的,如图:

      这个我分析后觉得是因为骨骼的问题。两个模型的骨骼有点不一样。因为我是读取了右边的模型的蒙皮信息对应的骨骼信息而重组了左边的骨骼,但是左边的动画信息还是按照原来的。虽然不是很清楚动画数据里面数据结构,但是我觉得就是记录的骨骼或者mesh或者当前模型的世界坐标的某个点对应的Mesh或者骨骼移动到哪个位置。

     

      接着我换了一个思路,用一个人物模型,一套骨骼,一套动作,不过蒙皮信息有两个,导出fbx。

    如图:

     

      然后在3DMax里面导出一个没有蒙皮信息只有骨骼和动作的fbx,如图:

      然后添加脚本,代码如下: 

    [csharp] view plaincopy
    1. //声明两个SkinMeshRender 声明为public是为了方便观察 真正需要private  
    2. public SkinnedMeshRenderer MyskinMeshRender = null;  
    3. public SkinnedMeshRenderer SrcSkinMeshRender = null;  
    4.   
    5. //添加SkinnedMeshRenderer组件  
    6. MyskinMeshRender = gameObject.AddComponent<SkinnedMeshRenderer>();  
    7.       
    8. if (Input.GetKeyDown(KeyCode.Z))  
    9. {  
    10.     GameObject obj = GameObject.Find("TBJ_SR_01"as GameObject;  
    11.     SrcSkinMeshRender = GameObject.Find("TBJ_SR_01").GetComponent<SkinnedMeshRenderer>();  
    12.   
    13.     Transform[] bonesMy = gameObject.GetComponentsInChildren<Transform>();  
    14.     Transform[] bonesSrc = SrcSkinMeshRender.bones;  
    15.   
    16.     List<Transform> bones = new List<Transform>();  
    17.     foreach (Transform boneM in bonesSrc)  
    18.     {  
    19.         foreach (Transform boneS in bonesMy)  
    20.         {  
    21.             if (boneM != null && boneS != null)  
    22.             {  
    23.                 if (boneM.name != boneS.name)  
    24.                 {  
    25.                     continue;  
    26.                 }  
    27.                 bones.Add(boneS);  
    28.             }  
    29.         }  
    30.     }  
    31.     MyskinMeshRender.bones = bones.ToArray();  
    32.     MyskinMeshRender.sharedMesh = SrcSkinMeshRender.sharedMesh;  
    33.     MyskinMeshRender.sharedMaterials = SrcSkinMeshRender.sharedMaterials;  
    34. }  


     

      运行,结果没有问题了。如图:

      

      按下Z之后:

      而且动作保留。

     

      总结:

      虽然这个例子不是很经典,也存在些许问题,希望大家指出问题,共同进步。在添加skinnedMeshRenderer组件的时候有个问题,如果模型选择Generic的时候,Unity3D会挂掉。

    这个例子可以运用到骨骼和动作基本一样,但是外形不同的模型中,减少游戏中的资源重复占用。网上还有个更经典的例子,运用的是Character Customization 包,运用的原理是一样的,这里给大家看下运行结果:

      

          

      这个模型是由各个部分的mesh组成,而我的例子是用的一个mesh。在复杂的模型中,我们可以查找子组件的SkinnedMeshRenderer,然后进行操作就可以了。想换哪里就替换哪里的SkinnedMeshRenderer的信息,更新对应的骨骼列表和组合一下网格就行了。

    [csharp] view plaincopy
    1. List<CombineInstance> combineInstances = new List<CombineInstance>();  
    2. CombineInstance ci = new CombineInstance();  
    3. ci.mesh = SrcSkinMeshRender.sharedMesh;  
    4. combineInstances.Add(ci);  


             还有一个想法是这样的,源资源中是否需要骨头。我发现重组骨头结构的时候其实只是读取了骨头的列表信息,所以我觉得可以写成一个配置信息,直接读取配置信息来重组。这个想法还没有得到验证,等有时间的吧。


    展开全文
  • Unity3d导入模型尺寸问题

    千次阅读 2017-09-01 11:55:02
    原文地址 大家都知道,Unity3D系统单位是米,所以当我们用3dmax建模的时候也要一开始就把单位设置成公制单位米 ...虽然这样做已经和unity3d里面的单位...在Unity3d中找到改模型,然后在讲属性面板里面的缩放改成
  • [Unity优化]资源导入设置--3D模型

    千次阅读 2018-08-18 09:17:07
    Unity模型资源导入设置如下图,是一个模型的导入设置:首先是Model切页: Mesh网格设置: Scale Factor:缩放因子,不同的建模程序生成的模型文件,尺度单位不同,为了在U3D里统一,就需要进行缩放。 模型文件
  • Unity3D白皮书(一)模型导入设置

    万次阅读 2017-09-06 10:21:32
    我们可以在资源文件的Inspector界面看到这个文件的相关设置,导入设置本质上是AssetImporter或其衍生类。 Why?为什么我们要使用导入设置? 我们导入的资源大部分是由第三方软件生成的,而这些资源需要指定一些参数...
  • 猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,...那么如何添加mesh之间的碰撞呢?最后发现挺简单的。 1、在Project中选中你的场景模型2、在Inspector中勾选 Generate Colliders3、Apply即
  • Unity3D开发:向Unity3D中导入外部模型

    万次阅读 2014-04-09 14:00:09
    Unity3D支持多种外部导入的模型格式,这里列出了它支持的外部模型的属性,并且以3D MAX为例,导出FBX文件给Unity3D使用。
  • unity3D人物模型下载

    热门讨论 2020-07-30 23:30:32
    unity3d人物模型,包含纹理,直接导入即可使用
  • Unity3D模型制作规范

    千次阅读 2014-05-29 11:36:21
    Unity3D模型制作规范 一.单位,比例统一 在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放...
  • Unity3D模型导入缩放问题

    万次阅读 2017-06-25 09:56:02
    便查阅及测试了一下模型导入Unity3d的规则。得到了以下总结。(使用3dMax 建模,Unity 5.X测试)  1.不管怎样构建的模型(系统单位和导出单位设置成什么),将模型拖入到U3D工程,然后加入到scene中,不作任何处理...
  • Unity3D模型优化技巧

    千次阅读 2014-09-04 21:42:46
     Unity3D引擎交流QQ群:【21568554】
  • ANDROID应用中嵌入Unity3D视图(展示3D模型)

    万次阅读 多人点赞 2015-03-19 17:49:08
    本文通过一个在Android中展示3D模型的实例,介绍如何将Unity3d以View的形式嵌入到Android应用中。并提供Deom和代码下载。
  • Unity中,我们可以使用2D的Spine动画来制作核心战斗模块,当然也能用3D模型来制作,这时候我们需要学会使用的工具类就是Unity为我们提供的Animation动画控制类。  当我们将一个模型导入Unity中时,我们可以看到...
  • 本文将介绍Asset Store里几家非常棒的3D模型开发商,Unity开发者可以选购他们的模型素材,相信会让游戏更有质感。 1)Synty Studios Synty Studios擅长开发Lowpoly风格的3D模型与场景,他们共有几十个精品资源...
  • unity3d的渲染顺序

    千次阅读 2018-07-13 00:00:44
    Unity中的渲染顺序自上而下大致分为三层。 最高层为Camera层,可以在Camera的depth那里设置设置之后,图形的渲染顺序就是先绘制depth低的相机下的物体,再绘制depth高的相机下的物体,也就是说,depth高的相机会...
  • unity3d模型旋转和模型导出obj

    千次阅读 2015-01-08 09:56:49
    unity3d中写脚本实现模型的颜色变化和旋转,注意如果模型设置为static是旋转不了的。 功能描述:鼠标落到模型,模型颜色变化,按下鼠标模型开始旋转。 脚本代码如下: using UnityEngine; using System.Collections; ...
  • Unity3D关于模型合并,模型简化

    千次阅读 2019-03-13 11:36:44
    最近要简化一些模型,由于面数太多而且模型子物体也特别多,就找了个插件 SimpleLOD。(asset store可以搜到) 此插件主要功能是 1.合并模型(若顶点数超过unity单个Mesh 65535个顶点限制的话,会自动生成多个子...
  • Unity3d Fbx动作模型的使用

    千次阅读 2018-11-15 14:42:01
    Unity3d Fbx动作模型的使用
1 2 3 4 5 ... 20
收藏数 23,011
精华内容 9,204
关键字:

unity3d 模型设置