首页 文章

为什么大炮永远不会朝向目标旋转?

提问于
浏览
0

我想要的是做一些ai,大炮/炮塔将自动旋转面向目标 . 但是当我在运行游戏并在场景视图窗口中移动目标时,加农炮面向另一个方向而不是目标 .

要旋转的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateTurret : MonoBehaviour
{
    [SerializeField]
    private float turnRateRadians = 2 * Mathf.PI;

    [SerializeField]
    private Transform turretTop; // the gun part that rotates

    [SerializeField]
    private Transform bulletSpawnPoint;

    [SerializeField]
    public GameObject target;

    void Update()
    {

        TargetEnemy();
    }

    void TargetEnemy()
    {
        if (target != null)
        {
            Vector3 targetDir = target.transform.position - transform.position;
            // Rotating in 2D Plane...
            targetDir.y = 0.0f;
            targetDir = targetDir.normalized;

            Vector3 currentDir = turretTop.forward;

            currentDir = Vector3.RotateTowards(currentDir, targetDir, turnRateRadians * Time.deltaTime, 1.0f);

            Quaternion qDir = new Quaternion();
            qDir.SetLookRotation(currentDir, Vector3.up);
            turretTop.rotation = qDir;
        }
    }
}

这是一个屏幕截图,显示了脚本附加到的位置以及当我与它们一起移动时,在场景视图中,目标立方体前后还没有在大炮周围,大炮始终面向另一个方向:

Turret

这就是在游戏运行后立即运行游戏时,炮塔自动朝向另一个方向,当移动目标时,炮塔将继续朝向另一个方向旋转:

Turret

1 回答

  • 3

    我认为turretTop.forward表示模型的局部坐标的正z度,但是你的桶被分配到模型的x轴 . 也许你换了:

    Vector3 currentDir = turretTop.forward;

    有:

    Vector3 currentDir = turretTop.right;
    

相关问题