我怎样才能让我的敌人旋转面对Unity中的一个航路点

本文关键字:航路 一个 Unity 面对 旋转 敌人 我的 | 更新日期: 2023-09-27 17:58:44

我一直在YouTube上学习如何制作塔防游戏的教程(https://www.youtube.com/watch?v=beuoNuK2tbk)在其中一集中,他教你如何让敌人走上预先设定的道路。这很好,但我想让我的敌人旋转,让它朝着前进的方向前进。我试着使用他在后来的视频中展示的一些代码(https://www.youtube.com/watch?v=QKhn2kl9_8I)但它不起作用,因为我一直收到一个错误,所以我四处搜索了一下,得到了我认为的解决方案。我不知道如何修复这个代码,所以如果你们中的任何人能提供帮助,我们将不胜感激。如果有帮助的话,我正在3D项目中使用Unity。这是我一直得到的错误"严重性代码描述项目文件行禁止显示状态"错误CS1503参数2:无法从"UnityEngine.Transform"转换为"UnityEngine。Quaternion"Tower Defence.CSharp C:''Users''Owner''Documents''Tower Defense''Assets''Enemy.cs 27 Active"

    using UnityEngine;
    using System.Collections;
    public class Enemy : MonoBehaviour {
    public float speed = 10f;
    public float smooth = 2f;
    private Transform target;
    private int wavepointIndex = 0;
    private Object waypoint;
    void Start()
    {
        target = Waypoints.points[0];
        InvokeRepeating("nextWaypoint", 0f, 0.5f);
    }

    void Update()
    {
        Vector3 dir = target.position - transform.position;
        transform.Translate(dir.normalized * speed * Time.deltaTime, Space.World);
        transform.rotation = Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);
        if (Vector3.Distance(transform.position, target.position) <= 0.4f)
        {
            GetNextWaypoint();
        }
    }
    void GetNextWaypoint()
    {
        if(wavepointIndex >= Waypoints.points.Length - 1)
        {
            Destroy(gameObject);
            return;
        }
        wavepointIndex++;
        target = Waypoints.points[wavepointIndex];
    }

}

我怎样才能让我的敌人旋转面对Unity中的一个航路点

您的问题在于这一行:Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);

Quaternion.SlerpQuaternionQuaternionfloat作为参数。您当前正在将QuaternionTransformfloat传递给它

target定义为Transform,必须使用target.rotation才能获得Quaternion

那行代码应该改为:

 transform.rotation = Quaternion.Slerp(transform.rotation, target.rotation, Time.deltaTime * smooth);

另一个想法是使用Transform.LookAt()

https://docs.unity3d.com/ScriptReference/Transform.LookAt.html

var lookPos = target.position - transform.position;
lookPos.y = 0;
var rotation = Quaternion.LookRotation(lookPos);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * smooth);
相关文章: