Unity 2D Trail渲染器碰撞

Unity 2D Trail Renderer Collision

我正在制作 2D Unity 游戏,但我遇到了我的游戏所依赖的主要问题。

我在我的播放器上附加了一个轨迹渲染器组件,我需要的是让渲染器成为一个碰撞器,充当 MeshCollider 我只是不知道它是否是可以使对撞机采用 2D 轨迹渲染器的形状。

我搜索了 google 但没有找到一个性能良好的解决方案:

我可以编写一些脚本来实现我的目标吗?或者 UnityEngine 有一个 提前渲染 solution.Thanks。

编辑 1:

在我复制脚本并 运行 之后,轨迹发生碰撞,但当玩家不动时它表现得很愚蠢。

编辑2:

游戏基本上是一个transform.position等于鼠标position.So轨迹的玩家

我的方法如下:

创建脚本并将其附加到踪迹所遵循的对象。

创建一个空游戏对象的预制件,其碰撞器大小与您的路径大小相同,并将其附加到脚本中。

public TrailRenderer trail; //the trail
public GameObject TrailFollower;
public GameObject ColliderPrefab;

创建collider prefab池(用的越多越贵,但是越准。)

public int poolSize=5;
GameObject[] pool;

void Start()
{
    trail = GetComponent<TrailRenderer>();
    pool = new GameObject[poolSize];
    for (int i = 0; i < pool.Length; i++)
    {
        pool[i] = Instantiate(ColliderPrefab);
    }
}

现在更新游戏时您应该执行以下操作:

 void Update () {
    if (!trail.isVisible)
    {
        for (int i = 0; i < pool.Length; i++)
        {
            pool[i].gameObject.SetActive(false);

        }
    }
    else
    {
        TrailCollission();
    }

}

void TrailCollission()
{
    for (int i = 0; i < pool.Length; i++)
    {
        if (pool[i].gameObject.activeSelf == false)
        {
            pool[i].gameObject.SetActive(true);
            pool[i].gameObject.transform.position = TrailFollower.gameObject.transform.position;
            return;
        }
    }
}
  1. 检查屏幕上是否正在绘制轨迹,如果没有,则隐藏所有碰撞器。

  2. 否则,运行 在池中搜索隐藏的对撞机。

  3. 当找到隐藏的对撞机时,使其在跟踪游戏对象的位置上可见。

(如果不是所有的踪迹都立即消失,您还可以添加 iEnumerator,它将在所需时间后隐藏它)。

通过扩大池,可以降低丢失对撞机的几率,尝试使用它,直到找到适合您需要的东西。

编辑:

要让 Colliders 在一段时间后隐藏,请执行以下操作:

private IEnumerator hide(float waitTime, GameObject p)
{
    while (true)
    {
        yield return new WaitForSeconds(waitTime);
        p.SetActive(false);

        yield break;
    }
    yield break;
}

设置他们的位置后调用它

hide(time,pool[i].gameObject);
StartCoroutine(hide);

这是另一个技巧,可以制作一个脚本来创建圆形碰撞器(也许蜜蜂不是完美的,但是一个很好的解决方案);

该脚本将实例化圆形碰撞器gameObject,它坚持其初始实例化位置(不改变位置),放大和缩小圆形碰撞器gameObject 根据 inspector 中的 TrailRenderer 宽度图,圆形碰撞器将在其生命周期等于 TrailRenderer 的生命周期时自行销毁。