Unity 2D 轨迹渲染器碰撞
Posted
技术标签:
【中文标题】Unity 2D 轨迹渲染器碰撞【英文标题】:Unity 2D Trail Renderer Collision 【发布时间】:2018-07-26 05:36:11 【问题描述】:我正在制作 2D Unity 游戏,但我面临着我的游戏所依赖的一个主要问题。
我在我的播放器上附加了一个轨迹渲染器组件,我需要让渲染器成为一个碰撞器,充当一个 MeshCollider 我只是不知道是否可以制作一个碰撞器采用 2D 轨迹渲染器的形状。
我在谷歌上搜索过,但没有一个性能良好的解决方案:
有人说创建一个空的游戏对象附加轨迹渲染器组件,然后添加一个碰撞器。但也不起作用。 我尝试关注 this WIKI,但我的 Trail Renderer 发生碰撞,但效果不佳,但我也需要将标签分配给 trail。我可以写一些脚本来实现我的目标吗?或者UnityEngine
有一个
渲染解决方案。提前致谢。
EDIT1:
在我复制脚本并运行它之后,轨迹会发生碰撞,但当玩家不移动时它会表现得很傻。
EDIT2:
游戏基本上是一个玩家的transform.position
等于鼠标位置。所以轨迹没有特定的长度。
【问题讨论】:
wiki.unity3d.com/index.php/TrailRendererWith2DCollider @SpoocyCrep 我尝试了这个脚本,但正如我所提到的,它无法与我的游戏一起使用。 轨迹沿着你画的圆圈,对吗?轨迹在屏幕上显示多长时间? 好吧,我认为它不起作用,因为我将脚本分配给了播放器的一个空子对象,我将尝试将脚本分配给播放器,然后看看会发生什么 “创建一个空的游戏对象附加轨迹渲染器组件”是建议的方式,因为他们说唯一的渲染器应该是游戏对象上的轨迹渲染器 【参考方案1】:我会这样做的方式如下:
创建一个脚本并将其附加到跟踪所遵循的对象上。
创建一个空游戏对象的预制件,其中包含您的轨迹大小的碰撞器,并将其附加到脚本中。
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;
检查是否在屏幕上绘制轨迹,如果没有,隐藏所有对撞机。
否则,在池中运行并搜索隐藏的对撞机。
找到隐藏的对撞机后,使其在轨迹游戏对象的位置上可见。(如果不是所有轨迹都立即消失,您还可以添加 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);
【讨论】:
我还是个 Unity 的初学者,所以 Pooling 对我来说是个新鲜事物解决方案。 这看起来很有意义,但在我的情况下,路径长度是可变的,所以我无法将poolSize
设置为特定数字。
你能解释一下线索在你的游戏中是如何运作的吗?变量是什么意思?
很抱歉,这些问题对于我能够理解和帮助您很重要。你说轨迹没有固定长度,它还可以,并且可以预料,它会在多少时间后消失\它会自动消失吗?
游戏的概念是用鼠标移动你的玩家,如果敌人碰到你变化的尾巴就让他们被杀死。谢谢!【参考方案2】:
这是另一个技巧,可以创建一个创建圆形对撞机的脚本(Maybee 不是完美的,但一个很好的解决方案);
脚本将实例化圆形碰撞器gameObject
,它坚持其初始实例化位置(不改变位置),根据TrailRenderer
宽度放大和缩小圆形碰撞器gameObject
图表在检查器中,当其生命周期等于TrailRenderer
的生命周期时,圆形对撞机将自行销毁。
【讨论】:
“这里是……”在哪里?我看不到任何链接 @canbax 意思是生成具有静态位置作为玩家位置的圆形对撞机的想法。这些对撞机会随着时间的推移而减小它们的大小。这清楚吗?没有参考链接,这只是想法。谢谢。 我的错 ;) 放大或缩小并没有真正帮助我猜。轨迹可能是任意抛物线以上是关于Unity 2D 轨迹渲染器碰撞的主要内容,如果未能解决你的问题,请参考以下文章