Обычно я не работаю над мобильными играми в Unity, но, как правило, это причины, по которым жесткие тела не работают.
- Убедитесь, что скрипт соединен с объектом с жестким телом, перетаскивая сценарий на объект.
- Используйте
RigidBody2D Rigidbody2D = GetComponent<RigidBody2D>()
в начале вашего скрипта. - Если вы используете метод
AddForce()
в функции Start()
, вам необходимо переместите его в функцию FixedUpdate()
. - Иногда движение действительно работает, но оно не перемещает объект очень быстро, потому что не хватает силы, поэтому вам, возможно, придется увеличить силу.
- Убедитесь, что к Rigidbody не наложены ограничения движения.
- Поскольку вы работаете с кнопками, вам придется связать кнопки со скриптом с жестким телом, например:
public void OnPointerDown(PointerEventData eventData)
{
//Start moving logic
moving = true
}
public void OnPointerUp(PointerEventData eventData)
{
//Stop moving logic
moving = false
}
private void FixedUpdate(){
if(moving){
//Moving
Rigidbody2D.AddForce(force * Time.deltaTime)
}else{
//Not moving
}
}
Так как OnPointerUp / Down вызывается только один раз, когда происходит событие, вам нужно поместить начало движения logi c в OnPointerDown
и прекратить перемещение объекта в OnPointerUp
.