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