【小沐学Unity3d】Unity3d导入3D模型

本文介绍了Unity支持的3D文件格式,包括标准的.fbx、.dae、.dxf和.obj,以及如何从3dsMax和Blender导入对象。重点讲解了从Autodesk3dsMax和Blender导入时的支持内容。此外,文章还详细阐述了在Unity中如何测试和手动调整相机,以及通过脚本控制相机旋转、FOV和移动的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

1、简介

Unity 支持多种标准和专有模型文件格式。
Unity 内部使用 .fbx 文件格式作为其导入链。最佳做法尽可能使用 .fbx 文件格式,并且不应在生产中使用专有文件格式。
在这里插入图片描述

1.1 标准文件格式

Unity 可读取以下标准 3D 文件格式:

  • .fbx
  • .dae (Collada)
  • .dxf
  • .obj.

1.2 专有文件格式

您不应在生产中使用这些文件格式,应尽可能导出为 .fbx 文件格式。但是,有时您可能需要将这些文件作为项目的一部分包含在内。

Unity 可以从以下 3D 建模软件中导入专有文件,然后将其转换为 .fbx 文件:

  • Autodesk Maya
  • Blender
  • Modo
  • Cheetah3D

以下应用程序不使用 .fbx 作为中间格式。Unity 必须先将其转换为 .fbx 文件之后再导入编辑器:

  • SketchUp
  • SpeedTree
  • Autodesk® 3ds Max®

1.3 从 Autodesk® 3ds Max® 导入对象

Unity 通过 FBX 格式导入 Autodesk® 3ds Max® 文件 (.max),支持以下内容:

  • 所有节点以及位置、旋转和缩放;轴心点和名称也会导入
  • 网格以及顶点颜色、法线和一个或多个 UV 集
  • 材质以及漫射纹理和颜色。每个网格多种材质
  • 动画
  • 基于骨骼的动画
  • 变形目标(混合形状)
  • 可见性
    在这里插入图片描述

1.4 从 Blender 导入对象

Unity 通过 FBX 格式导入 Blender (.blend) 文件,支持以下内容:

  • 所有节点以及位置、旋转和缩放;轴心点和名称也会导入
  • 网格以及顶点、多边形、三角形、UV 和法线
  • 骨骼
  • 蒙皮网格
  • 动画
    在这里插入图片描述

2、测试

2.1 新建项目

在这里插入图片描述
进入u3d的项目的场景显示:
在这里插入图片描述

2.2 导入fbx

导入模型资源到u3d里。
在这里插入图片描述
将外面文件夹的模型文件拖拽到assets的根目录里面,如下:
在这里插入图片描述
将assets里的duck模型拖拽到u3d左侧的层次树上。
在这里插入图片描述
此时在中间的三维场景中出现了一只小黄鸭。
在这里插入图片描述
此时是编辑界面,在编辑界面观察模型的鼠标操作如下:
(1) 旋转:按住鼠标右键移动
(2) 平移:按住鼠标中键移动
(3) 缩放:滚动鼠标中键

2.2 手动调整相机

编辑状态下:
在这里插入图片描述
鼠标双击左边的层级树上的主相机对象节点后:
在这里插入图片描述
我们把主相机的位置移动,让它离鸭子近一点。
在这里插入图片描述
点击运行按钮之后:
在这里插入图片描述
比较主相机的画面和运行后的画面,会发现我们看到的鸭子的角度和距离不同,肯定是相机不同。但是我们没有修改相机呀,为啥呢?

原来模型自带了一个固定相机。无论场景的主相机怎么变化,场景运行状态下的视角都不变。

资源界面可以看见这个模型自带相机对象:
在这里插入图片描述
对象层级树上也可以看见这个相机对象:
在这里插入图片描述
我们尝试删掉鸭子模型自带的相机,
在这里插入图片描述
或者取消鸭子自带相机的选择。都可以。
在这里插入图片描述
然后点击运行按钮。
在这里插入图片描述
现在和主相机的画面一样了。
在这里插入图片描述

2.3 脚本控制相机

现在我们回顾上面的内容:
(1)新建项目。
(2)导入模型资源到u3d里。
(3)将外面文件夹的模型文件拖拽到assets的根目录里面
(4)将assets里的duck模型拖拽到u3d左侧的层次树上。
(5)删除鸭子自带的相机对象。

