Top.Mail.Ru
Ответы

Проблема с юнити

вот код\

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
и проверить.

Аватар пользователя
Ученик

Лучше вены вскрой чем в этом разберись



Видео по теме