我正在尝试设计一种口水球/毒药类型的投射体,它会一直飞行到屏幕上点击的位置,然后自我毁灭。问题是,与几乎每个人所说的相反,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;
}
}
}发布于 2021-07-30 03:34:51
球的起始位置也在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的2D向量),而使用Vector2.MoveTowards,它将忽略Z上的ant深度。
https://stackoverflow.com/questions/68584877
复制相似问题