初探Unity3D

-
-
2024-05-26

Unity项目开发

 主讲人:唐寅权

学习目标:

  • 掌握Unity3D进行游戏项目、虚拟现实项目、数字孪生项目的开发能力
  • 了解企业开发习惯、规范变成习惯、跟企业无缝衔接
  • 通过项目优化能力的培养,进行项目优化改进、提升项目性能
  • 熟练掌握项目开发的整个流程以及各部门之间的配合

学习内容:

  • C#相关内容学习以及对应的数据结构和算法
  • Unity引擎各功能模块以及对应API
  • 项目开发过程中常用的设计模式
  • 项目开发资源管理和代码的组织方式

0x01 背景

Unity为哪些行业带来了新的解决方案

  1. 游戏开发:Unity可以用于创建2D和3D游戏,支持各种游戏类型,如动作游戏、射击游戏、角色扮演等
  2. 教育行业:开发交互式教育应用程序、模拟器、虚拟实验室等
  3. 医疗保健行业:医学培训模拟器、手术模拟器等
  4. 建筑和房地产行业:
  5. 汽车行业
  6. 航天航空行业
  7. 娱乐行业
  8. 广告和营销行业

Unity特点

  1. 游戏开发:Unity可以用于创建2D和3D游戏,支持各种游戏类型,如动作游戏、射击游戏、角色扮演等
  2. 跨平台:移动端(Android、IOS) PC(Windows、MacOS、Linux)主机(PS、Xbox)虚拟现实VR、增强现实AR等
  3. 强大的编辑器:场景编辑、资源管理、物理引擎、动画编辑等功能
  4. 脚本支持:支持多种编程语言,如C#、JavaScript(现为UnityScript)等
  5. 生态系统:资源商店、文档、教程、社区支持等

安装Unity

登入Unity中国区官网,下载Unity安装器UnityHub (Windows、MacOS、Linux)安装引擎

没有账号,需要注册个账号,有账号的直接登入,就会自动下载UnityHub​

按照安装指引安装软件,Archlinux可以安装unityhub-cn

安装好UnityHub后,打开UnityHub,选择Installs标签页,安装官方最新release版本

可以选择LTS版本、最新版本、等,带c1后缀是中国版本

0x02 开始动手

  • 创建项目选择3D模板
  • 更改Project Name
  • 选择位置
  • 创建

Unity3D 基本操作

视图操作

Scene窗口

快捷键功能
Alt+鼠标左键以物体为中心、围绕物体进行观察
F聚焦物体
Q视图工具,平移整个Scene视图
W移动工具,移动场景中所选的对象
E旋转工具。按任意角度旋转场景中的对象
R缩放工具,缩放场景中所选对象
T横切面工具沿着横切面缩放场景中所选对象
Z轴心工具,改变游戏对象轴心点
X坐标系变换工具,本地坐标和世界坐标间切换
Ctrl+Shift+F摄像机对齐到当前窗口

Unity使用左手坐标系,坐标单位为米

编程模式

 

unity中的编程模式

    在Unity中,通常会将面向对象编程、面向组件编程和面向过程编程结合起来,以便充分利用各种编程范式的优势来开发游戏。下面是一些方法可以在Unity项目中结合这三种编程风格:

面向对象编程(OOP)

  • 使用类和对象来组织游戏中的逻辑和数据,实现代码的重用性和可维护性。
  • 定义游戏对象的属性和行为,如玩家、敌人、道具等。
  • 使用继承、多态和封装等面向对象的概念来构建游戏系统的层级结构。

面向组件编程

  • 利用Unity的组件化体系结构,将功能和行为分解为独立的组件并挂载到游戏对象上
  • 通过组件之间的交互实现复杂的游戏逻辑,提高灵活性和可拓展性
  • 编写组件类来定义特定功能,如碰撞检测、移动控制、动画播放等。
     

面向过程编程

  • 在处理简单、线性的问题时,可以采用面向过程的方式来实现相关功能。
  • 在编写一次性、独立的任务或功能时,可以使用面向过程编程风格。
  • 可以结合使用函数来执行特定任务,保持代码清晰简洁。

 

    通过结合这三种编程风格,开发者可以根据具体需求和场景选择合适的方式来编写代码,充分利用各种方法的优势。例如,可以使用面向对象编程来定义游戏对象及其行为,使用组件来实现复杂的功能模块,而在某些简单的功能实现上则可以使用面向过程的方法。这样可以使代码逻辑更清晰、易于维护,并提高开发效率。

规范

 

0x03 C#基础

流程控制

 

运算符

 

 

数组

 

值类型和引用类型

 

0x04 组件

Transform (3D):控制物体在世界的位置、旋转和缩放。(必要组件)

Rect Transform (2D)

Mesh Filter:管理物体顶点结构

Mesh Renderer:渲染器,渲染物体

Collider:碰撞器

Rigidbody:刚体

新建C# Script 模板

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 装备类
/// </summary>
public class Equip
{
	// 数据成员
	int id;
	string name;
	float price;
	// 函数成员
}

/// <summary>
/// 类的结构
/// 1 数据成员
/// 1.1 基本数据成员
/// 	整数:byte、short、int、long
/// 	小数:float、double
///		字符:char
/// 	布尔:bool
/// 1.2 复杂数据成员
/// 	字符串:string
/// 	结构体:struct
/// 	枚举:enum
/// 	类:class
/// 	委托:deleget
/// 2 函数成员
/// </summary>
public class ClassName : MonoBehaviour
{
	// 数据成员
	uint level; // 等级
	double money; // 钱
	float hp; // 血量
	bool isDead; // 是否死亡
	string name; // 名字
	
	// 函数成员
	Equip equip; // 装备,默认为null
    // Start is called before the first frame update 
    // 初始化函数,Play时只执行一次
    void Start()
    {
        // 操作数据成员
        // 定义数据,不初始化有默认值
        // 低精度可以给高精度赋值,高精度不能给低精度赋值
        // 高精度给低精度赋值使用强制类型转换,会丢失精度
        level = 1;
        hp = 100f; 
        money = 9999;
        exp = 0.0;
        idDead = false;
        name = "刀"
        equip = new Equip();
        print("level:"+level);
    }

    // Update is called once per frame
    // 每一帧执行一次
    void Update()
    {
        
    }
}

0x05 获取对象/组件

 

生命周期函数

 

 

 

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝


目录