Luk*_*lte 0 c# list distance unity-game-engine gameobject
我正在尝试制作一款游戏,您必须合并 2 个游戏对象才能获得下一个游戏对象,依此类推。首先我尝试,当游戏对象被释放并且它接触另一个游戏对象时,它会删除这两个游戏对象,然后实例化下一个游戏对象。但这并不太有效,因为触发器相互“覆盖”或其他一些奇怪的东西。所以我想我可以检测到碰撞,以便每个接触触发器的游戏对象都会添加到列表中,然后在退出时删除。我不想弄清楚的是如何计算游戏对象之间的距离,如果它们足够近(合并阈值),那么它们都会被销毁并且下一个游戏对象被实例化,但我不太清楚如何获得这个距离计算并返回游戏对象是什么。因此,所有帮助将不胜感激!(不要遗漏任何细节,因为我是初学者)谢谢!
这是到目前为止我得到的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Merging : MonoBehaviour
{
List<GameObject> NearGameobjects = new List<GameObject>();
void Start()
{
}
void Update()
{
}
void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.tag == gameObject.tag)
{
Debug.Log("Enter!");
NearGameobjects.Add(col.gameObject);
}
}
void OnTriggerExit2D(Collider2D col)
{
if (col.gameObject.tag == gameObject.tag)
{
Debug.Log("Exit!");
NearGameobjects.Remove(col.gameObject);
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您要使用该列表并将所有对象添加到该列表中,您可以使用 for every 循环并检查主要对象与列表中所有其他对象之间的距离(如果距离较近),则将其添加到衣柜对象中
public class NewBehaviourScript : MonoBehaviour {
List<GameObject> NearGameobjects = new List<GameObject>();
GameObject closetsObject;
private float oldDistance = 9999;
private void Something()
{
foreach (GameObject g in NearGameobjects)
{
float dist = Vector3.Distance(this.gameObject.transform.position, g.transform.position);
if (dist < oldDistance)
{
closetsObject = g;
oldDistance = dist;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)