unity3d的入门教程_3D网课

2022-09-22 09:33:11 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

参考链接:《Unity3D初级课程之新手入门》

文章目录
  • 第一课:课程介绍与Unity3D环境搭建
  • 第二课:游戏场景基本操作
  • 第三课:游戏场景制作3D模型
  • 第四课:3D模型美化之材质球
  • 第五课:3D模型重用之预制体
  • 第六课:基本组件之摄像机
  • 第七课:基本组件之灯光
  • 第八课:组件与脚本
  • 第九课:鼠标键盘输入
  • 第十课:使用变换组件移动游戏物体
  • 第 11课:物理组件之刚体
  • 第十二课:物理组件之碰撞体
  • 第 13 课:刚体常用方法介绍
  • 第 14 课:刚体碰撞事件监测与处理
  • 第 15 课:刚体触发事件监测与处理
  • 第 16 课:网格组件之网格过滤器和渲染器
  • 第 17 课:疯狂教室案例开发[上]
  • 第 18 课:疯狂教室案例开发[下]
  • 第19课:PC端游戏打包与发布

第一课:课程介绍与Unity3D环境搭建

一、Unity下载与安装 参考博客:Unity Hub、unity、PlasticSCM安装

第二课:游戏场景基本操作

一、新建项目与新建场景

  • 新建项目 项目:每一个游戏都是独立的项目。 打开 Unity Hub,点击项目面板——>新项目——>选择模板和本地存储位置——>创建项目。

  • 项目存储结构 项目文件夹 |—-Assets:资源文件夹,保存游戏中所有的资源。 |—-Library:库文件夹,保存当前项目需要的库文件。 |—-ProjectSettings:项目设置文件夹,保存项目的设置信息。 |—-Temp:临时文件夹,保存项目的临时数据。

  • 新建场景 场景:指戏剧、电影中的场面,泛指情景。 ①File–>New Scene(Ctrl N)新建场景; ②File–>Save Scene(Ctrl S)保存场景

  • 两个面板 Scene 面板:场景面板,用于预览当前的场景。 Project 面板:项目面板,用于管理当前项目中所有的资源。 Assets:对应我们项目文件夹中的 Assets 文件夹

注意: 为了更好的管理我们的游戏资源,我们会在 Assets 中建立不同的文件夹,用来存储不同的游戏资源。“Scenes”文件夹,用来存储游戏场景。 Assets 中创建文件夹步骤: Assets 上点击右键,会弹出菜单–>Create–>Folder,然后改名

二、基本 3D 物体的创建

  • Hierachy 面板 Hierachy:层级面板,用于显示当前场景中有哪些资源。在这个面板中可以往 场景中添加资源。

  • 创建基本 3D 物体 Hierachy 面板右键–>3D Object–>Cube
  • 常用的 5 中 3D 物体: Cube(立方体),Sphere [sfɪr](球体),Capsule [ˈkæpsul](胶囊体), Cylinder [ˈsɪləndɚ](圆柱体),Plane [plen](平面)
  • 在层级面板中,双击某个物体,可以在 Scene 面板(视图)中聚焦到该物体

三、Scene 面板基础操作

  • 工具栏功能演示 手型:平移场景的观察角度 箭头:可以移动物体的位置(箭头:固定方向移动; 面:平行于该面移动) 旋转:可以旋转物体 缩放:可以缩放物体

  • 鼠标功能演示 鼠标左键:选中场景中的物体 鼠标中键:按下–>平移场景的观察角度;滚动–>拉远拉近 鼠标右键:旋转场景的观察角度

  • 鼠标与键盘组合操作演示 Alt 鼠标左键:旋转观察角度 Alt 鼠标右键:拉远拉近

第三课:游戏场景制作3D模型

一、尺寸与方向

  • 尺寸 以 Cube 作为参照,Cube 是长宽高都为 1 米的参照物。

  • 方向-世界坐标系 X(红色):右边 Y(绿色):上边 Z(蓝色):前边 世界坐标系可以理解为现实生活中的方向,东南西北上下。在我们的场景中世界坐标系是不变的

  • 方向-物体(自身)坐标系 X(红色):右边 Y(绿色):上边 Z(蓝色):前边 物体(自身)坐标系是以物体自身为参照,确定自身的右边,上边,前边。 可以通过工具栏上的“Local” “Global”来切换物体身上的坐标系显示效果。

  • 世界坐标观察模式 Persp:透视模式,近大远小。 ISO:正交模式,远近一样大。

