【发布时间】:2017-12-01 01:49:27
【问题描述】:
private GameObject m_PC;
private GameObject m_target;
private List<GameObject> m_targetList = new List<GameObject>();
private void Awake()
{
m_PC = GameObject.Find("PlayerCharacter");
}
private void GetInitialTarget()
{
if (m_targetList.Count >= 2)
{
foreach (GameObject item in m_targetList)
{
float dist = Vector3.Distance(m_PC.transform.position, item.transform.position);
Debug.Log(item + " : " + dist);
}
m_targetList.Sort();
}
else if (m_targetList.Count == 1)
{
m_target = m_targetList[0];
}
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Check")
{
GameObject targetGO = other.transform.gameObject;
m_targetList.Add(targetGO);
}
}
在这里,我试图在这个对象的 Collider 内收集所有带有标签的 GameObjects。我接下来要做的是比较一个因素收集的每个项目; m_PC 之间的距离在这里存储在变量 m_target 中。 Aaaand,这几乎就是我现在卡住的地方。
首先我认为在这里使用 List 并使用 Dictionary 来实现该距离将成为每个带有此对撞机找到的标签的 GameObject 的 TValue 是错误的,但后来我不太确定我的方向是正确的.后来,我想通过另一个优先级来添加另一个因素,比如游戏对象 A 是垃圾 NPC,B 是老板 NPC,但我认为可以等待。我确实尝试吸收 IComparable 和 IComparer 认为这是我需要的,但我自己并没有真正做到。
// 我尝试将 List 替换为 Dictionary 以 GameObject 作为 TKey,float(distance) 作为 TValue,但是我卡住了如何根据距离的 TValue 为 m_target 取出 GameObject。
【问题讨论】: