• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Unity FormatException

Object Storage Arubacloud
0 głosów
139 wizyt
pytanie zadane 29 września 2017 w C# przez redstar1 Bywalec (2,200 p.)

Mam w Unity instrukcję warunkową if

 if(comboList != null && comboList.Length > 0)
        {
            int motionIndex = int.Parse(comboList[attackIndex]);

            if(motionIndex < attackAnimations.Length)
            {
                anim.SetInteger(PARAMETER_STATE, 2);
                anim.SetInteger(PARAMETER_ATTACK_TYPE, comboType);
                anim.SetInteger(PARAMETER_ATTACK_INDEX, attackIndex);
            }
        }

Gdy chcę wykonać animację to po wciśnięciu klawisza wyskakuje mi błąd

FormatException: Input string was not in the correct format

Dodam, że na MACu taki problem nie występuje. Czy może mnie ktoś oświecić gdzie tu jest błąd?

komentarz 29 września 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
Pokaż cały skrypt.
komentarz 29 września 2017 przez redstar1 Bywalec (2,200 p.)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterMovement : MonoBehaviour {

    private MovementMotor motor;

    public float moveMagnitude = 0.05f;
    public float speed = 0.7f;
    public float speedMoveWhileAttack = 0.1f;
    public float speedAttack = 1.5f;
    public float turnSpeed = 10f;
    public float speedJump = 20f;

    private float speedMoveMultiplier = 1f;
    private Vector3 direction;
    private Animator anim;
    private Camera mainCamera;

    private string PARAMETER_STATE = "State";
    private string PARAMETER_ATTACK_TYPE = "AttackType";
    private string PARAMETER_ATTACK_INDEX = "AttackIndex";

    public AttackAnimation[] attackAnimations;
    public string[] comboAttackList;
    public int comboType;

    private int attackIndex = 0;
    private string[] comboList;
    private int attackStack;
    private float attackStackTimeTemp;

    private bool isAttacking;

    void Awake()
    {
        motor = GetComponent<MovementMotor>();
        anim = GetComponent<Animator>();
    }

    void Start ()
    {
        anim.applyRootMotion = false;
        mainCamera = Camera.main;
	}

	void Update ()
    {
        HandleAttackAnimations();

        if(MouseLock.MouseLocked)
        {
            if(Input.GetButtonDown("Fire1"))
            {
                Attack();
            }
            if(Input.GetButtonDown("Fire2"))
            {
                Attack();
            }
        }

        MovementAndJumping();
    }

    private Vector3 MoveDirection
    {
        get
        {
            return direction;
        }
        set
        {
            direction = value * speedMoveMultiplier;
            if(direction.magnitude > 0.1f)
            {
                var newRotation = Quaternion.LookRotation(direction);
                transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.deltaTime * turnSpeed);
            }
            direction *= speed * (Vector3.Dot(transform.forward, direction) + 1f) * 5f;
            motor.Move(direction);
            AnimationMove(motor.charController.velocity.magnitude * 0.1f);
        }
    }

    void Moving(Vector3 dir, float mult)
    {
        //speedMoveMultiplier = 1 * mult;
        //MoveDirection = dir;
        if(isAttacking)
        {
            speedMoveMultiplier = speedMoveWhileAttack * mult;
        }
        else
        {
            speedMoveMultiplier = 1 * mult;
        }
        MoveDirection = dir;
    }

    void Jump()
    {
        motor.Jump(speedJump);
    }

    void AnimationMove(float magnitude)
    {
        if(magnitude > moveMagnitude)
        {
            float speedAnimation = magnitude * 2f;
            if(speedAnimation < 1f)
            {
                speedAnimation = 1f;
            }
            if(anim.GetInteger (PARAMETER_STATE) != 2)
            {
                anim.SetInteger(PARAMETER_STATE, 1);
                anim.speed = speedAnimation;
            }
        }
        else
        {
            if(anim.GetInteger (PARAMETER_STATE) != 2)
            {
                anim.SetInteger(PARAMETER_STATE, 0);
            }
        }
    }

    void MovementAndJumping()
    {
        Vector3 moveInput = Vector3.zero;
        Vector3 forward = Quaternion.AngleAxis(-90, Vector3.up) * mainCamera.transform.right;

        moveInput += forward * Input.GetAxis("Vertical");
        moveInput += mainCamera.transform.right * Input.GetAxis("Horizontal");

        moveInput.Normalize();
        Moving(moveInput.normalized, 1f);

        if(Input.GetKey (KeyCode.Space))
        {
            Jump();
        }
    }

    void ResetCombo()
    {
        attackIndex = 0;
        attackStack = 0;
        isAttacking = false;
    }

    void FightAnimation()
    {
        if(comboList !=null && attackIndex >= comboList.Length)
        {
            ResetCombo();
        }

        if(comboList != null && comboList.Length > 0)
        {
            int motionIndex = int.Parse(comboList[attackIndex]);

            if (motionIndex < attackAnimations.Length)
            {
                anim.SetInteger(PARAMETER_STATE, 2);
                anim.SetInteger(PARAMETER_ATTACK_TYPE, comboType);
                anim.SetInteger(PARAMETER_ATTACK_INDEX, attackIndex);
            }
        }
    }

    void HandleAttackAnimations()
    {
        if(Time.time > attackStackTimeTemp + 0.5f)
        {
            attackStack = 0;
        }

        comboList = comboAttackList[comboType].Split("," [0]);

        if(anim.GetInteger(PARAMETER_STATE) == 2)
        {
            anim.speed = speedAttack;
            AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo(0);

            if(stateInfo.IsTag("Attack"))
            {
                int motionIndex = int.Parse(comboList[attackIndex]);

                if (stateInfo.normalizedTime > 0.9f)
                {
                    anim.SetInteger(PARAMETER_STATE, 0);
                    isAttacking = false;
                    attackIndex ++;

                    if(attackStack > 1)
                    {
                        FightAnimation();
                    }
                    else
                    {
                        if(attackIndex >= comboList.Length)
                        {
                            ResetCombo();
                        }
                    }
                }
            }
        }
    }

    void Attack()
    {
        if(attackStack < 1 || (Time.time > attackStackTimeTemp + 0.2f && Time.time < attackStackTimeTemp + 1f))
        {
            attackStack ++;
            attackStackTimeTemp = Time.time;
        }

        FightAnimation();
    }
}

 

komentarz 29 września 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
Upewnij się, że nazwy w animatorze i skrypcie sie zgadzają.

Po za tym nie powinno się nazywać zmiennych z samych wielkich liter w C# nawet jeśli to stała. Ale kwestia formatowania nie ma nic wspólnego z tym. To tylko taka dobra rada na przyszłość.
komentarz 29 września 2017 przez redstar1 Bywalec (2,200 p.)
Nazwy w skrypcie i animatorze sie zgadzają to co może być przyczyną tego errora?
komentarz 30 września 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
Skopiuj cały kod błędu razem ze źródłem.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

–3 głosów
2 odpowiedzi 253 wizyt
pytanie zadane 9 października 2021 w C# przez xkamiz Użytkownik (500 p.)
0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 2 września 2021 w C# przez Jakusss Początkujący (410 p.)
0 głosów
0 odpowiedzi 298 wizyt
pytanie zadane 28 sierpnia 2021 w C# przez Jakusss Początkujący (410 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...