gpt4 book ai didi

c# - Unity - Vector3.MoveTowards 不以恒定速度移动

转载 作者:行者123 更新时间:2023-12-04 17:16:37 26 4
gpt4 key购买 nike

我正在尝试设计一种喷丸/毒药类型的射弹,它会一直飞行直到到达屏幕上点击的点,然后自行销毁。
问题在于,与几乎所有人所说的相反,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;
}
}
}

最佳答案

球的起始位置是否也在 z=10f ?否则,速度的差异很可能是 2D 游戏中的视角问题,导致子弹沿 Z 方向行进,但从相机的角度来看,您看不到这一点。
=> 离目标越近,仅在 Z 轴上发生的运动越多,距离越远,在 X 和 Y 上发生的运动就越多。
确保也做

var spawn = shotPoint.position;
spawn.z = 10f;
GameObject poison = Instantiate(Projectile, spawn, transform.rotation);
或者保留 target.z = 0 (只需删除 target.z = 10f 行,默认情况下 ScreenToWorld 使用给定向量的 Z 分量作为深度,并且无论如何您都传入了一个深度为 0 的二维向量)并改为使用 Vector2.MoveTowards 这将忽略 Z 上的 Ant 深度。

关于c# - Unity - Vector3.MoveTowards 不以恒定速度移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68584877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com