【发布时间】:2021-07-30 02:49:59
【问题描述】:
我正在尝试设计一种吐痰球/毒药类型的弹丸,它会一直移动,直到它到达屏幕上点击的点,然后自行摧毁。 问题在于,与几乎所有人所说的相反,Vector3.Movetowards 并没有以恒定的速度移动球。如果目标位置靠近发射器,则移动速度较慢,如果距离较远,则移动速度更快。
public float speed = 5f;
public Vector3 target = new Vector3();
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, target,speed * Time.deltaTime);
}
添加启动脚本
private void Shooting()
{
if (Input.GetMouseButton(0))
{
if (Time.time >= shotTime)
{
GameObject poison = Instantiate(Projectile, shotPoint.position, transform.rotation);
Vector3 target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
target.z = 10f;
poison.GetComponent<PoisonBall>().target = target;
shotTime = Time.time + timeBetweenShots;
}
}
}
【问题讨论】:
-
如果你正在创建一个“发射器”,你可能想看看使用刚体并施加力,这样你就可以从物理中获得弧线。但是,您的 MoveTorwards 代码看起来是正确的。目标当前是在编辑器中设置,还是代码没有显示?
-
目标由启动器设置(它已经面向鼠标指向的方向)在实例化对象后,使用screentoworldpoint将目标设置为当前鼠标位置。
-
Vector3.MoveTowards以您传入的任何速度(或每次调用更好的最大步长)将当前位置移向目标,如果它是恒定的线性并且目标位置同时没有改变,那么运动会如此。您描述的行为不可重现或缺少特定于您案例的其他信息 -
我添加了用于实例化毒球的启动器(更像是枪而不是发射器)的代码。