【问题标题】:Why the enemy is positioned at this place ? And why the rotation speed never change?为什么敌人会在这个地方?为什么旋转速度永远不会改变?
【发布时间】:2016-08-04 02:25:32
【问题描述】:
using UnityEngine;
using System.Collections;

public class WaypointsMover : MonoBehaviour {

    public float rotateSpeed = 2.0f;

    private bool rotating;

    void Update() {
        StartCoroutine(TurnTowards(-transform.forward));
    }

    IEnumerator TurnTowards(Vector3 lookAtTarget) {    

        if(rotating == false) {
            Quaternion newRotation = Quaternion.LookRotation(lookAtTarget - transform.position);
            newRotation.x = 0;
            newRotation.z = 0;

            for (float u = 0.0f; u <= 10.0f; u += Time.deltaTime * rotateSpeed) {
                rotating = true;
                transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, u);

                yield return null;
            }
            rotating = false;
        }
    }

    // Use this for initialization
    void Start () {

    }
}
  1. 无论我将 rotateSpeed 的值更改为 10.0f 还是 20.0f,敌人都会走到一侧,然后会转身走到另一侧。怎样才能让敌人走到一边时立刻转身?

  2. 为什么在场景中敌人定位在建筑物屋顶上,而我却将它们定位在另一个地方?

  3. 如何设置航点?我在代码中找不到路点。我知道在 for 循环中它是在原来的:

    for (float u = 0.0f; u

我把它改成了 10.0f 而不是 1.0f,所以现在他们在屋顶上走得更远了。但如果我想让它们在我拥有的两个领域之间移动?

这是运行游戏时右侧建筑物的屏幕截图,他们在屋顶上行走。左边的两个敌人(守卫)是主玩家。我设置的相机跟随第一个守卫。

我还注意到它们之间没有空间,因此它们相互碰撞或相互干扰行走。我可以在哪里或如何在它们之间设置更多空间,以便每个人都走自己的路?

这是我录制的一个简短视频片段,展示了他们的行走方式和行走地点:

Video Clip

【问题讨论】:

  • 1- 检查你的敌人 (AI) 代码我确定你在某处设置位置。 2-我不知道每个敌人使用什么脚本,但是我很确定您只有一个“WaypointsMover”实例(我认为那是某种管理器)。如果没有,你能粘贴敌人的代码和组件吗?谢谢。
  • @Cabrra 我现在检查我看到对象选项卡中导航窗口中的地形我检查以使其导航静态,然后我单击烘焙。所以现在敌人从他们在场景中的位置开始。但出于某种原因,他们会先到大楼底下,然后在那里巡逻。我不明白为什么要去大楼。
  • @Cabrra 我现在检查我看到对象选项卡中导航窗口中的地形我检查以使其导航静态,然后我单击烘焙。所以现在敌人从他们在场景中的位置开始。但出于某种原因,他们会先到大楼底下,然后在那里巡逻。我不明白为什么要去大楼。
  • @Cabrra 敌人是你可以在我的问题截图中看到的卫兵。我称他们为敌人,但在我的场景中,我将他们命名为警卫(警卫和警卫 1)。在我的问题中,除了这个之外,他们没有任何脚本或代码。这是附加到 Guard 和 Guard 1 的唯一脚本。这个 Guards 是 ThirdPersonControllers 对象。
  • @Cabrra 我如何在此处复制和粘贴 Guards 组件?也许我可以将我的项目上传到我的 onedrive。或者也许只上传角色。

标签: c# unity3d


【解决方案1】:

您是否尝试在 Quaternion.Slerp() 函数中使用 rotateSpeed 而不是 var u?由于 Time.deltaTime 的值非常低(起初它应该在 ~0.0145 左右),它会显着降低旋转速度。如果 rotateSpeed 是 10.0f 或 20.0f 感觉不会有什么不同,因为它最终只会更快(虽然我没有尝试执行它)

此外,Slerp 将旋转过渡到看起来平滑,因此如果您想要即时过渡,只需将对象的旋转设置为您需要的值。

【讨论】:

  • 我尝试了另一个脚本,它只使用两个球体作为航点。我在使用两个球体的其他脚本时遇到了这个奇怪的问题,但是如果我添加另一个球体,它会到达并绕着它走。或者,如果我将圆柱体设置为第二个航路点,它将到达圆柱体并绕着它走,或者会继续走到圆柱体并且永远不会回到第一个航点。
猜你喜欢
  • 2015-01-18
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 2022-07-23
  • 1970-01-01
相关资源
最近更新 更多