gpt4 book ai didi

unity-game-engine - Unity 2D Trail 渲染器碰撞

转载 作者:行者123 更新时间:2023-12-02 14:16:51 24 4
gpt4 key购买 nike

我制作 2D unity 游戏,但我面临着我的游戏所依赖的一个重大问题。

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

我在谷歌上搜索过,但没有找到一个性能良好的解决方案:

  • 有人说创建一个空的游戏对象,附加轨迹渲染器组件,然后向其添加一个碰撞器。但也不起作用。
  • 我尝试关注this WIKI和我的轨迹渲染器发生碰撞,但不太好,但我也需要将标签分配给轨迹。

enter image description here

我可以编写一些脚本来实现我的目标吗?或者UnityEngine有一个渲染解决方案。提前致谢。

编辑1:

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

编辑2:

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

enter image description here

最佳答案

我的做法如下:

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

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

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

创建一个对撞机预制件池(使用的越多,成本就越高,但更准确。)

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

通过使池变得更大,丢失碰撞器的机会将会降低,不断尝试直到找到适合您需求的东西。

编辑:

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

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);

关于unity-game-engine - Unity 2D Trail 渲染器碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51531677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com