Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Тепается при повороте Unity

Nebo Vremya Ученик (119), на голосовании 5 месяцев назад
Что делать, если при повороте персонажа он телепортируется в другой конец карты?
Голосование за лучший ответ
Татьяна Просветленный (36374) 6 месяцев назад
Проблема с телепортацией персонажа при повороте в Unity может быть вызвана несколькими причинами. В коде, который вы показали, используется изменение масштаба объекта для поворота персонажа. Однако, если объект имеет родительский объект или сложную иерархию, изменение масштаба может привести к неожиданным перемещениям.

Вот несколько шагов, которые могут помочь решить проблему:

Проверка иерархии объектов: Убедитесь, что объект персонажа не вложен в другие объекты, у которых также могут изменяться координаты или масштаб.

Центрирование персонажа: Проверьте, что центр объекта (pivot point) находится в правильном положении. Если он смещен, изменение масштаба может привести к перемещению персонажа.

Использование переворота через Rotation: Вместо изменения масштаба попробуйте изменить вращение объекта. Это можно сделать следующим образом:

 void Flip() 
{
facingRight = !facingRight;
transform.Rotate(0f, 180f, 0f);
}
Отладка кода: Добавьте логирование перед и после изменения масштаба или вращения, чтобы увидеть, как изменяются координаты объекта. Это поможет понять, в какой момент происходит телепортация.
улучшенныйо код
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Run : MonoBehaviour
{
private Rigidbody2D rb;
private float horizontalMove = 0f;
private bool facingRight = true;

[Header("Player Movement Settings")]
public Animator animator;
public float speed = 1f;

void Start()
{
rb = GetComponent();
}

void Update()
{
horizontalMove = Input.GetAxisRaw("Horizontal") * speed;
animator.SetFloat("HorizontalMove", Mathf.Abs(horizontalMove));
}

private void FixedUpdate()
{
Vector2 targetVelocity = new Vector2(horizontalMove * 10f, rb.velocity.y);
rb.velocity = targetVelocity;

if (facingRight == false && horizontalMove > 0)
{
Flip();
}
else if (facingRight == true && horizontalMove < 0)
{
Flip();
}
}

void Flip()
{
facingRight = !facingRight;
transform.Rotate(0f, 180f, 0f);
}
}
Nebo VremyaУченик (119) 6 месяцев назад
да, у меня спрайт в родительском объекте, я попробовал Ваш вариант, проблема все равно возникает
Похожие вопросы