У меня есть персонаж игрока в игре сверху вниз, которая движется в виде сетки (1 единица за раз), но когда она попадает на кусок льда (квадрат), я хочу, чтобы он переключился на движение lerp-движениемдо края и остановитесь.
В настоящее время у меня есть 5 разных коллайдеров в качестве детей для каждого ледяного куска: сам ледяной коллайдер и 4 слегка удаленных коллайдера, по одному на каждую сторону льда.Когда он попадает в ледяной коллайдер, в зависимости от того, в каком направлении он движется, он должен привязываться к связанному удаленному коллайдеру.
Примерно так (трудно увидеть основной коллайдер, но он есть):
Вот код, который я использовал для клавиши «вниз» (она в основном одинакова для всех клавиш):
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
Vector2 movementDown = new Vector2(0, -1);
RaycastHit2D hitDown = Physics2D.Raycast(transform.position, movementDown, 0.05f);
if (hitDown.collider && hitDown.collider.gameObject.tag == "barrier")
{
Debug.Log("N/A");
}
else if (onIce)
{
player.transform.position = Vector3.Lerp(transform.position, downIce.transform.position, 100 * Time.fixedDeltaTime);
}
else
{
player.transform.position += new Vector3(movementDown.x, movementDown.y, -0.1f);
}
}
РЕДАКТИРОВАТЬ: код, который обновляет bool 'onIce':
void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "ice") {
onIce = true;
}
}
void OnTriggerExit2D(Collider2D collision)
{
if (collision.gameObject.tag == "ice")
{
onIce = false;
}
}