二、3D 模型制作

  • 演示模型制作 桌子模型 椅子模型

  • 快捷键 Ctrl D:复制物体 F:快速聚焦某个物体 工具栏对应:Q W E R

第四课:3D模型美化之材质球

一、材质球与贴图

  • 材质球与贴图介绍
  1. 材质球:Material,材质:物体的质地,物体看起来是什么做的。
  2. 贴图:Texture,就是“普通的图片”,用于材质球的显示。

  • 管理材质球与贴图 在 Assets 中建立“Materials”文件夹,用于管理材质球。 在 Assets 中建立“Textures”文件夹,用于管理贴图。

二、创建与使用材质球

  • 创建材质球 在 Assets 中的 Materials 文件夹上,右键弹出菜单->Create->Material,完成材质球的创建。

材质球文件的后缀是“.mat”。


  • Inspector 面板 Inspector:检视面板(属性面板)。用于查看和编辑游戏物体和项目资源的具体信息。

  • 编辑材质球 ①鼠标选中需要编辑的材质球物体; ②点击“Albedo”前的圆点,在弹出的“贴图选择界面”选择需要的材质; Albedo:[æl’bɪdəʊ] 纹理贴图(漫反射贴图)

  • 使用材质球 ①将材质球拖拽到 Hierarchy 面板上相应的物体上; ②将材质球拖拽到 Scene 面板上相应的物

三、shader 简介

  • Shader:着色器。 通过着色器来编辑材质球的效果。

会写 Shader 的人,才是真正的高手

第五课:3D模型重用之预制体

一、父子关系

  • 空物体 Hierarchy 面板右键–>Create Empty 创建一个空物体。 空物体:好比就是电脑上的文件夹,可以用于管理资源。

  • 父子关系 原则:移动父亲,儿子会跟着移动,就像移动电脑上的一个文件夹,文件夹中的 资源会跟着一块移动,是一样的道理。

在 Hierarchy 面板中,任意两个物体都可以建立父子关系。

二、预制体

  • 预制体简介 预制体:Prefab,预先准备好的物体,可以重复使用和利用。

  • 管理预制体 在 Assets 中建立“Prefabs”文件夹,用于管理预制体。

  • 创建预制体 直接将 Hierarchy 面板中的游戏物体拖拽到 Project 面板的 Assets 中,即可创建一个预制体。

预制体文件的后缀是“.prefab”。


  • 使用预制体 ①将预制体直接拖拽到 Hierarchy 面板; ②将预制体直接拖拽到 Scene 面板;

  • 预制体与非预制体的区别 ①非预制体的颜色是白色,预制体颜色是蓝色; ②在 Inspector 面板,非预制体是图标颜色是“红绿蓝”三色的,预制体的图标是蓝色的。 ③在 Inspector 面板,预制体比非预制体多了一个“Prefab 选项”。

  • 预制体的好处 编辑其中的一个,“Apply”一下,所有的全部改变

第六课:基本组件之摄像机

一、场景美化

  • 给场景添加地板 ①新建“plane”物体作为地板; ②创建地板使用的材质球; ③编辑地板材质球,设置“Tiling”选项中的 x,y 的值,使地板进行分块显示。

Tiling:[ˈtaɪlɪŋ] 贴瓷砖,使贴图分块显示。


二、Game 视图 Game:游戏视图,游戏的预览(运行)窗口。 当点击“播放”按钮,视图会自动切换到游戏视图进行预览;再一次的点击“播放”按钮,就可以退出游戏的运行状态,回归到编辑(Scene)视图。

注意:游戏在运行状态时,做的任何操作都不会被保留。


三、摄像机常用操作

  • 摄像机的简介与作用 简介: 摄像机(Camera)摄像机就是我们眼睛,用于观察我们的游戏世界。眼睛有一个观察区间,叫做“视锥体”。所有在“视锥体”范围内的物体,我们都可以看到。 作用: 在合适的位置和角度观察我们的游戏世界。电影中的画面是由摄像机的角度和位置决定的;我们游戏中观看到的画面也是由摄像机的角度和位置决定的。

  • 摄像机基本操作 ①:在 Hierarchy 面板上选中摄像机,Scene 视图会出现预览窗口。 ②:根据轴向移动摄像机的位置,旋转摄像机的角度。 ③:GameObject–>Align With View(Ctrl Shift F)对其视图。让摄像机对齐到当前视图,使 Scene 与 Game 中的观看角度和位置一致。 ④:创建摄像机:Hierarchy 面板右键–>Camera

