Для начала я бы посоветовал использовать компонент Rigidbody
и позволить физике управлять движением, но если вы хотите использовать Vector3.MoveTowards
, это будет немного работы:
Vector3.MoveTowards
это то, что нужно называть каждый кадр.Я предполагаю, что bullet
- ваш префаб, поэтому вы захотите создать новый скрипт для движения и поместить его в этот префаб:
public class MoveToTarget : MonoBehaviour
{
private float _speed;
private Vector3 _target;
public void StartMovingTowards(Vector3 target, float speed)
{
_target = target;
_speed = speed;
}
public void FixedUpdate()
{
// Speed will be 0 before StartMovingTowards is called so this will do nothing
transform.position = Vector3.MoveTowards(transform.postion, _target, _speed);
}
}
После того, как вы прикрепите его к вашему префабу, сделайтеубедитесь, что вы взяли ссылку и запустили ее, когда создавали копию своего префаба:
GameObject proj = Instantiate(bullet) as GameObject;
var movement = proj.GetComponent<MoveToTarget>();
movement.StartMovingTowards(target, atkSpd);
Если вы вместо этого идете по пути физики, добавьте компонент Rigidbody
в свой префаб пули иполучите ссылку на это вместо создания сценария MoveToTarget
:
GameObject proj = Instantiate(bullet) as GameObject;
var body = proj.GetComponent<Rigidbody>();
Тогда вы можете просто применить силу и позволить физике вступить во владение:
body.AddForce(target - transform.position, ForceMode.Impulse);