在Unity中初始化swarm元素位置的建议方法是什么?

时间:2016-09-04 09:06:40

标签: c# unity3d collision-detection

我目前正在尝试初始化一组对象,每个对象都有自己的(不同的)对撞机。我的问题是,我不知道如何在没有碰撞的情况下初始化对象的位置。

我知道碰撞检测是通过=if(G2="OCCUPIED";D2&" <green-dot>";) 等发生的。但是,使用这种机制,我需要实现某种回调机制。或者有没有办法在实例化后立即检查对象是否与另一个对象发生碰撞?

1 个答案:

答案 0 :(得分:0)

我会做的是(由于之前的经验,第一个选项就像魅力一样):

  • 如果有很多对象,我会让它们相互碰撞,然后每当一个对象与另一个对象发生碰撞时,我所做的就是在每个对象的OnCollisionEnter()方法内部调用等待1或2秒的协同例程然后将对象的速度杀死为零(rigidbody.velocity = Vector3.zero)(假设它们具有RigidBodies)。 注意:只要您不介意碰撞检测,此选项也可用于少数对象。

  • 如果只有少数几个对象(并且你想避免碰撞检测),我会保留一个数组中前一个对象的位置,当实例化一个新对象时,我会先生成一个随机位置(使用随机x,y和z创建Vector3并且如果位置不在先前位置的数组中,则仅实例化游戏对象,如果位置重复则生成新的随机位置。

    < / LI>

我个人喜欢第一个的结果,因为一切看起来更随机(因为不可预测的碰撞)。我用第一种方法创造了一个巨大的小行星场(约10,000个小行星)并且效果非常好。