[英]Unity3d maintaining a minimum distance between multiple GameObjects c#
我有多个向玩家移动的敌人。 我试图阻止它们彼此合并,即保持彼此之间的某种最小距离。 我正在尝试的是这个(来自unity3d论坛):
enemy1.transform.position = (enemy1.transform.position -
enemy2.transform.position).normalized * distance + enemy2.transform.position;
但是,当我有> = 3个敌人时,即使将其应用于每个敌人组合,它们似乎仍然会聚在一起。
我需要一种更好的方法,因为该方法不起作用且无法扩展。
在敌人预制件周围执行的操作是放置一个四边形框,该框实际上是一个触发元素,然后在您的敌人脚本上设置以下条件:如果另一个敌人(使用标记类型,我想是)碰到了四边形框,则运行适当的代码以阻止敌人靠近并防止敌人实际与该触发框重叠。
您在问题中所举的示例代码看起来像是专门引用敌方单位,而不是实例实例,这很可能是一种不好的编码方式,正如您所发现的那样,处理未特定名称的引用实体非常不灵活。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
private Transform otherEntity;
public float distance = 50.0f;
private Transform thisEntity;
void OnTriggerEnter(Collider other)
{
otherEntity = other.GetComponent<Transform>();
thisEntity = GetComponent<Transform>();
thisEntity.position = (thisEntity.position - otherEntity.position).normalized * distance + otherEntity.position;
}
}
我没有测试上面的代码,但是使用了您引用的代码,从游戏组件中加载了所引用实体的变换值,因为自5.1版发布以来,这已改变了Unity中的很多代码,您的代码来源就是一个答案在2012年给出!
thisEntity
是脚本附加到的对象,通常是敌人之一。 otherEntity
是四元触发中的对象(请记住,四元需要作为触发元素引用。
输入触发器后,需要设置Entity
变量的值,以使其始终影响正确的other
元素。
(我的方法可能完全错了,但我希望这会有所帮助。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.