2015-09-17 19:25:35 ynnmnm 阅读数 4346
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3D导入FBX文件,动画名字一般默认是“Take 001”。如何修改呢?有两个方法:

  1. 按照Unity3D的FBX文件命名规则修改FBX文件名,角色名@动作名.FBX。比如boss-attack.fbx,动作名是Take 001,文件名修改为boss@attack.fbx,动作名就自动改为attack了。

  2. 在Unity3D中点选FBX文件,在Inspector窗口点Animations Tab。在最下面可以看到动画索引区域,这里有一个文本区域是动画名,点选可以修改。

2017-08-24 10:27:45 beihuanlihe130 阅读数 15748
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

当我们将模型导入到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();
    }
}
2014-09-04 23:27:36 fangna_iot 阅读数 3779
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

unity中的默认单位为1米,当导入fbx文件时,稍有不慎尺寸会发生意料之外,理论之中的改变,这里只简单介绍最简的方法:

1.3dmax生成fbx文件时

(1)设置3dmax默认单位为米

自定义->单位设置中,选择公制:米


(2)建好模型后,导出->导出到外部文件格式,输出单位改为厘米

2.3dunity导入fbx文件,直接把fbx文件拖到Assets中,再把Assects中的场景拖至scene窗口中即可。

一切做好之后,unity中场景的尺寸即为原始尺寸

2017-09-13 23:22:11 yongh701 阅读数 3955
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

3dsmax做的含FBX动画模型导入进Unity3D之后总需要对其缩放Scale调整一番,毕竟模型是在3dsmax中做出来的,不可能和Unity3D中的场景完全匹配。

我们自然而言地会对模型的Scale属性进行调节,以放大或者缩小从而适应当前场景的大小。于是,问题就来了,在播放动画的时候,部分模型,会让我们惊讶地发现,明明我的Scale调好了,但在动画播放的时候,又回到原来大小了。如下图所示,就是这种坑爹的现象:


在运行的过程中,你会发现,自己调好的Scale莫名其妙地变回(1,1,1)。


于是,你就开始怀疑是不是这个模型本身的动画有控制大小的东西,但经历一番调查之后,你发现,有时候,部分模型就是没有控制大小,但它就是这么坑爹。如下图所示,这个在3dsmax中生成的简单动画模型,各个关键帧完全只是对其Rotation进行修改,关于Scale并没有作任何动画。


那么关于问题,其实就是,在Unity3D你并不应该用Scale来调节这些FBX模型的大小,至少如果你发现你的FBX模型出现这种坑爹情况,你应该在这个模型的预设中,Model属性Meshes下的Scale Factor调整大小,默认的基数是0.01,如果你要放大10倍,设置成0.1就好了。


这样在播放动画的时候,就与你看得时候是一致的,不会出现上述的坑爹问题了。带上transform.Translate()等Unity3D本身就有的移动行为,配合animation.Play()也没事!


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