四、摄像机相关属性

  • Clear Flags[清除标记] Skybox:天空盒 Solid Color:固定颜色(纯色)

  • Background[背景颜色] 当 Clear Flags 为 Solid Color 时,场景的背景颜色。

  • Projection[投影] Perspective:透视模式,3D 游戏使用。 Orthographic:正交模式,2D 游戏使用。

  • Clipping Planes[切割面] Near:近平面,摄像机最近能看到的东西。 Far:远平面,摄像机最远能看到的东西

第七课:基本组件之灯光

一、灯光简介

  • 灯光: light,用于照亮我们的游戏世界。
  • 附加作用: 烘托场景的氛围;使场景中产生阴影,增加真实感和立体感。

  • 在我们创建一个新的 Scene 场景时,场景中会默认带有两个游戏物体:一个是摄像机,一个是灯光。
  • 隐藏与显示游戏物体: 物体 Inspector 面板上“图标”右侧的复选框

二、方向光

  • 简介 方向光: Directional Light,用于模拟太阳,模拟自然光。 方向光任何地方都能照射到,就和太阳一样,但是要注意照射方向。 创建方向光: Hierarchy 面板右键–>Light–>Directional Light

  • 属性 Type[类型] 用于切换灯光的类型。 Color[颜色] 设置灯光的颜色。 Intensity[强度] 设置灯光的照射强度。 Shadow Type[阴影类型] 设置方向光照射到的物体显示的投影效果。 1.No Shadows:无阴影 2.Hard Shadows:硬阴影 3.Soft Shadows:软阴影

三、点光源

  • 简介 点光源: Point Light,用于模拟电灯泡的照射效果。 创建点光源: Hierarchy 面板右键–>Light–>Point Light

  • 属性 Range[范围] 设置点光源的照射范围,一个球状范围。

四、聚光灯

  • 简介 聚光灯: Spot Light,用于模拟聚光灯照射效果。 创建聚光灯: Hierarchy 面板右键–>Light–>Spot Light

  • 属性 Spot Angle[聚光角] 设置聚光灯的照射角度

第八课:组件与脚本

一、Transform组件

  • 组件 组件: Component,游戏物体的组成零件。

  1. Unity3D 就是一款“组件式”游戏开发引擎,使用各种各样的组件拼装出我们游戏物体,最终拼接出一款完整的游戏。
  2. Unity3D 这款引擎提供了很多种类的组件,我们后期就需要学习这些组件的使用和特性,以及它们能实现的功能和效果。
  3. 中国古代理论,金木水火土是组成世界万物最基本的五种元素,在 Unity3D 中,各种各样的组件,就是组成我们游戏世界最基本的元素。

  • Transform 组件 Transform: 变换。所有的游戏物体都具备的一个组件,也是最最基础的一个组件,用于存储游戏物体的基本信息。

Position:位置; Rotation:旋转; Scale:缩放


二、C#脚本

  • 何为脚本? 脚本: Scrpit,用于控制游戏的逻辑。

Unity3D 5.x 后,只支持两种类型的脚本,C# 与 Javascript。国内开发主流的还是使用 C#语言。


  • .管理脚本 在 Assets 文件夹中创建“Scripts”文件夹,管理脚本资源。

  • 创建脚本
  1. 在 Assets 文件夹上右键–>Create–>C# Script,马上改名。
  2. C# 脚本文件的后缀是“.cs”。
  3. 双击脚本文件,就可以调用出“代码编辑器”进行代码的显示。

  • 脚本代码简介
  1. Start()方法: 当游戏运行起来,就会马上执行,且只执行一次。
  2. Update()方法: 循环调用,每帧调用一次。一秒钟大概执行 60 次。
  3. 帧: 我们的游戏画面是在不停的刷新的,每刷新一次,就是一帧。
  4. 输出调试: Debug.Log ();

