0

我是编程新手,我正在为我的项目制作一个 2D 横向滚动击败他们。我让一个 AI 为我的敌人工作,但我的敌人对象被建模为平坦的,因此只显示一侧。当我开始游戏时,当我希望敌人保持原样但仍朝玩家移动时,它们会立即旋转以面向玩家。

http://i.imgur.com/TJYtfro.png这就是我希望敌人保持原样,只是显示这张脸,因为它滑向玩家而不旋转或倾斜。

http://i.imgur.com/n0gI2Rf.png这就是我开始游戏时发生的事情,这就是为什么我不希望对象旋转或倾斜。如果您想了解我所做的更多信息或者我不清楚,请告诉我。这是我第一次在网上问。

这是我为enemyAI得到的代码。我知道就我想要实现的目标而言,代码都是错误的,但我的编码知识非常有限,并且仍在学习。

//------------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;

    }
}   
4

1 回答 1

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;
}
于 2013-05-30T19:50:55.930 回答