杰瑞科技汇

unity3d中文入门教程

Unity 3D 中文入门完整指南

第一部分:准备工作与基础知识

第一章:初识 Unity

  1. 什么是 Unity?

    unity3d中文入门教程-图1
    (图片来源网络,侵删)
    • Unity 是一款由 Unity Technologies 开发的跨平台游戏引擎,你可以用它来创建 2D、3D、VR 和 AR 游戏及应用程序。
    • 核心优势:强大的编辑器、庞大的资源商店、活跃的社区、支持发布到几乎所有主流平台(Windows, macOS, iOS, Android, PlayStation, Xbox, Switch 等)。
  2. 安装 Unity Hub 和 Unity Editor

    • Unity Hub:一个管理工具,用于安装、管理和切换不同版本的 Unity 编辑器。
    • Unity Editor:实际的开发环境,也就是你用来“做游戏”的软件。
    • 安装步骤
      1. 访问 Unity 官网:https://unity.com/cn
      2. 下载并安装 Unity Hub
      3. 打开 Unity Hub,点击“安装”选项卡,然后点击“安装编辑器”。
      4. 在安装界面,你可以选择一个 LTS (Long-Term Support) 版本,3.x,LTS 版本更稳定,推荐初学者使用。
      5. 在“模块”选择中,必须勾选 “Built-in render pipeline”(内置渲染管线)和 “Windows Build Support” (Windows 构建支持,用于打包 PC 版游戏)。
      6. 点击“下一步”并完成安装。
  3. 创建你的第一个项目

    • 打开 Unity Hub,点击“新建”项目。
    • 选择 3D (Core) 模板,给项目起一个名字(MyFirstGame),选择一个存放位置,然后点击“创建”。
    • 等待 Unity Editor 加载完成,你将看到熟悉的默认场景。

第二章:Unity 编辑器核心界面详解

当你创建新项目后,会看到一个包含多个窗口的界面,这些是 Unity 的核心组成部分。

  1. Scene (场景) 视图

    unity3d中文入门教程-图2
    (图片来源网络,侵删)
    • 作用:这是你的“工作台”,你可以在这里摆放、移动、旋转和缩放游戏中的所有物体(如角色、地形、灯光等)。
    • 操作
      • 鼠标左键拖动:旋转视角。
      • 鼠标右键拖动:平移视角。
      • 鼠标滚轮:缩放视角。
      • F 键:将选中的物体聚焦到视图中央。
  2. Game (游戏) 视图

    • 作用:这是你“玩游戏”的窗口,它显示的是最终玩家在游戏中看到的画面,你可以在这里测试你的游戏。
    • 控制:点击左上角的播放按钮(▶️)开始运行游戏,再次点击停止。
  3. Hierarchy (层级) 面板

    • 作用:一个场景中所有物体的“家谱”或“列表”,场景中的每一个物体(摄像机、灯光、角色等)都会在这里显示为一个条目。
    • 理解:物体的层级关系决定了它们的组织结构,比如一个“玩家”物体下可以有一个“手臂”子物体。
  4. Project (项目) 面板

    • 作用:你的“资源管理器”,这里存放着构成你游戏的所有文件,包括:
      • 脚本:用 C# 编写的代码文件(.cs)。
      • 预制体:可重复使用的游戏物体模板(.prefab)。
      • 材质:定义物体表面外观的文件(.mat)。
      • 模型:3D 模型文件(.fbx, .obj)。
      • 贴图:图片文件(.jpg, .png)。
      • 场景:游戏的不同关卡(.unity)。
    • 注意:不要在 Windows 资源管理器中直接移动或删除这里的文件,请在 Unity 内部进行操作。
  5. Inspector (检查器) 面板

    unity3d中文入门教程-图3
    (图片来源网络,侵删)
    • 作用:物体的“属性表”,当选中 Hierarchy 或 Project 面板中的任何一个物体时,Inspector 会显示该物体的所有组件和属性。
    • 理解:这是你修改物体参数的地方,你可以改变一个立方体的颜色、大小,或者为它添加新的功能(脚本)。
  6. 其他重要面板

    • Console (控制台):显示编译错误、警告和调试信息,写代码时,这里是你的好朋友。
    • Package Manager (包管理器):用于管理 Unity 的官方和第三方插件。

第二部分:核心概念与基础操作

第三章:游戏对象 与组件

这是 Unity 的核心思想,一定要理解!

  • 游戏对象:可以理解为“东西”,任何你能在场景中看到或与之交互的东西都是一个 GameObject,它本身什么也做不了,只是一个“空壳”。
  • 组件:是赋予游戏对象“功能”和“数据”的积木,每个组件都负责一块特定的功能。
    • Transform (变换)每个 GameObject 都自带的最基本组件,它决定了物体的位置、旋转和缩放。
    • Mesh Filter (网格过滤器):决定了物体的“形状”(比如立方体、球体)。
    • Mesh Renderer (网格渲染器):决定了物体的“外观”,比如颜色、贴图。
    • Camera (摄像机):让玩家能看到世界的“眼睛”。
    • Light (灯光):照亮场景的光源。
    • Script (脚本):你写的 C# 代码,是让游戏“活”起来的关键。

