Tag、Layer和Sorting Layer的区别
- Tag:相当于标签,用来对单个GameObject进行标识。
- Layer:是Unity中的层,作用和Tag很相似,不同之处在于Layer用于一组GameObject。
- Sorting Layer:控制渲染层级顺序,值越大则渲染层级越高,即显示在越上层。
Is Trigger
是Box Collider 2D
组件的一个选项,勾选后就没有碰撞效果,但可以在代码里使用OnTriggerEnter2D来检测事件。
new GameObject()和Object.Instantiate()
两种方法都可以在脚本里动态创建GameObject,区别是new方法的结果是创建一个空白的GameObject,只包含transform组件。Instantiate
方法可以指定要创建的预制件、位置、旋转。
Quaternion.identity
代表不旋转
boardHolder = new GameObject("Board").transform;
Instantiate(toInstantiate, new Vector3(x,y,0f), Quaternion.identity)
[Serializable]
可以序列化某个类,使类的实例在Inspector面板上显示, 并可以赋予相应的值。
要想使用[Serializable],需要在顶部命名空间声明 using System。
where T
用在泛型后面来指定T是属于什么,比如:where T : Component 表明T是组件Component。
protected virtual void AttempMove (int xDir, int yDir) where T : Component
float.Epsilon
是最小浮点值,接近0。
if (Mathf.Abs(target.position.x - transform.position.x) < float.Epsilon)
Linecast()
线性投射,是Unity自带方法。它会从开始位置到结束位置做一个光线投射,如果与指定的Layer mask层的碰撞体交互,就会返回一个RaycastHit2D结构体信息。
// 因为光线从中心点发射出去的时候会碰到自身的碰撞器,
// 所以需要把自身的碰撞器先关掉,检测完了再开启。
boxCollider2D.enabled = false;
RaycastHit2D hit = Physics2D.Linecast(start, end, blockingLayer);
boxCollider2D.enabled = true;
Audio Source
一个GameObject
可以挂N
个Audio Source
组件。
给2D Roguelike加上重新游戏的逻辑
官方原版代码是主角挂了后即一直停留在黑屏提示界面,我给它加上了停留3秒后,自动重新开始游戏的逻辑。
1、首先增加一个RestartGame
方法。
public void RestartGame()
{
enabled = true;
level = 0;
SceneManager.LoadScene(0);
}
2、修改GameOver
方法
public void GameOver()
{
levelText.text = "After " + level + " days, you starved.";
levelImage.SetActive(true);
enabled = false;
// 新增
Invoke("RestartGame", 3f);
}
3、修改LevelWasLoaded
方法
void LevelWasLoaded(Scene scene, LoadSceneMode mode)
{
// 新增
if (level == 0)
{
playerFoodPoints = 100; // 恢复生命
SoundManager.instance.musicSource.Play(); // 恢复背景音乐
}
level++;
InitGame();
}