Start()和 Update()方法都是 Unity3D 内部的“事件方法”,不需要我 们人工调用,系统会自动调用和管理这些“事件方法”。


  • 使用脚本 1.直接将脚本拖拽到 Hierarchy 面板上物体身上; 2.直接将脚本游戏物体的 Inspector 面板上;

运行游戏,脚本就会执行。


  • Console 面板
  1. Console: 控制台。用于输出显示游戏运行过程中的调试信息。
  2. 功能按钮: Clear: 清除功能,清除控制台中的信息; Collapase: 折叠功能,将相同的内容合并到一条显示,更新后面的数字; Clear on Play: 运行时清除之前的内容

第九课:鼠标键盘输入

一、获取键盘输入

代码语言:javascript复制
Input.GetKey(); //按下某键后,持续返回 true
Input.GetKeyDown(); //按下某键的一瞬间,返回 true
Input.GetKeyUp(); //抬起某键的一瞬间,返回 true


返回值:bool 类型
参数:KeyCode 枚举(Enum)
KeyCode:键码,保存了物理键盘按键“索引码”。

更多关于input接口可以看官方手册的脚本API:点这


二、获取鼠标输入

代码语言:javascript复制
Input.GetMouseButton(); //按下某键后,持续返回 true
Input.GetMouseButtonDown(); //按下某键的一瞬间,返回 true
Input.GetMouseButtonUp(); //抬起某键的一瞬间,返回 true


返回值:bool 类型
参数:鼠标按键索引值,0->左键 , 1->右键 , 2->中

第十课:使用变换组件移动游戏物体

一、变换组件移动物体

  • 相关方法
代码语言:javascript复制
gameObject.GetComponent<T>()//获取相应组件的引用。
查找当前游戏物体身上的某个组件,然后保存它的引用。

Transform.Translate(Vector3, Space)://移动物体的位置。
游戏物体往某个方向移动;以自身坐标系或世界坐标系

  • 相关参数
  1. Vector3[struct]: 三维向量。 向量,可以表示一个方向,也可以表示一个位置。
  2. Space[enum]: 空间。 Space.Self:表示物体自身的坐标系。 Space.World:表示物体所在的世界坐标系。

备注:脚本是游戏物体的一部分,一般控制谁的脚本就挂载在谁的身上。

  • 使用键盘上的“W,A,S,D”来控制游戏物体的前后左右移动

第 11课:物理组件之刚体

一、变换组件运动特点

  • 使用 Transform.Translate()方法移动物体的位置,特点如下: ①移动的物体会“穿透”场景中其他的物体模型; ②移动的物体不会受重力影响(到达场景边缘外,不会下落)。

二、刚体组件简介

  • 刚体简介 刚体: Rigidbody,属于物理类组件。 作用: 添加了刚体组件的游戏物体,就有了重力,就会做自由落体运动。也就意味着可以像现实中的物体一样运动。

  • 给物体添加刚体组件 选中游戏物体–>菜单 Component–>Physics–>Rigidbody

三、 刚体组件属性

  1. Mass[质量] 设置物体的质量,也就是重量。质量单位是 KG。
  2. Drag[阻力] 空气阻力,0 表示无阻力,值很大时物体会停止运动。
  3. Angular Drag[角阻力] 受到扭曲力时的空气阻力,0 表示无阻力,值很大时物体会停止运动。
  4. Use Gravity[使用重力] 是否使用重力。

四、使用刚体移动物体

  1. 相关方法 Rigidbody.MovePosition(Vector3): 使用刚体移动物体的位置。 使用刚体移动物体,物体是根据世界坐标系的方向移动的。 使用刚体移动物体,物体会触发物理相关的事件。
  2. 参数 MovePosition 中的 Vector3 要使用“当前位置” 方向 的方式。 Transform.Position:属性 当前物体的位置。
  3. 特点 使用刚体移动物体,特点如下: ①会于场景中的模型物体发生碰撞; ②会受重力影响(到达场景边缘外,会下落)

第十二课:物理组件之碰撞体

一、碰撞体简介

  • . 碰撞体
  1. 使用刚体移动的物体,与场景中其他的物体相碰撞:其实是碰撞的目标物体的“碰撞体”组件,也就是 Collider。
  2. 另外和目标物体碰撞的,是我们移动的物体的自身的“碰撞体”组件。
  3. 碰撞体可以理解为我们的模型的“外骨骼”。
  4. 模型只要加了刚体,就必须要加碰撞体,否则没有意义。

