Unity官方入门教程总结-2D Roguelike
Tag、Layer和Sorting Layer的区别
- 标签:用于对单个GameObject进行标识。
- 层:在Unity中用于组织一组GameObject。
- 排序层:通过指定层级值来决定渲染顺序,默认情况下越高的值显示在上层。
其功能类似于标签,并且特别适用于管理多个相关对象的层次关系。
Is Trigger
属于BoxCollider 2D组件的一个选项;一旦勾选,则没有碰撞效果;在代码中使用OnTriggerEnter2D函数可以实现事件检测。
new GameObject()和Object.Instantiate()
这两种方式都可在脚本中动态地生成GameObject,并且它们各自的特点不同:使用new操作会生成一个空Object(仅带有transform组件),而Instantiator则允许指定所需的组件和位置参数。Instantiator能够指定所需的预制件、position和rotation参数。Quarternion.identity表示没有旋转的状态。
boardHolder = new GameObject("Board").transform;
Instantiate(toInstantiate, new Vector3(x,y,0f), Quaternion.identity)
[Serializable]
该类可实现序列化功能, 使其实例能在Inspector面板上显示, 并赋予相应的属性值. 若需采用Serializable属性, 需将System库注册到项目中.
where T
用于指定泛型参数类型,请注意在参数位置上标明变量T所属的类别或接口,并明确表示变量T为组件Component实例。
protected virtual void AttempMove <T> (int xDir, int yDir) where T : Component
float.Epsilon
是最小浮点值,接近0。
if (Mathf.Abs(target.position.x - transform.position.x) < float.Epsilon)
Linecast()
line projection is a built-in method in Unity. It will project a ray from the starting position to the ending position, returning a RaycastHit2D structure body information if it collides with a collision body in a specified Layer mask layer.
// 因为光线从中心点发射出去的时候会碰到自身的碰撞器,
// 所以需要把自身的碰撞器先关掉,检测完了再开启。
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();
}
