Unity实战之方块跑酷(二)

一、角色出生与基本控制移动

1)角色出生

读取地图集合中的数据,指定主角模型的出生点和旋转状态。

2)地图显示数据模型

3)角色基本移动

使用A和D键进行按键控制,读取地图中的位置信息,进行角色移动效果模拟。

二、蜗牛痕迹与移动边界控制

1)蜗牛痕迹

2)边界控制

三、地图连续生成算法

private void CalcPosition()

    {

        if (m_MapManager.mapList.Count - z <= 5)

        {

            Debug.Log("生成新地图");

            float offsetz = m_MapManager.mapList[m_MapManager.mapList.Count - 1][0].GetComponent().position.z + m_MapManager.bottomLength/2;

            m_MapManager.CreateMapItem(offsetz);

        }

    }

四、摄像机跟随

差值运算函数,让摄像机平滑移动

Vector3.Lerp(Vector3 from, Vector3 to ,float t);

///

/// 摄像机跟随

///

public class CameraFollow : MonoBehaviour {

    private Transform m_Transform;

    private Transform m_player;

    public bool startFollow = false;

void Start () {

        m_Transform = gameObject.GetComponent();

        m_player = GameObject.Find("cube_books").GetComponent ();

}

void Update () {

    CameraMove();

}

    ///

    /// 摄像机移动

    ///

    void CameraMove()

    {

        if (startFollow)

        {

            //开始跟随...

            Vector3 nextPos = new Vector3(m_Transform.position.x, m_player.position.y + 1.483f, m_player.position.z);

            //m_Transform.position = nextPos;

            m_Transform.position = Vector3.Lerp(m_Transform.position, nextPos, Time.deltaTime);//插值运算函数

        }

    }

}

五、地面塌陷

1)摄像机按下M后自动跟随

2)地面塌陷

①要让地面一排一排的掉落:使用协程固定时间间隔,实现地面塌陷

②掉落的地面元素要销毁:定时销毁游戏物体

③给掉落的地面元素添加旋转力:rigidbody.angularVelocity:角速度向量。

④停止地面塌陷(游戏结束):当塌陷到的位置和角色的位置重合,即停止塌陷。

///

    /// 开启地面塌陷效果

    ///

    public void StartTileDown()

    {

        StartCoroutine("TileDown");

    }

    ///

    /// 停止地面塌陷效果

    ///

    public void StopTileDown()

    {

        StopCoroutine("TileDown");

    }

    ///

    /// 地面塌陷

    ///

    ///

    private IEnumerator TileDown()

    {

        while (true)

        {

            yield return new WaitForSeconds(0.5f);

            for (int i = 0; i < mapList[index].Length; i++ )

            {

                Rigidbody rb = mapList[index][i].AddComponent();

                rb.angularVelocity = new Vector3(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f)) * Random.Range(1, 10);

                GameObject.Destroy(mapList[index][i], 1.0f);

            }

            if (m_PlayerController.z == index)

            {

                StopTileDown();

            }

            index++;


        }

    }


六、路障生成

七、使用协程生成路障移动动画

1)路障优化:浅色瓷砖也出现路障

2)路障动画

///

/// 地面陷阱

///

public class Spikes : MonoBehaviour {

    private Transform m_Transform;

    private Transform son_Transform;

    private Vector3 normalPos;

    private Vector3 targetPos;

void Start () {

        m_Transform = gameObject.GetComponent();

        son_Transform = m_Transform.FindChild("moving_spikes_b").GetComponent();

        normalPos = son_Transform.position;

        targetPos = son_Transform.position + new Vector3(0, 0.15f, 0);

        StartCoroutine("UpAndDown");

}

    private IEnumerator UpAndDown()

    {

        while (true)

        {

            StopCoroutine("Down");

            StartCoroutine("Up");

            yield return new WaitForSeconds(2.0f);

            StopCoroutine("Up");

            StartCoroutine("Down");

            yield return new WaitForSeconds(2.0f);

        }

    }

    private IEnumerator Up()

    {

        while (true)

        {

            son_Transform.position = Vector3.Lerp(son_Transform.position, targetPos, Time.deltaTime * 30);

            yield return null;

        }

    }

    private IEnumerator Down()

    {

        while (true)

        {

            son_Transform.position = Vector3.Lerp(son_Transform.position, normalPos, Time.deltaTime * 30 );

            yield return null;

        }

    }

}

八、角色与路障交互死亡判断

1)路障蜗牛痕迹

当路障处于安全状态时,角色移动到路障上形成蜗牛痕迹

①创建三个tag标签,分别设置给路障和瓷砖模型;

②根据tag判断出“位置类型”,然后查找响应的地面模型进行蜗牛痕迹生成。

2)死亡判断

何时死亡?

①被地面路障刺到;(触发判断)

②被天空路障刺到;(触发判断)

③掉入坑洞陷阱;(刚体下落)

④自己所在位置地面塌陷。(刚体下落)

添加触发器
地面空陷阱时掉落

你可能感兴趣的:(Unity实战之方块跑酷(二))