【发布时间】:2018-06-05 03:45:05
【问题描述】:
旋转炮塔的代码很简单:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotateturret : MonoBehaviour
{
public Transform target;
public Transform partToRotate;
public float turnSpeed = 10f;
private void Update()
{
transform.LookAt(target);
}
}
本例中的目标是以固定速度绕炮塔旋转,但高度随机变化。
如果我将此脚本 RotateTurret 附加到炮塔子部件,它将旋转并查看目标。就像做 LookAt。 这是炮塔部分的截图:
如果我将脚本附加到 Pylon 部分,它会缓慢旋转并始终停留在目标后面,旋转速度不够快。
Pylon 部分截图:
我的问题是:我应该旋转炮塔的哪个部分?逻辑上说的是我认为的 Pylon。
其次我应该如何计算炮塔应该旋转的速度?它总是要面对完美的目标吗?或者有时如果目标以随机速度移动,炮塔不会一直 100% 面对它?这种情况下的逻辑是什么?仅使用 LookAt 是不够的。而且我还没有使用物理学,这是我猜的另一个问题。如果炮塔和目标都使用物理,但现在不确定如何进行炮塔逻辑(或者我应该称之为 AI)。
为了测试,我也尝试了这个脚本:
public class Rotateturret : MonoBehaviour
{
public Transform target;
public Transform partToRotate;
public float turnSpeed = 10f;
private void Update()
{
Debug.DrawRay(transform.position, transform.forward, Color.green, 1000);
Vector3 dir = target.position - transform.position;
Quaternion lookRotation = Quaternion.LookRotation(dir);
Vector3 rotation = Quaternion.Lerp(partToRotate.rotation, lookRotation, Time.deltaTime * turnSpeed).eulerAngles;
partToRotate.rotation = Quaternion.Euler(0f, rotation.y, 0f);
}
}
再一次,如果我旋转炮塔,它会更准确,但如果是塔,它会在目标后面。谁说炮塔的旋转速度应该是10和20或50或1?我猜这个脚本也没有太多逻辑。
另一件事是,将来我还想旋转枪来发射子弹。所以开火率和开火时间是另一个问题,也许这将是另一个问题,但我猜射击子弹也与炮塔旋转逻辑有关。
【问题讨论】:
-
您旋转炮塔的速度取决于您希望炮塔跟踪目标的速度。这是一个设计选择。 (假设你正在制作一款游戏,因为它是 Unity)
-
@AndrewFan 我想做一个跟踪系统逻辑。但即使在游戏中,例如塔防,炮塔总是 100% 锁定目标并在射击时总是击中目标?是不是应该更逼真,这样目标会尝试通过随机改变速度来避免命中,然后炮塔有时会错过目标?只是让它看着并自动射击目标似乎有点无聊。