关系GameObject (容器) + Components (功能模块) = 一个有功能的游戏实体。

第四章:你的第一个 C# 脚本

让物体动起来!

  1. 创建脚本

    • 在 Project 面板中,右键点击 -> Create -> C# Script。
    • 将其命名为 MoveCube
  2. 编写代码

    • 双击 MoveCube.cs 文件,它会自动用 Visual Studio (或你安装的其他代码编辑器) 打开。
    • 删除默认的 Start()Update() 函数之间的所有内容,输入以下代码:
    using UnityEngine;
    public class MoveCube : MonoBehaviour
    {
        // Update is called once per frame
        void Update()
        {
            // 获取当前物体的 Transform 组件
            // 每一帧,将物体在 X 轴上移动 0.01 个单位
            transform.Translate(Vector3.right * 0.01f);
        }
    }
    • 代码解释
      • using UnityEngine;:引入 Unity 的核心库。
      • public class MoveCube : MonoBehaviour:定义一个名为 MoveCube 的类,它继承自 MonoBehaviour,所有 Unity 脚本都必须继承自 MonoBehaviour 才能附加到游戏对象上。
      • void Update():这是一个 Unity 的“魔法函数”,它会在每一帧被自动调用,非常适合处理持续性的动作,比如移动、检测输入等。
      • transform.Translate(...):调用物体的 Transform 组件的 Translate 方法,使其移动。Vector3.right 代表 X 轴正方向。
  3. 附加脚本到物体

    • 回到 Unity 编辑器。
    • 从 Project 面板中,将 MoveCube.cs 脚本拖拽到 Hierarchy 面板中的 Cube 物体上。
    • 选中 Cube 物体,在 Inspector 面板中,你会看到它现在多了一个 Move Cube (Script) 组件。
  4. 运行游戏

    • 点击顶部的播放按钮(▶️)。
    • 你会发现场景中的立方体开始向右移动了!点击停止按钮(⏹️)停止游戏。

第三部分:实战小项目:会跳跃的立方体

现在我们来做一个更完整的交互:让立方体响应键盘按键跳跃。

第五章:获取用户输入

  1. 修改脚本

    • 打开 MoveCube.cs 脚本,修改 Update() 函数如下:
    void Update()
    {
        // 获取水平轴的输入值 (A/D 或 左/右箭头)
        float moveHorizontal = Input.GetAxis("Horizontal");
        // 获取垂直轴的输入值 (W/S 或 上/下箭头)
        float moveVertical = Input.GetAxis("Vertical");
        // 创建一个移动向量
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        // 应用移动
        transform.Translate(movement * speed * Time.deltaTime);
    }
    • 问题speed 是什么?我们还没有定义它。
  2. 添加公共变量

    • MoveCube 类的开头(Update 函数外面),添加以下代码:
    public class MoveCube : MonoBehaviour
    {
        // 在 Inspector 面板中可调节的变量
        public float speed = 5.0f;
        void Update()
        {
            // ... (Update 函数内容不变)
        }
    }
    • 解释
      • public 关键字使得这个变量可以在 Unity 的 Inspector 面板中被修改。
      • float speed = 5.0f; 定义了一个浮点数变量 speed,并赋初值为 5.0。
      • 回到 Unity,选中 Cube,你会发现在 Inspector 面板的 Move Cube 组件下,多了一个 Speed 字段,你可以在这里实时调整移动速度。
  3. 添加跳跃功能

    • 我们还需要一个变量来控制跳跃力度,跳跃不是持续的,所以应该用 Update 检测按键,用另一个函数 StartFixedUpdate 来执行跳跃。
    • 完整的 MoveCube.cs 脚本如下:
    using UnityEngine;
    public class MoveCube : MonoBehaviour
    {
        public float speed = 5.0f;
        public float jumpForce = 7.0f;
        private bool isGrounded = false; // 是否在地面上
        private Rigidbody rb; // 刚体组件的引用
        // Start is called before the first frame update
        void Start()
        {
            // 获取物体上的 Rigidbody 组件
            rb = GetComponent<Rigidbody>();
        }
        // Update is called once per frame
        void Update()
        {
            float moveHorizontal = Input.GetAxis("Horizontal");
            float moveVertical = Input.GetAxis("Vertical");
            Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
            transform.Translate(movement * speed * Time.deltaTime);
            // 如果玩家按下了空格键,并且物体在地面上,则执行跳跃
            if (Input.GetButtonDown("Jump") && isGrounded)
            {
                // 给刚体一个向上的力
                rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
                isGrounded = false; // 跳跃后立刻设置为非地面状态
            }
        }
        // 当物体与另一个物体碰撞时调用
        private void OnCollisionEnter(Collision collision)
        {
            // 如果碰撞到的物体名字是 "Ground"
            if (collision.gameObject.name == "Ground")
            {
                isGrounded = true; // 标记为在地面
            }
        }
    }
    • 新概念
      • Start():这个函数只在游戏开始的第一帧被调用一次,适合用来获取组件、初始化变量。
      • Rigidbody:刚体组件,它能让物体受物理影响,如重力、碰撞、力等,要让物体跳跃,必须给它添加 Rigidbody
      • GetComponent<Rigidbody>():在 Start 中获取当前物体上的 Rigidbody 组件,并保存在 rb 变量中。
      • Input.GetButtonDown("Jump"):检测玩家是否按下了“跳跃”键(默认是空格键)。
      • rb.AddForce(...):给刚体施加一个力,使其跳跃。
      • OnCollisionEnter:当物体发生碰撞时自动调用的函数。
      • isGrounded:一个标志位,用于防止玩家在空中连续跳跃。

