我一直在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];
}
}
答案 0 :(得分:1)
你的问题出在这一行: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);
答案 1 :(得分:0)
另一个想法是使用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);