二、Box Collider

  • 简介 盒子碰撞体,形状是立方体形,用于包裹类似“立方体”的模型,比如:盒子,箱子,门,房子等。
  • 组件属性 Center[中心点] 设置 Box Collider 的中心点。 Size[大小] 设置 Box Collider 的大小。

三、Sphere Collider

  • 简介 球形碰撞体,形状是球形,用于包裹类似“球形”的模型。
  • 组件属性 Radius[半径] 设置 Sphere Collider 的大小。

四、Capsule Collider

  • 简介 胶囊碰撞体,形状是胶囊状,用于包裹“胶囊形”的模型。
  • 组件属性 Height[高度] 设置 Capsule Collider 的高度。 Direction[方向] 设置 Capsule Collider 的高度方向(轴向)。

五、.Mesh Collider

  • 简介 网格碰撞体,用于包裹复杂结构的模型。
  • 组件属性 Mesh[网格] 根据指定的网格,生成碰撞体

第 13 课:刚体常用方法介绍

一、AddForce()

  1. 作用 给刚体添加一个力,让刚体按“世界坐标系”进行运动。
  2. 代码
代码语言:javascript复制
Rigidbody.AddForce(Vector3,ForceMode);
//Vector3:力的方向和大小;
//ForceMode:力的模式[enum 类型]。
  1. ForceMode 参数 类型为枚举类型,以什么样的方式添加力给刚体。

枚举值说明

  1. Acceleration:[əkˌseləˈreɪʃn](加速度);
  2. Force:(力)这种模式通常用于设置真实的物理;
  3. Impulse:(冲击力)这种模式通常用于瞬间发生的力;
  4. VelocityChange:(速度的变化);

二、AddRelativeForce()

  1. 作用 给刚体添加一个力,让刚体按“自身坐标系”进行运动。
  2. 代码
代码语言:javascript复制
Rigidbody.AddRelativeForce(Vector3,ForceMode);
//Vector3:力的方向和大小;
//ForceMode:力的模式[enum 类型]。

三、FixedUpdate() 固定更新方法。

  • 所有和物理相关的操作,代码都要写在 FixedUpdate()方法体内。
  • 固定更新的时间间隔是 0.02 秒,1 秒执行 50 次。
  • Edit–>Project Settings–>Time 面板中的 Fixed Timestep 参数设置。

  • Update()方法是每帧执行一次。
  • 画面每渲染完一次,就是一帧,每帧的时间是不固定的。
  • 在 Update()方法中执行物理操作,会出现卡顿的情况

第 14 课:刚体碰撞事件监测与处理

一、碰撞事件简介

  1. 何为碰撞事件? 当一个用刚体控制的物体与另外一个物体碰撞时,就会触发碰撞事件。

注:目标物体必须带有 Collider 组件。


二、碰撞事件监测方法

  1. OnCollisionEnter(Collision) 当碰撞开始时调用,只会调用该方法一次。
  2. OnCollisionExit(Collision) 当碰撞结束时调用,只会调用该方法一次。 3.OnCollisionStay(Collision) 当碰撞进行中时,会持续调用该方法。
  3. Collision 参数 Collision类。作用:用于传递碰撞信息。 Collision.gameObject 属性,与当前物体碰撞的物体的引用。 gameObject.name 属性,当前物体的名

第 15 课:刚体触发事件监测与处理

一、触发事件简介

  • 触发器
  1. 将碰撞体组件属性面板上的“Is Trigger”选项选中,当前的游戏物体的碰撞体就变成了触发器。
  2. 移动的刚体物体会穿透碰撞体勾选了“Is Trigger”的物体。
  • 触发事件
  1. 当一个用刚体控制的物体进入到另外一个物体的触发器范围内,就是触发事件。
  2. 触发用途:不与目标物体发生直接的碰撞(接触),而是只要进入目标物体的“触发范围”就能执行某些特定操作。

二、触发事件监测方法

  • OnTriggerEnter(Collider) 当进入触发范围时开始时调用,只会调用该方法一次。
  • OnTriggerExit(Collider) 当离开触发范围时开始调用,只会调用该方法一次。
  • OnTriggerStay(Collider) 在触发范围内,会持续调用该方法。
  • Collider 参数 Collider 类。作用:用于传递触发信息。 Collider.gameObject 属性,进入触发范围内的目标物体的引用。 gameObject.name 属性,当前物体的名

