Unity2D 学习笔记 0.Unity需要记住的常用知识

前言

从小是一个很喜欢玩游戏的人,大概四岁的时候,在父亲的帮助下,接触了红色警戒,后来又在同一栋楼的好朋友的推荐下,了解到了星际争霸和魔兽争霸。从那时候开始就总想做出一款有着类似星际争霸那样的剧情宏大,玩法新颖的游戏,希望自己能够坚持下去吧。

之后所有的学习笔记都是基于自己一个练手的项目,下面介绍我用的Unity版本,供大家借鉴:

Unity版本:2023.1.12f1c1
界面
使用的VS版本2022
VS界面
这一章主要是记录一些奇怪的设置,以及一些预设函数名称和用法。将来也会不断补充。

调整Project Setting

Tilemap相关(创建地图块)

C#脚本函数介绍

程序运行函数

private void Awake()

在加载脚本实例时会调用此函数。
此函数的调用比Start更早。
在这里插入图片描述

void Start()

在程序开始正式运行之前,调用的用于初始化程序的函数。
注意:仅在首次调用Update函数之前会执行此函数。
在这里插入图片描述

void Update()

在每一帧都会运行一次该函数,作为程序的主函数,十分重要。
在这里插入图片描述

Collider2D碰撞检测

private void OnTriggerStay2D(Collider2D player)

用于检测是否有物体与该Collider包围盒有接触。只要有物体待在检测框内,便会一直出现结果。具体运行逻辑为:每帧运行一次这个函数,检测相关碰撞。
注意: 这个检测会因为物体进入睡眠状态而停止,如何改变睡眠状态见后文Debug部分。
在这里插入图片描述

private void OnTriggerEnter2D(Collider2D player)

用于检测物体是否进入检测框,只会在进入的瞬间运行。
在这里插入图片描述

如何确定碰撞物体的性质

  1. 利用碰撞物体的tag进行标识,如上图。

关键词

this

用于代指该脚本类,这与C++中相关概念类似。
在这里插入图片描述

gameObject

代指该脚本所挂在的gameObject。
在这里插入图片描述

void GameObject.SetActive(bool value)

用于设置该对象能否使用,是否激活。
在这里插入图片描述

T GameObject.GetComponent<T>()

用于获取该对象的某个组件。
在这里插入图片描述

Transform(Panel)

可以用于表示Panel。真是cao了!!害的我还写了一个Panel管理脚本。
在这里插入图片描述

Time

Time.deltaTime

用于返回当前游戏每一帧的时间,例如假如该游戏60帧,则 T i m e . d e l t a T i m e = 1 60 Time.deltaTime=\frac{1}{60} Time.deltaTime=601
在这里插入图片描述

Mathf

一个数学相关的库文件,可以直接引用,不需要Include和Using

Mathf.Clamp(value, min, max)

将value规范化到[min, max]区间内:
v ˉ = m i n ( m a x ( v , m i n ) , m a x ) \bar{v} = min(max(v, min), max) vˉ=min(max(v,min),max)
在这里插入图片描述

输入检测Input

键盘输入相关

Input.GetKeyDown(KeyCode key)

用于获取键盘输入,其家族函数为Input.GetKey()、Input.GetKeyUp(),用于检测键盘按键的输入,这里的KeyCode可以通过KeyCode.X调用,其中X可以代表所有可选择的。
在这里插入图片描述

Input.GetAxis(string name)

用于获取在name方向上的输入,例如有"Horizontal"(水平),“Vertical”(垂直)。具体设置可以在Project Settings>Input Manager里面修改。
在这里插入图片描述

bool Input.GetButtonDown(string ButName)

获取目标按钮的按下状态,如果按下 则返回true。
在这里插入图片描述

Unity Component相关

Trick

static的应用

1.可以在类开头声明一个本身类型的static变量用于指向自身,从而使这个脚本控件能在全局任何调用该类的地方访问。

class Temp(){ static Temp instance = this; }

如何保证UI对于屏幕位置不随屏幕尺寸改变

在这里插入图片描述
改变这个东西
在这里插入图片描述
在这个里面选择布局。

UI

Panel

这个类在C#中并没有对应的类,可是如果想要控制Panel,以及其子结构中的Component怎么办呢?

这里提供两种思路:
1.写一个脚本,添加到每个Panel中,之后查询这个脚本类。
在这里插入图片描述
2.利用Transform类,可以表示Panel。
在这里插入图片描述

Text 和TextMeshProUGUI

这里我认为算是Unity非常奇怪的地方,如果只为了写文本,则两者理论上应该是一样的,然而在调用过程中则非常不同。我认为这可能是Unity版本的问题,TextMeshProUGUI作为高版本引入的含有更多功能的类,实际上确实比Text更丰富,然而其API缺不相同,且两者并不能互通,即你搜Text类是无法搜到TextMeshProUGUI类的,这十分麻烦。
在这里插入图片描述
下面是Text类。
在这里插入图片描述
总之在搜索的时候需要注意。

Debug和奇怪问题

1.Q:为什么在碰撞检测脚本中,使用OnTriggerStay2D函数时,物体进入并Stay后,该函数只会响应一会,随后便不响应了?

A:这是因为这个物体在Stay过程中,会自动休眠。如果想要改变这个现状,可以修改Edit>Project Settings>Physics 2D>Time To Sleep这个值,或改变其下面两个参数,来控制休眠时间。
在这里插入图片描述
2. 为什么我在UnityEngine.UI中使用了Image控件,然而在VS中写C#脚本时,Public Image 却无法正常识别?
在这里插入图片描述
因为Unity不会默认每个程序都使用UI控件。想要改变这一状况,需要在开头添加Using UnityEngine.UI。即可。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值