第六章:完善场景

  1. 创建地面

    • 在 Hierarchy 面板中,右键 -> 3D Object -> Plane,创建一个平面作为地面。
    • 选中这个 Plane,在 Inspector 中将其 Scale (缩放) 调大一些,(5, 1, 5)。
    • 为了方便识别,选中 Plane,在 Inspector 顶部的 Tag (标签) 下拉菜单中,选择 Add Tag...,点击 号,新建一个名为 Ground 的标签,然后回到 Plane 的 Inspector,将其 Tag 设置为 Ground
    • 或者更简单,直接在 Inspector 顶部的 Name (名字) 处,将 Plane 改名为 Ground
  2. 添加物理材质(可选,但推荐):

    • 在 Project 面板中,右键 -> Create -> Physics Material。
    • 将其命名为 Bouncy
    • 选中 Bouncy,在 Inspector 中,调整 Bounciness (弹性) 和 Friction (摩擦力) 的值。
    • Bouncy 材质拖拽到场景中的 Ground 物体上。
  3. 添加摄像机跟随

    • 为了让摄像机一直跟随我们的立方体,我们可以写一个简单的脚本。
    • 创建一个新脚本 CameraFollow
    • 编写代码:
    using UnityEngine;
    public class CameraFollow : MonoBehaviour
    {
        public Transform target; // 要跟随的目标 (我们的立方体)
        public Vector3 offset;   // 摄像机与目标的偏移量
        void LateUpdate()
        {
            // 每一帧的末尾更新摄像机位置
            // 摄像机的位置 = 目标的位置 + 偏移量
            transform.position = target.position + offset;
        }
    }
    • CameraFollow.cs 脚本拖拽到 Hierarchy 中的 Main Camera 上。
    • 选中 Main Camera,在 Inspector 面板中,你会看到 Camera Follow 组件。
    • 点击 Target 字段右侧的小圆圈,从弹出的窗口中选择 Cube
    • Offset 字段中,输入一个合适的偏移值,(0, 5, -10),这样摄像机就会在立方体的斜上方。

第七章:总结与下一步

恭喜你!你已经完成了你的第一个 Unity 小项目:一个可以用 WASD 或方向键移动,用空格键跳跃,并且摄像机会跟随的立方体。

回顾你学到的东西

  • Unity 编辑器的基本布局和操作。
  • 游戏对象、组件和脚本的核心理念。
  • 如何创建和编写 C# 脚本。
  • 如何使用 UpdateStart 函数。
  • 如何获取用户输入 (Input.GetAxis, Input.GetButtonDown)。
  • 如何使用 Rigidbody 实现物理效果(跳跃)。
  • 如何使用 OnCollisionEnter 检测碰撞。
  • 如何使用公共变量在 Inspector 中调试参数。

下一步可以学习什么?

  1. Unity 官方教程:Unity Learn 平台提供了大量高质量、结构化的免费教程,是进阶的最佳途径。
  2. 学习更多 C#:深入学习面向对象编程、类、继承等,这会让你写出更强大、更优雅的代码。
  3. UI 系统:学习如何制作游戏中的菜单、血条、计分板等。
  4. 动画系统:让你的角色动起来。
  5. 粒子系统:制作火焰、烟雾、魔法特效等。
  6. 寻路系统:让敌人或 NPC 能够智能地在地图上移动。

学习 Unity 是一个持续的过程,多动手、多尝试、多看别人的代码,你很快就能成为一名优秀的游戏开发者!祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