11.平台数据管理类

11.平台数据管理类


11.1 知识点

主要目标

创建PlatformDataMgr平台数据管理类,实现单例。定义平台列表和增加移除清空平台方法。

/// <summary>
/// 平台数据管理器 主要用于一次性获取数据 避免之后再多次单独获取
/// </summary>
public class PlatformDataMgr 
{
    private static PlatformDataMgr instance;

    public static PlatformDataMgr Instance
    {
        get
        {
            if (instance == null)
                instance = new PlatformDataMgr();
            return instance;
        }
    }

    public List<Platform> platformList = new List<Platform>();

    /// <summary>
    /// 动态添加平台数据
    /// </summary>
    /// <param name="data"></param>
    public void AddPlatform( Platform data )
    {
        platformList.Add(data);
    }

    /// <summary>
    /// 动态移除平台数据
    /// </summary>
    /// <param name="data"></param>
    public void RemovePlatform( Platform data)
    {
        if(platformList.Contains(data))
            platformList.Remove(data);
    }

    /// <summary>
    /// 清空平台数据
    /// </summary>
    public void ClearData()
    {
        platformList.Clear();
    }
}

平台类Start时添加到平台数据管理类中

/// <summary>
/// 平台数据类
/// </summary>
public class Platform : MonoBehaviour
{
    …
    private void Start()
    {
        PlatformDataMgr.Instance.AddPlatform(this);
    }
    …
}

11.2 知识点代码

PlatformDataMgr

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 平台数据管理器 主要用于一次性获取数据 避免之后再多次单独获取
/// </summary>
public class PlatformDataMgr 
{
    private static PlatformDataMgr instance;

    public static PlatformDataMgr Instance
    {
        get
        {
            if (instance == null)
                instance = new PlatformDataMgr();
            return instance;
        }
    }

    public List<Platform> platformList = new List<Platform>();

    /// <summary>
    /// 动态添加平台数据
    /// </summary>
    /// <param name="data"></param>
    public void AddPlatform( Platform data )
    {
        platformList.Add(data);
    }

    /// <summary>
    /// 动态移除平台数据
    /// </summary>
    /// <param name="data"></param>
    public void RemovePlatform( Platform data)
    {
        if(platformList.Contains(data))
            platformList.Remove(data);
    }

    /// <summary>
    /// 清空平台数据
    /// </summary>
    public void ClearData()
    {
        platformList.Clear();
    }
}

Platform

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 平台数据类
/// </summary>
public class Platform : MonoBehaviour
{
    //平台的宽
    public float width = 5;
    //平台是否显示影子
    public bool canShowShadow = true;
    //平台是否可以下落
    public bool canFall = true;

    //我们平台对应的Y坐标
    public float Y => this.transform.position.y;
    //平台的左边界
    public float Left => this.transform.position.x - width / 2;
    //平台的右边界
    public float Right => this.transform.position.x + width / 2;

    private void Start()
    {
        PlatformDataMgr.Instance.AddPlatform(this);
    }

    /// <summary>
    /// 检测玩家是否可以落在我之上
    /// </summary>
    /// <param name="pos"></param>
    /// <returns></returns>
    public bool CheckObjFallOnMe(Vector3 pos)
    {
        //对象的Y在我之上 并且在我的左右边界之内 就认为可以落在我身上
        if (pos.y >= Y && pos.x <= Right && pos.x >= Left)
            return true;
        return false;
    }

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawLine(this.transform.position - Vector3.right * width / 2, this.transform.position + Vector3.right * width / 2);
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