сделал мортиру работающую только при определенных значениях по y, как можно улучшить код что бы он работал при других значениях y и прилетал в цель?

Рейтинг: -3Ответов: 1Опубликовано: 29.06.2023
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    Rigidbody2D body;
    float distance;
    public Transform targetCube;
    void Start()
    {
        body = GetComponent<Rigidbody2D>();
        distance = (targetCube.transform.position.x - gameObject.transform.position.x);   
        body.AddForce(new Vector3(distance/2, 10, 0), ForceMode2D.Impulse);
    }
}

Ответы

▲ 0

Решив уравнения можно получить формулы для force_x и force_y через время полёта. Если мы считаем что ускорение свободного падения 9.81, то получается следующий код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    Rigidbody2D body;
    public Transform targetCube;
    public float fly_time = 5;
    void Start()
    {
        body = GetComponent<Rigidbody2D>();
        Vector3 relative = targetCube.transform.position - gameObject.transform.position;
        Vector2 force = new Vector2(relative.x / fly_time, (9.81f * fly_time / 2.0f) + relative.y / fly_time);
        body.AddForce(new Vector3(force.x, force.y, 0), ForceMode2D.Impulse);
    }
}

В результате траектория объекта на который добавлен скрипт будет пересекать targetCube через fly_time секунд.