如何在没有旋转或看着玩家的情况下制造一个跟随玩家的敌人AI?

时间:2013-05-30 19:08:27

标签: c# unity3d

我是编程的新手,我正在为我的项目制作2D横向滚动功能。我有一个人工智能为我的敌人工作,但我的敌人物体被建模为平坦,所以只有一面是要显示的。当我开始游戏时,敌人会立即旋转以面对玩家,因为我希望它保持原样,但仍然朝向玩家。

http://i.imgur.com/TJYtfro.png这就是我希望敌人保持的状态,只需将这张脸展示为向玩家滑动而不旋转或倾斜。

http://i.imgur.com/n0gI2Rf.png当我开始游戏时会发生这种情况,这就是为什么我不想让物体旋转或倾斜。如果您想了解我所做的其他信息,或者我不清楚,请告诉我。这是我第一次在网上询问。

这是我为敌人获得的代码。我知道代码是完全错误的,但是我的编码知识非常有限,而且还在学习。

//------------Variables----------------//
public Transform target;
public int moveSpeed;
public int rotationSpeed;
public int maxdistance;
private Transform myTransform;
//------------------------------------//    

void Awake()
{
    myTransform = transform;
}


void Start ()
{

    maxdistance = 2;
}


void Update ()
{


    if(Vector3.Distance(target.position, myTransform.position) > maxdistance)
    {
    //Move towards target
    transform.LookAt (target.position);     
    myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;

    }
}   

1 个答案:

答案 0 :(得分:5)

你的问题是你对“前进”的含义有些困惑。你需要决定前进的方向。目前,“前进”是“超出屏幕”,因为你正在做一个2D侧卷轴并且你的所有敌人都面向屏幕外。

但是,您尝试使用LookAt()让角色看到播放器。但当然它们会转向,因为每个敌人网格/模型的“前进”目前是他们脸上的方向。

您有两种选择。一种方法是将所有模型旋转90度,使其向前移动。在这种情况下,你仍然可以使用LookAt(),然后告诉敌人前进,但在视觉上他们仍然看着屏幕外。但是,如果你到达另一边,敌人会​​向后转身。所以可能不是一个好的选择。

另一个选择是你不应该使用“前进”向量设置敌方变换/位置。只需根据一个向量设置敌人位置,该向量是敌人位置和玩家位置之间的差异。从玩家位置向量中减去敌人位置向量,你将有一个指向玩家方向的向量。将其标准化以获得单位方向向量。然后将其乘以上面的移动速度和增量时间。使用它代替“前进”,你的敌人将朝向玩家。在这种情况下,你根本不打电话给LookAt(),因为你总是希望敌人面对屏幕。

编辑:我没有Unity的副本,但它应该是这样的:

if (Vector3.Distance(target.position, myTransform.position) > maxdistance)
{
  // Get a direction vector from us to the target
  Vector3 dir = target.position - myTransform.position;

  // Normalize it so that it's a unit direction vector
  dir.Normalize();

  // Move ourselves in that direction
  myTransform.position += dir * moveSpeed * Time.deltaTime;
}