当前位置: 首页 > 知识库问答 >
问题:

AI跟随并向玩家旋转

蒲曦
2023-03-14

我的剧本有问题,我要我的敌人跟着并向玩家旋转。当他四处走动的时候。这似乎很有效,但是当我的玩家在y上旋转180时,我的敌人似乎会回去很多(他的位置),只有当我的玩家回到他的正常旋转时,敌人才会回来。我到底做错了什么?

public class EnemyTesting : MonoBehaviour
{

    public GameObject player;
   
    public float speed = 1.5f;
    public float turnRate;

    
    private void Update()
    {

        Vector3 toTarget = player.transform.position - transform.position;
        float angleToTarget = Vector3.Angle(transform.forward, toTarget);
        Vector3 turnAxis = Vector3.Cross(transform.forward, toTarget);

        transform.RotateAround(transform.position, turnAxis, Time.deltaTime * turnRate * angleToTarget);
        transform.Translate(toTarget * speed * Time.deltaTime);

    
    }

共有2个答案

姜景焕
2023-03-14

你可以用四元数。向上旋转以缓慢地将敌人的方向转向玩家。

这种行为也使得敌人走向它的前进矢量,而不是直接对着玩家。

var towardsPlayer = player.transform.position - transform.position;

transform.rotation = Quaternion.RotateTowards(
    transform.rotation, 
    Quaternion.LookRotation(towardsPlayer), 
    Time.deltaTime * turnRate
);

transform.position += transform.forward * speed * Time.deltaTime;
贾骏喆
2023-03-14

通过“回去”,我理解旋转,而不是位置。我认为你的问题是Vector3。角度。在文档中检查函数是否返回两个向量之间两个可能角度中较小的一个。如果角度大于180,你需要在代码中处理,让你的敌人相应旋转。

编辑:我认为这是由平移函数的旋转空间产生的。设置空格。世界变换中。Translate参数尝试以下操作:

private void Update() {
    Vector3 toTarget = player.transform.position - transform.position;
    transform.LookAt(player.transform.position);
    transform.Translate(toTarget * speed * Time.deltaTime, Space.World);
}

 
 类似资料:
  • 问题内容: 我正在制作一个2D游戏,其中包括一架与飞船通过槽式导弹作战的飞机,我希望飞船根据玩家的位置旋转,以便它们始终以“头部”面对玩家。播放器可以在y和x方向上自由移动。玩家和太空飞船具有一个Vector2 pos变量,该变量对应于它们的实际位置。任何帮助,将不胜感激。 这是我(现在正在工作)的代码: 敌方飞船旋转,但它们并不总是面对玩家: 问题答案: @dwn的答案在数学上是正确的,但是当您

  • 我是一个业余程序员,在Pyplay非常新。这是我用Pyplay编写的程序,类似于我的世界。在过去的一个小时里,我一直在尝试设置一个代码,让我的玩家在按下X键时移动到随机瓦片。我已经耗尽了大部分如果不是所有的网站和搜索引擎寻找。我已经设法完成了一半的任务;当按下X键时,化身会移动到随机磁贴,但它会移出窗口/显示器。拜托,你能看看我的代码,看看我能做些什么来改进它吗?

  • 我对Android/Java编程比较陌生。我正在创建一个基于文本的社交游戏,并创建了一个包含ID、名称和角色的SQLite数据库。 角色将由应用程序分配并存储在相关的SQLite表中。 由于角色是随机的,我想也许一个随机数生成器从1-7(2个独特的角色,2个相同的角色和3个相同的角色) 我被困在哪里开始和如何实现此功能,任何帮助/建议将不胜感激。

  • 问题内容: 以前很少有人帮助我解决此问题,但旋转仍然混乱,我的大炮不会向玩家旋转,他们都错位了。我真的很需要此问题的帮助,这是我第一次尝试使物体向玩家旋转。我试图使我的大炮嘴向玩家旋转,但是旋转变得一团糟,我不知道该如何解决。 我完整的敌人射击课程 无论大炮在哪里,这都是大炮向玩家旋转的地方 问题答案: 首先,加农炮的图像太高了。剪裁边框并使用较小的图像。例如: 图像的中心是佳能的旋转点。您可以将

  • 我有一个任务,要写一个有人类玩家和人工智能玩家的NIM游戏。游戏是玩“Misere”(最后一个必须拿起棍子的人输了)。人工智能应该使用极小极大算法,但它的动作让它输得更快,我不知道为什么。我已经陷入死胡同好几天了。极小极大算法的目的是不输,如果它处于输的位置,尽可能推迟输的动作,对吗? 考虑以下因素: NIMBoard board=新NIMBoard(34,2); 34=杆的二进制编码位置,2堆2

  • 好的,我有一个手臂和旋转关节相连的球员。我想要的是手臂身体向接触点旋转。 我试图计算接触点与身体的角度,并用 但它在更新方法上表现得很奇怪。它绕着手臂身体的中心旋转,而不是绕着旋转关节连接的身体旋转。 我也在考虑一个关节,但我不知道哪个能像我想要的那样工作。 我将不胜感激任何帮助!