C# Unity animasyon ayarlarıyla oynayınca düşman hareket etmiyor

BurakKapci

Zeptopat
Katılım
20 Mayıs 2023
Mesajlar
16
Daha fazla  
Cinsiyet
Erkek
Herkese iyi sosyaller, Unity'de kullandığım düşman assetinde bazı animasyonlarda sıkıntı olduğu için "animation" penceresinden bazı düzenlemeler yapıyordum fakat bu düzenlemeleri yaptıktan sonra düşman karakteri hareket etmemeye başladı. Ben sorun karakterdedir diye başka bir düşman asseti üzerinde daha denedim ama olmadı.

İsteyenler için kodlar şu şekilde:


C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyAI : MonoBehaviour
{
    [SerializeField]
    private GameObject player;

    [SerializeField]
    private Transform[] positions;

    [SerializeField]
    private float moveSpeed;

    [SerializeField]
    private float startTime;

    [SerializeField]
    private float distance;

    [SerializeField]
    private Transform targetObject;

    [SerializeField]
    private float startFollowSpeed;

    private float followSpeed;

    private Vector2 targetedObject;

    private float waitTime;

    private bool facingright;

    private Vector3 offset;

    [SerializeField]
    private float eStartTime;

    private float eWaitTime;

    private bool isAttacking;

    [SerializeField]
    private float attackDistance;

    /*[SerializeField]
    private Collider2D attackCollider;*/

    SpriteRenderer sr;
    Animator anim;

    RaycastHit2D hit;

    private void Start()
    {

        sr = GetComponent<SpriteRenderer>();
        anim = GetComponent<Animator>();

        facingright = true;

        waitTime = startTime;

        Physics2D.queriesStartInColliders = false;

        offset = new Vector3(0, -0.20f, 0);

        eWaitTime = eStartTime;

        isAttacking = false;

        followSpeed = startFollowSpeed;

    }


    private void Update()
    {
        EnemyRay();
        targetedObject = new Vector2(targetObject.position.x, transform.position.y);
    }

   
    void EnemyRay()
    {

        hit = Physics2D.Raycast(transform.position + offset,transform.right, distance);

        if (hit.collider == player.GetComponent<CapsuleCollider2D>())
        {
            Debug.DrawLine(transform.position, hit.point, Color.red);
            EnemyFollow();
        }

        else
        {
            Debug.DrawLine(transform.position + offset,transform.right * distance, Color.green);
            EnemyMovement();
        }

    }

    public void EnemyFollow()
    {

        if (Vector2.Distance(transform.position,targetedObject) < attackDistance)
        {
            anim.SetTrigger("Attack");
        }
        else
        {
            anim.SetBool("IsRunning", true);
            transform.position = Vector2.MoveTowards(transform.position, targetedObject, followSpeed * Time.deltaTime);

        }
    }

    void EnemyMovement()
    {
        if (facingright)
        {
            if (waitTime <= 0)
            {
                transform.position = Vector2.MoveTowards(transform.position, positions[0].position, moveSpeed * Time.deltaTime);
                anim.SetBool("IsRunning", true);


                if (Vector2.Distance(transform.position, positions[0].position) == 0)
                {
                    waitTime = startTime;
                    transform.rotation = Quaternion.Euler(0, 180, 0);
                    facingright = false;
                }
            }
            else
            {
                waitTime -= Time.deltaTime;
                anim.SetBool("IsRunning", false);
            }

        }
        else
        {
            if (waitTime <= 0)
            {
                transform.position = Vector2.MoveTowards(transform.position, positions[1].position, moveSpeed * Time.deltaTime);
                anim.SetBool("IsRunning", true);


                if (Vector2.Distance(transform.position, positions[1].position) == 0)
                {
                    waitTime = startTime;
                    transform.rotation = Quaternion.Euler(0, 0, 0);
                    facingright = true;
                }
            }
            else
            {
                anim.SetBool("IsRunning", false);
                waitTime -= Time.deltaTime;
            }

        }
    }

    void EnemyAttack()
    {
        if(!isAttacking)
        {
            isAttacking = true;
           
            eWaitTime = eStartTime;

            followSpeed = 0;

        }

        if(isAttacking)
        {
            if(eWaitTime == 0)
            {
                isAttacking = false;

                followSpeed = startFollowSpeed;
            }
            else
            {
                eWaitTime -= Time.deltaTime;
            }
        }

    }



}
 
Son düzenleyen: Moderatör:

Geri
Yukarı