3

我制作了 2D 统一游戏,但我面临着我的游戏所依赖的一个主要问题。

我在我的播放器上附加了一个追踪渲染器组件,我需要让渲染器成为一个碰撞器,充当一个MeshCollider我只是没有弄清楚是否可以制作一个碰撞器来呈现 2D 追踪渲染器的形状。

我已经通过谷歌搜索但没有一个性能良好的解决方案:

  • 有人说创建一个空的游戏对象附加轨迹渲染器组件,然后添加一个碰撞器。但也不起作用。
  • 我试图按照这个 WIKI和 My Trail Renderer 发生碰撞,但不是很好,但我也需要将标签分配给踪迹。

在此处输入图像描述

是否有一些脚本我可以编写来实现我的目标或者UnityEngine有一个渲染解决方案。在此先感谢。

编辑1:

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

编辑2:

游戏基本上是一个transform.position与鼠标位置相等的玩家。所以轨迹没有特定的长度。

在此处输入图像描述

4

2 回答 2

3

我会这样做的方式如下:

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

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

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 它将在所需时间后隐藏它)。

通过使池更大,丢失对撞机的机会将降低,玩弄它直到找到适合您需要的东西。

编辑:

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

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);
于 2018-07-26T06:41:53.503 回答
1

这是另一个技巧,可以创建一个创建圆形对撞机的脚本(也许不是完美的,但一个很好的解决方案);

脚本会实例化gameObject一个固定在初始实例化位置(不改变位置gameObject)的圆对撞机,根据TrailRendererinspector中的宽度图放大和缩小圆对撞机,当圆对撞机的生命周期等于的TrailRenderer一生。

于 2018-07-26T07:45:43.100 回答