第 16 课:网格组件之网格过滤器和渲染器

一、网格过滤器组件

  • 简介
  1. 网格过滤器:Mesh Filter
  2. 该组件只有一个“Mesh”属性,用于设置当前游戏物体使用哪个模型进行展示。
  3. Mesh:网格,也就是模型。

二、网格渲染器组件

  • 简介
  1. 网格渲染器:Mesh Renderer
  2. 该组件用于“渲染”显示模型。如果没有该组件,模型就不会显示。
  • 属性
  1. Cast Shadows [投射阴影]
  2. On:开启阴影显示
  3. Off:关闭阴影显示
  4. Receive Shadows [接收阴影] 选中就是接收 不选中就是不接收
  5. Materials [材质球] 用于设置用哪个材质球渲染当前的模型(Mesh)。 我们拖拽到游戏物体身上的材质球,其实就是赋予给了这个组件的这个属性上

第 17 课:疯狂教室案例开发[上]

一、模型旋转实现开门效果

  • 模型中心点 模型身上的坐标轴的中心点,也就是我们模型的中心点。 模型的的位置,旋转,缩放都是相对于模型的中心点来进行变化的。
  • 改变模型中心点 创建一个空物体,创建父子关系,通过父物体来控制子物体。 也就间接的改变了模型的中心点。
  • 中心点工具 Center: 当选中两个模型的时候,设置为“Center”,模型组的中心点就在 两个模型的中间中心位置。 Pivot: 当选中两个模型的时候,设置为“Pivot”,模型组的中心点就在后选 中的模型的中心点位置。
  • 使用键盘按键实现开关门 使用 Transform.Rotate(Vector3,float) 旋转模型: Vector3: 沿某个轴向旋转 Float: 旋转的度数

二、触发器实现开关门

  • 添加触发器 ① 创建一个空物体,添加“Box Collider”组件,并设置大小和中心点; ② 将“Box Collider”勾选“Is Trigger”变成触发器;
  • 代码实现触发器开关门 OnTriggerEnter() OnTriggerExit()
  • 查找游戏物体 GameObject.Find(string):[静态方法] 通过名字查找游戏物体,(String 游戏物体的名)

第 18 课:疯狂教室案例开发[下]

一、通过 Tag 标签查找物体

  1. Tag 简介 Tag 标签,就是一个标签。标签可以起到标识,区分的作用。同一类的模型,我们可以根据需要给他们设置成统一的标签。
  2. 给模型添加 Tag 标签 选中一个模型,在模型的 Inspector 面板上的顶部位置,设置 Tag 选项为一个具体的标签。 如果说引擎提供的标签没有自己想要的标签,可以自己手动添加新标签。
  3. 通过 Tag 标签查找 N 个物体 GameObject.FindGameObjectsWithTag(string):[静态方法] 通过特定的标签,查找到所有“贴有”该标签的游戏物体,返回一个数组。 String:标签名
  4. for 循环输出模型信息 通过 for 循环遍历 FindGameObjectsWithTag()方法返回的数组,输出 游戏物体的信息。
  5. 通过键盘按键实现桌椅跳动 按下某键,桌椅全部上移 2 米; 抬起某键,桌椅全部下移 2 米;

第19课:PC端游戏打包与发布

一、游戏打包发布简介

  • 简介 现在的项目文件必须在 Unity 引擎中才能运行,通过“打包发布”可以将工程文件转换成独立的“游戏文件”,就可以脱离 Unity 引擎直接在电脑上运行。打包好的“游戏文件”就可以到处发布传播了。
  • Unity 发布游戏 Unity 的最大的一个特点就是“跨平台运行”,一处开发多处运行。常用的发布平台:Windows,Android,IOS,Mac,Web…

二、Unity 发布 PC 版游戏

  1. Build Settings[生成设置] File–>Build Settings 弹出项目生成设置面板。 ① 选择要发布到的平台; ② 添加要发布的场景;
  2. Player Settings[详细设置] Company Name:公司名称 Product Name:产品名称(游戏名称) Default Icon:默认图标
  3. 成品文件介绍 一个 exe 可执行文件,一个 Data 数据文件夹,两个缺一不可以,且不可分割

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169331.html原文链接:https://javaforall.cn

0 人点赞