Страница 1 из 1

Проблема с анимацией Unity

СообщениеДобавлено: 30 май 2021, 16:13
Daytly
Я новичок! У меня есть анимация на кнопку и мне надо что бы она запускалась из скрипта то есть в скрипте есть функция которая вызывается при нажатии на кнопку и при определённом условии проигрывалась анимация как мне это сделать? Подскажите пожалуйста и кстати таких кнопок несколько и на всех них есть этот скрипт.
Я пытался что то сделать но не вышло вот скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class X2cript : MonoBehaviour
{
public int money;
public Text moneyText;
public bool Multu=false;
public GameObject X2effect;
private bool slower;
public AudioSource Abuy;
public AudioSource AD;
[SerializeField] Transform gameobj;
[SerializeField] private Animator anim;
private void Awake()
{
anim = GetComponent<Animator>();
}
private Statit Staite
{
get { return (Statit)anim.GetInteger("State"); }
set { anim.SetInteger("staite", (int)value); }
}
void Start()
{
money = PlayerPrefs.GetInt("Money");
gameobj = GetComponent<Transform>();

}
void Update()
{
Staite = Statit.Z;
money = PlayerPrefs.GetInt("Money");
moneyText.text = money.ToString();
}
public void BuyM()
{
Multu = PlayerPrefs.GetInt("M") == 1 ? true : false;
if (money >= 10 && Multu == false)
{
Abuy.Play();
Instantiate(X2effect, gameobj.position, Quaternion.identity);
money -= 10;
Multu = true;
PlayerPrefs.SetInt("Money", money);
PlayerPrefs.SetInt("M", Multu ? 1 : 0);
}
else
{
AD.Play();
Staite = Statit.Z;
}
}
public void beck()
{
SceneManager.LoadScene(0);
}
public void SlowerF()
{
slower = PlayerPrefs.GetInt("Slow")==1?true:false;
if(money>=25 && !slower)
{
Abuy.Play();
Instantiate(X2effect, gameobj.position, Quaternion.identity);
money -= 25;
slower = true;
PlayerPrefs.SetInt("Money", money);
PlayerPrefs.SetInt("Slow", slower ? 1 : 0);
}
else if(money < 25 && slower)
{
AD.Play();
Staite = Statit.Z;
}
}
}


public enum Statit
{
Statik,
Z
}

Re: Проблема с анимацией Unity

СообщениеДобавлено: 30 май 2021, 17:01
Alkos26Rus
Синтаксис:
Используется csharp
get { return (Statit)anim.GetInteger("State"); }
set { anim.SetInteger("staite", (int)value); }
 

в одном случае State, в другом staite. Проверь правильность написания переменных, имя переменной должно точно совпадать с именем в Animator

Re: Проблема с анимацией Unity

СообщениеДобавлено: 30 май 2021, 18:48
Daytly
Проверил всё на десять раз у меня есть другой проект там я делал также и всё работало может это связано с тем что объект кнопка? Для точности я все названия копировал и вставлял ошибок быть не должно

Re: Проблема с анимацией Unity

СообщениеДобавлено: 30 май 2021, 18:55
Alkos26Rus
Daytly писал(а):Проверил всё на десять раз у меня есть другой проект там я делал также и всё работало может это связано с тем что объект кнопка? Для точности я все названия копировал и вставлял ошибок быть не должно

Ну я же вижу что даже здесь значения разные, запрашиваешь одно, а назначаешь другое, или это так и должно быть?
Синтаксис:
Используется csharp
get { return (Statit)anim.GetInteger("State"); }
set { anim.SetInteger("staite", (int)value); }
 

Re: Проблема с анимацией Unity

СообщениеДобавлено: 30 май 2021, 19:05
Daytly
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class X2cript : MonoBehaviour
{
public int money;
public Text moneyText;
public bool Multu=false;
public GameObject X2effect;
private bool slower;
public AudioSource Abuy;
public AudioSource AD;
[SerializeField] Transform gameobj;
[SerializeField] private Animator anim;
private void Awake()
{
anim = GetComponent<Animator>();
}
private States State
{
get { return (States)anim.GetInteger("state"); }
set { anim.SetInteger("state", (int)value); }
}
void Start()
{
money = PlayerPrefs.GetInt("Money");
gameobj = GetComponent<Transform>();

}
void Update()
{
State = States.Statik;
money = PlayerPrefs.GetInt("Money");
moneyText.text = money.ToString();
}
public void BuyM()
{
Multu = PlayerPrefs.GetInt("M") == 1 ? true : false;
if (money >= 10 && Multu == false)
{
Abuy.Play();
Instantiate(X2effect, gameobj.position, Quaternion.identity);
money -= 10;
Multu = true;
PlayerPrefs.SetInt("Money", money);
PlayerPrefs.SetInt("M", Multu ? 1 : 0);
}
else
{
AD.Play();
State = States.Z;
}
}
public void beck()
{
SceneManager.LoadScene(0);
}
public void SlowerF()
{
slower = PlayerPrefs.GetInt("Slow")==1?true:false;
if(money>=25 && !slower)
{
Abuy.Play();
Instantiate(X2effect, gameobj.position, Quaternion.identity);
money -= 25;
slower = true;
PlayerPrefs.SetInt("Money", money);
PlayerPrefs.SetInt("Slow", slower ? 1 : 0);
}
else if(money < 25 && slower)
{
AD.Play();
State = States.Z;
}
}
}


public enum States
{
Statik,
Z,
}
вот я исправил немного изменил названия и в Animator не забыл изменить но ни чего не выходит

Re: Проблема с анимацией Unity

СообщениеДобавлено: 30 май 2021, 19:39
Alkos26Rus
Ну у тебя в апдейте назначается анимация, то что ты при нажати кнопки на один кадр поменяешь значение, это ни чего не изменит, все равно апдейт опять вернет значение
Синтаксис:
Используется csharp
void Update()
{
State = States.Statik;
 

Re: Проблема с анимацией Unity

СообщениеДобавлено: 31 май 2021, 14:27
Daytly
Да я это заметил но исправить не знаю как можно как-нибудь из скрипта узнать закончилась ли анимация или какой-нибудь таймер например если значение изменилось то через 1 секунду оно изменится обратно на 0. Наверное я тебе надоел, но не подскажешь?

Re: Проблема с анимацией Unity

СообщениеДобавлено: 31 май 2021, 14:43
Alkos26Rus
Daytly писал(а):Да я это заметил но исправить не знаю как можно как-нибудь из скрипта узнать закончилась ли анимация или какой-нибудь таймер например если значение изменилось то через 1 секунду оно изменится обратно на 0. Наверное я тебе надоел, но не подскажешь?

Создай метод окончания анимации
например:
Синтаксис:
Используется csharp
public void EndAnim(){
State = States.Statik;
}
 

В анимации можно создать событие в любой точки времени и вызвать EndAnim

Re: Проблема с анимацией Unity

СообщениеДобавлено: 31 май 2021, 14:44
Daytly
А как в скрипте найти это событие

Re: Проблема с анимацией Unity

СообщениеДобавлено: 31 май 2021, 14:46
Daytly
или что как при каком условии вызывать данную функцию

Re: Проблема с анимацией Unity

СообщениеДобавлено: 31 май 2021, 15:27
Alkos26Rus
Его не нужно искать в скрипте. В скрипте создается метод а вызывается он из события анимации.
https://docs.unity3d.com/Manual/script-AnimationWindowEvent.html