我正在做自上而下的投篮游戏.我写了一段代码,敌人在 map 上随机繁殖,他们试图抓住你.我让他们这么做,我还写了一段代码让他们看着你.基本上只在Z轴上向您旋转.但问题是,当它们在玩家右侧繁殖时,敌人正在远离玩家.但如果我旋转并开始移动,它们会试图修复自己.以下是我的脚本:

void FixedUpdate () {
        Vector3 difference = player.position - transform.position;
        float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);
        Vector2 toTarget = player.transform.position - transform.position;
        float speed = 1.5f;
         
        transform.Translate(toTarget * speed * Time.deltaTime);
    }

推荐答案

假设Translate是一个相对修饰符.因此,当您在平移本身中指定方向时,移动会变得混乱.使用Vector3.MoveTowards解决问题.如果您的游戏是2D,也可以使用Vector2,如下所示:

Vector2.MoveTowards(currentPosition, targetPosition, step);

最好可以这样修复此代码,并将返回值MoveTowards设置为transform.Position.

void FixedUpdate () {
    Vector3 difference = player.position - transform.position;
    float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);
    float speed = 1.5f;
    
    // replace Translate to MoveTowards
    transform.position = Vector3.MoveTowards(transform.position, player.position, Time.deltaTime * speed);
}

Csharp相关问答推荐

我需要两个属性类吗

如何注销Microsoft帐户?

如何分配对象后的class的属性?

发布用于Linux Ubuntu的C#应用程序

无法创建';';类型的';DbContext';.异常';无法解析类型';Microsoft.EntityFrameworkCore.DbContextOptions`1[Comm的服务

Razor视图Razor页面指向同一端点时的优先级

如何使用C#中的主构造函数功能使用多个构造函数?

什么类型的对象存储在大对象堆(LOH)中

在字符串C#之前获取数字

等待一个等待函数

在implementationFactory中避免循环依赖

源代码生成器项目使用`dotnet build`编译,而不是在Visual Studio中编译?

Content WithTargetPath实际上是有效的MSBuild项吗?

System.NotSupportdException:流不支持读取

正在try 将自定义字体添加到我的控制台应用程序

在Visual Studio 2022中查找Xamarin模板时遇到问题

如何对构建在Clean架构和CQRS之上的控制器进行单元测试?

反编译源代码时出现奇怪的字符

C# -根据列表所包含的值的数量组织列表- C#

在素数排序数组中,arr找到arr中最小数的索引i,使得arr[i]除以给定的数