现在我们开始脚本控制相机的相关学习。小沐同学加油。
鼠标左键点击层次树上的主相机节点。
在这里插入图片描述
右边的属性窗口出现主相机的相关参数。
在这里插入图片描述
鼠标点击Add Component按钮,出现下拉框,在里面找到New Script。
鼠标再点击New Script, 出现脚本新建的界面。
添加一个脚本对象名字:MouseOperationCameraRotationFovMove
然后点击下面的按钮“Create And Add”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后属性框上出现了一个脚本组件。Asset资源框也出现了一个脚本文件。
在这里插入图片描述
鼠标双击脚本文件,弹出visual studio的代码编辑界面。
在这里插入图片描述
visual studio的代码编辑界面,会自动生成一部分默认代码,如下:
在这里插入图片描述
将任务文件夹内的相同脚本文件的内容复制进去。
在这里插入图片描述
代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class MouseOperationCameraRotationFovMove : MonoBehaviour
{
    public enum MouseState { 
        None,
        MidMouseBtn,
        LeftMouseBtn
    }
    private MouseState mMouseState = MouseState.None;
    private Camera mCamera;
 
    private void Awake()
    {
        mCamera = GetComponent<Camera>();
        if (mCamera==null)
        {
            Debug.LogError(GetType()+"camera Get Error ……");
        }
 
        GetDefaultFov();
    }
 
    private void LateUpdate()
    {
        CameraRotate();
        CameraFOV();
        CameraMove();
    }
 
    //旋转最大角度
    public int yRotationMinLimit = -20;
    public int yRotationMaxLimit = 80;
    //旋转速度
    public float xRotationSpeed = 250.0f;
    public float yRotationSpeed = 120.0f;
    //旋转角度
    private float xRotation = 0.0f;
    private float yRotation = 0.0f;
 
    /// <summary>
    /// 鼠标移动进行旋转
    /// </summary>
    void CameraRotate()
    {
        if (mMouseState == MouseState.None)
        {
           
            //Input.GetAxis("MouseX")获取鼠标移动的X轴的距离
            xRotation -= Input.GetAxis("Mouse X") * xRotationSpeed * 0.02f;
            yRotation += Input.GetAxis("Mouse Y") * yRotationSpeed * 0.02f;
 
            yRotation = ClampValue(yRotation, yRotationMinLimit, yRotationMaxLimit);//这个函数在结尾
                                                    //欧拉角转化为四元数
            Quaternion rotation = Quaternion.Euler(-yRotation, -xRotation, 0);
            transform.rotation = rotation;
 
        }
    }
 
    //fov 最大最小角度
    public int fovMinLimit = 25;
    public int fovMaxLimit = 75;
    //fov 变化速度
    public float fovSpeed = 50.0f;
    //fov 角度
    private float fov = 0.0f;
 
    void GetDefaultFov() {
        fov = mCamera.fieldOfView;
    }
 
    /// <summary>
    /// 滚轮控制相机视角缩放
    /// </summary>
    public void CameraFOV()
    {
        //获取鼠标滚轮的滑动量
        fov += Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 100 * fovSpeed;
 
        // fov 限制修正
        fov = ClampValue(fov,fovMinLimit, fovMaxLimit);
 
        //改变相机的 fov
        mCamera.fieldOfView = (fov);
    }
 
    float _mouseX = 0;
    float _mouseY = 0;
    public float moveSpeed = 1;
    /// <summary>
    /// 中键控制拖动
    /// </summary>
    public void CameraMove()
    {
        if (Input.GetMouseButton(2))
        {
            _mouseX = Input.GetAxis("Mouse X");
            _mouseY = Input.GetAxis("Mouse Y");
 
            //相机位置的偏移量(Vector3类型,实现原理是:向量的加法)
            Vector3 moveDir = (_mouseX * - transform.right + _mouseY * - transform.forward);
 
            //限制y轴的偏移量
            moveDir.y = 0;
            transform.position += moveDir * 0.5f * moveSpeed;
        }
        else if (Input.GetMouseButtonDown(2))
        {
            mMouseState = MouseState.MidMouseBtn;
            Debug.Log(GetType() + "mMouseState = " + mMouseState.ToString());
        }
        else if (Input.GetMouseButtonUp(2))
        {
            mMouseState = MouseState.None;
            Debug.Log(GetType() + "mMouseState = " + mMouseState.ToString()); 
        }
    }
    //值范围值限定
    float ClampValue(float value, float min, float max)//控制旋转的角度
    {
        if (value < -360)
            value += 360;
        if (value > 360)
            value -= 360;
        return Mathf.Clamp(value, min, max);
    }
}

然后切换到unity3d界面,u3d自动编译刚才的脚本。
鼠标点击unity最上面的运行按钮。
在这里插入图片描述
此时会发现鼠标可以控制相机变化,观察鸭子的不同角度了。
小沐同学的任务学习结束。

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

### 关于面包板电源模块 MB102 的 USB 供电规格及兼容性 #### 1. **MB102 基本功能** 面包板电源模块 MB102 是一种常见的实验工具,主要用于为基于面包板的小型电子项目提供稳定的电压输出。它通常具有两路独立的稳压输出:一路为 5V 和另一路可调电压(一般范围为 3V 至 12V)。这种设计使得它可以满足多种芯片和传感器的不同工作电压需求。 #### 2. **USB 供电方式** MB102 支持通过 USB 接口供电,输入电压通常是标准的 5V DC[^1]。由于其内部集成了 LM7805 稳压器以及可调节电位器控制的直流-直流变换电路,因此即使输入来自电脑或其他低功率 USB 设备,也能稳定地向负载供应电力。不过需要注意的是,如果项目的功耗较高,则可能超出某些 USB 端口的最大电流能力(一般是 500mA),从而引起不稳定现象或者保护机制启动断开连接的情况发生。 #### 3. **兼容性分析** 该型号广泛适用于各种微控制器单元 (MCU),特别是那些像 Wemos D1 R32 这样可以通过杜邦线轻松接入并共享相同逻辑级别的系统[^2]。另外,在提到 Arduino Uno 板时也表明了良好的互操作性,因为两者均采用相似的标准接口定义与电气特性参数设置[^4]: - 对于需要 3.3V 工作环境下的组件来说,只需调整好对应跳线帽位置即可实现精准匹配; - 当涉及到更多外围扩展应用场合下,例如带有多重模拟信号采集任务的情形里,利用 MB102 提供干净无干扰的基础能源供给就显得尤为重要了[^3]。 综上所述,对于打算构建以单片机为核心的原型验证平台而言,选用具备良好声誉记录且易于获取配件支持服务链路上下游资源丰富的品牌产品——如这里讨论过的这款特定类型的配电装置不失为明智之举之一。 ```python # 示例 Python 代码展示如何检测硬件状态 import machine pin = machine.Pin(2, machine.Pin.IN) if pin.value() == 1: print("Power supply is stable.") else: print("Check your connections and power source.") ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值