我正在制作2D统一游戏,但我面临着游戏所依赖的主要问题。
我在播放器上附加了一个路径渲染器组件,我需要使渲染器成为对撞机,充当 MeshCollider 我只是不知道是否有可能制造对撞机呈现2D Trail渲染器的形状。
我已经在Google上进行过搜索,但没有一个性能良好的解决方案:
是否可以编写一些脚本来实现我的目标?或者UnityEngine
有一个脚本
呈现解决方案。谢谢。
EDIT1:
我复制了脚本并运行它之后,步道发生碰撞,但是当玩家不移动时,它表现得很愚蠢。
EDIT2:
游戏基本上是transform.position
等于鼠标位置的玩家。因此,轨迹没有特定的长度。
答案 0 :(得分:3)
我的操作方式如下:
创建一个脚本,并将其附加到跟踪对象。
创建一个空白的gameObject预制件,并使其与路径的大小相撞,并将其附加到脚本中。
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;
}
}
}
检查是否在屏幕上绘制了足迹,如果没有,则隐藏所有对撞机。
否则,在池上运行并搜索隐藏的对撞机。
(如果并非所有线索都立即消失,您还可以添加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);
答案 1 :(得分:0)
这是使脚本创建圆形对撞机的另一种技巧( Maybee不是完美的解决方案,但是是一个很好的解决方案 );
脚本将实例化停留在其初始实例化位置(不更改位置)的圆形对撞机gameObject
,并根据检查器中的gameObject
宽度图,当对撞机的寿命等于TrailRenderer
的寿命时,对撞机将自行破坏。