我制作2D统一游戏,但我面临一个重大问题,我的游戏所依赖的。
我把一个轨迹渲染器组件附加到我的播放器上,我需要的是让渲染器成为一个对撞机,作为一个MeshCollider,我只是不知道是否有可能使对撞机以2D轨迹渲染器的形状出现。
我搜索过谷歌,但没有一个好的解决方案:

是否有我可以编写的脚本来实现我的目标,或者UnityEngine预先有一个呈现solution.Thanks。
EDIT1:
在我复制了脚本并运行它之后,轨迹就会发生碰撞,但是当玩家不移动时,它会表现出愚蠢的行为。
EDIT2:
游戏基本上是一个玩家,它的transform.position等于鼠标的position.So,轨迹没有特定的长度。

发布于 2018-07-26 06:41:53
我这样做的方式如下:
创建一个脚本并将其附加到跟踪所遵循的对象上。
使用对撞机创建一个空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);发布于 2018-07-26 07:45:43
这是另一个技巧,让脚本创建圆环对撞机(梅比不是完美的,而是一个很好的解决方案);
脚本将实例化附着在初始实例化位置(不改变位置)的圆环对撞机gameObject,根据检查器中的TrailRenderer宽度图放大和缩小圆环对撞机gameObject,当其寿命等于TrailRenderer的寿命时,圆环对撞机会自行销毁。
https://stackoverflow.com/questions/51531677
复制相似问题