Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

独立游戏开发者!进化之路!

Unity

开源游戏引擎

安装

使用UnityHub安装

许可证激活

激活个人版许可证

Unity工程

创建项目时可以创建2D\3D项目,但创建完成后项目结构是相同的,区别在于视图不同,例如图像时作为纹理还是精灵图导入。

创建了3D的项目也可以直接改为3D

创建项目时可以选择使用PlasticSCM进行版本管理

3D or 2D

Unity将游戏场景分为了五类:

  • 全3D
  • 正交3D
  • 包含3D图形的2D玩法
  • 包含视差效果的的2D玩法
  • 全2D

上述前4项均需要以3D模式创建项目。

项目结构

Unity创建的3D项目大致包含如下一些结构:

1
2
3
4
5
Assets // 资源目录,例如场景、脚本、模型等等资源文件均存放于此
Library // 库,系统库的存放路径
Logs // 日志文件
Packages // 导入的第三方包
ProjectSettings // 工程设置

如果想要移动工程的话,只需要将Assets和Library移动出去即可

Unity界面

The most common windows in their default positions

  • (C) Game 视图通过场景摄像机模拟最终渲染的游戏的外观效果。单击 Play 按钮时,模拟开始。
  • (D) Scene 视图可用于直观导航和编辑场景。根据正在处理的项目类型,Scene 视图可显示 3D 或 2D 透视图。
  • (G) The Project 窗口 展示项目文件中Assets文件夹下可以再项目中使用的资源。当往项目中引入资源时,它们会出现在这里

脚本创建

在Assets目录下可以通过右键来创建C#脚本文件,双击打开后,会直接跳到VS,实际上VS在其中只起到编辑器的功能

如果要使用其他的编辑工具,可以在Edit -> proferences -> External Tools -> External Script Editor来修改

Unity程序

Rigidbody2D

  • velocity
    • 用来设置刚体的速度
    • 其值为一个Vector2对象用来表示一个2维向量
    • 包含两个属性x,y分别代表两个轴上的分量

Input

获取键盘输入

  • GetKey(name)
    • 其中name可以为KeyCode.Space等对象
    • 该函数能够监听从键盘按下到键盘抬起整个过程的事件
    • 即只要不松开键盘就一直能够监听到
  • GetKeyDown(name)
    • 监听键盘按下事件
  • GetKeyUp(name)
    • 监听键盘抬起事件
  • GetButtonDonw(name)
    • name为字符串,用于监听"jump"等Unity预定义键盘映射
  • GetAxis(name)
    • name为字符串
    • "Horizontal"等坐标轴变化,使用左右键等Unity预定义为Horizontal的按键可观测其变化
    • 值为-1~1间的小数
    • 可以理解为监听某个轴上的加速度,加速度逐渐增大,最大值为1最小值为-1
    • 松开后值会逐渐衰减,按下后值会逐渐增大
  • GetAxisRaw(name)
    • 同上
    • 但取值为-1~1的整数

MonoBehaviour

生命周期:

  • Start()
    • 第一帧加载结束后调用
  • Update()
    • 加载每一帧时调用

GetComponent

该方法会搜索当前对象下指定类的Component并返回对象

GetComponent<class>()

封装

public与private

两者的区别除了面对对象中的访问区别外

设置为public的属性可以在Unity的物体对象的脚本中看到,并且进行赋值

但private的属性并不会在其中显示

例如GridBody刚体对象属性,通常设为public,这样我们就能很轻松的在Unity中将精灵的刚体推拽给它以赋值

但很多时候,属性应该默认为private,同时又需要再Unity中显示我们就需要使用SerializeField:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using UnityEngine;

public class Player : MonoBehaviour
{
// x轴方向加速度
//
[SerializeField] private float xInpute;

// 获取刚体
[SerializeField] private Rigidbody2D rb;

// 速度控制
[SerializeField] private float moveSpeed;

// 弹跳力
[SerializeField] private float jumpForce;


// Start is called before the first frame update
void Start()
{
// 给刚体一个初速度,水平方向速度为5,竖直方向为原本的速度
// rb.velocity = new Vector2 (5, rb.velocity.y);
}

// Update is called once per frame
void Update()
{
xInpute = Input.GetAxisRaw("Horizontal");

// 通过输入来改变物体的速度
rb.velocity = new Vector2(xInpute * moveSpeed, rb.velocity.y);

// 条约
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("Jump");
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
}

Unity中public的属性是默认序列化的,如果不希望public的属性被显示,则需要使用[HidenInInspector]进行隐藏

该特性脱胎于C#的Attribute,类似于python的修饰器,以及java的注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 定义
namespace System
{
public sealed class ObsoleteAttribute : Attribute
{
// ...
public ObsoleteAttribute(string? message, bool error);
}
}

// 使用
[Obsolete("使用xxx方法替代。",false)]
class Program {
// ...
}

评论