Как мне исправить, что мой двумерный вражеский персонаж не скользит, а останавливается, когда он выдает предупреждение, когда персонаж находится рядом с его диапазоном - PullRequest
2 голосов
/ 26 сентября 2019

В обзоре игр

Я все еще новичок в C #, и я хотел знать, как решить эту проблему.Скелет противника, кажется, скользит, когда достигает диапазона персонажа.Я попытался найти решение, но не смог.

------------------------------ ENEMY SCRIPT--------------------------------

private Rigidbody2D myBody;

[Header("Movement")]
public float moveSpeed;
private float minX, maxX;
public float distance;
public int direction;

private bool patrol, detect;

private Transform playerPos;
private Animator anim;

[Header("Attack")]
public Transform attackPos;
public float attackRange;
public LayerMask playerLayer;
public int damage;

AWAKE

        void Awake()
        {
            anim = GetComponent<Animator>();
            playerPos = GameObject.Find("George").transform;
            myBody = GetComponent<Rigidbody2D>();
        }

ОТКРЫТЫЙ СТАРТ

        private void Start()
        {
            maxX = transform.position.x + (distance);
            minX = maxX - distance;

            //if (Random.value > 0.5) direction = 1;
            //else direction = -1;
        }

ОБНОВЛЕНИЕ

        void Update()
        {
            if (Vector3.Distance(transform.position, playerPos.position) <= 4.0f) patrol = false;
            else patrol = true;
        }

ФИКСИРОВАННОЕ ОБНОВЛЕНИЕ

        private void FixedUpdate()
        {
            if (anim.GetBool("Death"))
            {
                myBody.velocity = Vector2.zero;
                GetComponent<Collider2D>().enabled = false;
                myBody.isKinematic = true;
                anim.SetBool("Attack", false);
                return;
            }


            if (myBody.velocity.x > 0)
            {
                transform.localScale = new Vector2(1f, transform.localScale.y);
                anim.SetBool("Attack", false);
            }
            else if
                (myBody.velocity.x < 0) transform.localScale = new Vector2(-1f, transform.localScale.y);


            if (patrol)
            {
                detect = false;
                switch (direction)
                {
                    case -1:
                        if (transform.position.x > minX)
                            myBody.velocity = new Vector2(-moveSpeed, myBody.velocity.y);
                        else
                            direction = 1;
                        break;
                    case 1:
                        if (transform.position.x < maxX)
                            myBody.velocity = new Vector2(moveSpeed, myBody.velocity.y);
                        else
                            direction = -1;
                        break;
                }
            }
            else
            {
                if (Vector2.Distance(playerPos.position, transform.position) >= 1.0f)
                {
                    if (!detect)
                    {
                        detect = true;
                        anim.SetTrigger("Detect");
                        myBody.velocity = new Vector2(0, myBody.velocity.y);
                    }
                    if (anim.GetCurrentAnimatorStateInfo(0).IsName("detect")) return;

                    Vector3 playerDir = (playerPos.position - transform.position).normalized;

                    if (playerDir.x > 0)
                        myBody.velocity = new Vector2(moveSpeed + 0.4f, myBody.velocity.y);
                    else
                        myBody.velocity = new Vector2(-(moveSpeed + 0.4f), myBody.velocity.y);
                }
                else if (Vector2.Distance(playerPos.position, transform.position) <= 1.0f)
                {
                    myBody.velocity = new Vector2(0, myBody.velocity.y);
                    anim.SetBool("Attack", true);
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...