Тавтология в коде управления персонажем 2D

Программирование на Юнити.

Тавтология в коде управления персонажем 2D

Сообщение Artemach_q 03 дек 2018, 21:38

Всем доброго времени суток.
Ребята, есть код персонажа. Делаю 2D игру, и не могли бы вы помочь немного с кодом. Он работает не так, как хотелось бы, а я не могу понять что не так.
Огромное спасибо тем, кто откликнется.
В общем, управление влево и вправо работает нормально (анимация), но когда прыгаю, то анимация ходьбы продолжается, есть анимация стрельбы, но она тоже странно работает.
И я пытался сделать приседание персонажа (2D), нужно просто брать у персонажа CapsuleCollider2D и менять Size по Y. Не могу догнать как сделать приседание и тоже анимацию, которая не будет перебиваться другой анимацией.
Вот код...
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterMovement : MonoBehaviour
{

    public GameObject Player;
    public Animator anim;
    Rigidbody2D rb;
    public float speed, jumpPower;
    public Quaternion constRotation;
        public float ShootTimer = 2f;

    public bool grounded = false;
    public Collider2D[] groundCollisions;
    public float groundCheckRadius = 0.5f;
    public LayerMask groundLayer;
    public Transform groundCheck;

    public bool move;

    private float JumpCount;

    public float timeDelay = 0.2f;
    float timer;

    public AudioSource sourse;
    public AudioClip jumpClip;
    public AudioClip walkClip;
    public AudioClip deadClip;
        public AudioClip shootClip;

    void Start ()
    {
        rb = GetComponent<Rigidbody2D>();
        sourse = GetComponent<AudioSource>();
        anim = GetComponentInChildren<Animator>();
        }


    void FixedUpdate()
    {
        if (grounded)
        {
            move = true;
        }

        transform.rotation = constRotation;
        float x = Input.GetAxis("Horizontal");


        groundCollisions = Physics2D.OverlapCircleAll(groundCheck.position, groundCheckRadius, groundLayer);

        if (groundCollisions.Length > 0)
            grounded = true;
        else
            grounded = false;

        if (grounded)
        {
            anim.SetBool("jump", false);
        }
        else
        {
            anim.SetBool("jump", true);
        }

        if (x != 0)
        {
            if (grounded)
            {
                if (timer > 0)
                {
                    timer -= Time.deltaTime;
                }

                                if (timer <= 0) {
                                        sourse.PlayOneShot (walkClip, 0.5f);
                                        timer = timeDelay;
                                }

            }
            else
            {

                anim.SetBool("move", false);
            }
            if (move)
            {
                anim.SetBool("move", true);
                rb.velocity = new Vector2(x * speed, rb.velocity.y);
                        }

        }
        else
        {
            anim.SetBool("move", false);
        }

        //JUMP

        if (Input.GetButtonDown("Jump") && grounded)
        {

            if (JumpCount < 1)
            {
            Vector3 jump = new Vector3(0.0f, 700.0f, 0.0f);
            sourse.PlayOneShot(jumpClip, GameManager.volumeCount);
            rb.AddForce(jump);
            JumpCount++;
            }
        }

        if (Input.GetButtonDown("Crouch"))
        {
            float floatx1 = 0f;
             float floaty1 = -.275f;
             float floatx2 = .5f;
             float floaty2 = .55f;
             Vector2 offset = new Vector2(floatx1, -floaty1);
             Vector2 size = new Vector2(floatx2, floaty2);
        }

                ShootTimer -= Time.deltaTime;
                if (Input.GetButtonDown ("Shoot") && grounded) {
                                if (ShootTimer <= 0) {
                                        anim.SetBool ("shoot", true);
                                        sourse.PlayOneShot (shootClip, GameManager.volumeCount);
                                        ShootTimer = 1f;
                                }
                }
                else {
                        anim.SetBool ("shoot", false);
                }

                if (x > 0)
                        constRotation.y = 0;
                if (x < 0)
                        constRotation.y = 180;
                       
    }


    private void OnCollisionEnter2D(Collision2D col) {
        JumpCount = 0;
    }

    private void OnCollisionStay2D(Collision2D col)
    {
        if (!grounded && col.gameObject.tag == "Ground" || col.gameObject.tag == "Border" || col.gameObject.tag == "Bounce")
        {
            move = false;
        }
    }
}

 
Artemach_q
UNец
 
Сообщения: 1
Зарегистрирован: 03 дек 2018, 21:30

Re: Тавтология в коде управления персонажем 2D

Сообщение DimaJoke 04 дек 2018, 11:55

Сделай булево, которое отвечает за то, стоит ли игрок на земле. Если ТРу, то анимация ходьбы или чего там, если Фолз, то анимация прыжка
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12