Полет пули к цели с практически одинаковой скоростью осуществляется с помощью данного скрипта:
public class RedBullet : MonoBehaviour
{
public Vector3 direction;
public Vector3 step;
public float speed;
public float katetX;
public float katetY;
public float gipotenuza;
public float bulletSpeed = 20f;
void Start()
{
direction = GameObject.FindGameObjectWithTag("Player").transform.position;
katetX = direction.x - transform.position.x;
katetY = direction.y - transform.position.y;
gipotenuza = Mathf.Sqrt(Mathf.Pow(katetX, 2) + Mathf.Pow(katetY, 2));
step = new Vector3(katetX/(gipotenuza * bulletSpeed),katetY/(gipotenuza * bulletSpeed),1);
}
void Update()
{
transform.position += step;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("BulletWall"))
{
Destroy(gameObject);
// play destroy anim
}
}
}
Возможно, можно сделать полет снаряда проще, например с помощью Raycast2D
, если это правда, то мне хотелось бы узнать как. В любом случае мне нужно, чтобы снаряды летели не только прямо в объект с тегом player
, но и на n
градусов правее и левее от него, как это сделать?
На самом первом шаге определяем направление оружие-цель
midAngle = atan2(direction.y - transform.position.y, direction.x - transform.position.x);
и производим, например, отклонение этого угла с нормальным распределением
devAngle = randG(midAngle, stdDev);
где randG даёт гауссово распределение с заданным средним и среднеквадратичным отклонением. Например, вот или вот- но, может, в мат библиотеках шарпа что-то готовое появилось с тех пор.
Теперь перерассчитаем целевую позицию с новым углом (эквивалентно ошибке прицеливания),
direction.x = Дистанция * cos(devAngle)
direction.y = Дистанция * sin(devAngle)
и в дальнейшем для расчёта шага будем использовать смещенную позицию
Виртуальный выделенный сервер (VDS) становится отличным выбором
Реализую простой фасад для сокрытия более низкоуровневых решенийЕсть модель данных:
Имеется метод, который внутри себя запускает дважды другой метод, но второй раз асинхронноИ вот внутри Task не срабатывает SaveToDB()
Есть такая реализация: переходы три перехода между играми, когда мы перешли, срабатывает некий метод с корутиной в 3 секунды, но если очень...
В окно из бд загружаются данныеНо нужно сделать чтобы загрузилось не все сразу