Проблема с юнити
вот код\
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class Controller : MonoBehaviour
{
// переменные
[NonSerialized] public bool canMove;
[NonSerialized] public bool canAnim;
[NonSerialized] public float maxX, minX; // Границы движения по оси X
[NonSerialized] public float checkRadius;
public float speed = 10f; // Скорость персонажа
public GameObject minposx;
public GameObject maxposx;
private Animator anim;
private Vector2 targetPosition; // Вектор целевой позиции
[NonSerialized] public LayerMask whatIsGround;
// присвоение значений
private void Start()
{
anim = GetComponent<Animator>();
targetPosition = transform.position; // Инициализация с текущей позицией
minX = minposx.transform.position.x;
maxX = maxposx.transform.position.x;
}
// само передвижение
private void Update()
{
// canMove = Physics2D.OverlapCircle(transform.position, transform.localScale.x / 2, whatIsGround);
Print();
// Проверяем нажатие клавиш и обновляем targetPosition
if (Input.GetKey(KeyCode.A) && transform.position.x > maxX && canMove == true)
{
targetPosition = new Vector2(maxpos(),-4.07f);
StartCoroutine(AfterMove());
}
else if (Input.GetKey(KeyCode.D) && transform.position.x < minX && canMove == true)
{
targetPosition = new Vector2(mixpos(),-4.07f);
StartCoroutine(AfterMove());
}
// Перемещаем персонажа к targetPosition
transform.position = Vector2.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);
}
// методы для упрощения жизни
public void Print()
{
Debug.Log(canMove);
}
public void Print1(){
Debug.Log("КАНТАКТ");
}
public float maxpos(){
float x = maxposx.transform.position.x;
return x;
}
public float mixpos(){
float x = minposx.transform.position.x;
return x;
}
// отслеживание ококнчания движения
private void OnCollisionEnter2D(Collision2D other) {
canMove = true;
canAnim = false;
Print();
}
private void OnTriggerStay2D(Collider2D other) {
canMove = false;
canAnim = true;
}
// private void OnTriggerExit2D(Collider2D other) {
// canAnim = true;
// Debug.Log(canAnim);
// }
// куратина на анимку
private IEnumerator AfterMove(){
yield return new WaitForSeconds(0.13f);
new WaitUntil(()=> transform.position.x == minX || transform.position.x == maxX);
if (transform.position.x == maxX && canAnim == true){
anim.SetTrigger("left");
}
else if (transform.position.x == minX && canAnim == true){
anim.SetTrigger("right");
}
}
} вот видео с проблемой
https://youtu.be/KtvqxivUAYI
и проблема в том что криво работает аниматор кто знает как это решить помогите пожалуйста и объясните в чем причина
По дате
По рейтингу
Добрый день.
Непонятно чего вы хотите.
Попробуйте в аниматоре убрать галочку HasExitTime или+и transitiontime(вроде бы так) поставить на 0
и проверить.
Лучше вены вскрой чем в этом разберись
Видео по теме