我怎样才能让我的敌人旋转面对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];
}
}
您的问题在于这一行:Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);
。
Quaternion.Slerp
取Quaternion
、Quaternion
和float
作为参数。您当前正在将Quaternion
、Transform
和float
传递给它
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);