Advertisement

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可以挂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();
    }

教程地址:https://www.jianshu.com/p/5622f6db56b7

全部评论 (0)

还没有任何评论哟~