跳至正文

Unity官方2D Roguelike小结

  • Unity

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可以挂NAudio 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();
}
标签:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注