我知道如何基本上做到这一点,但我正在制作具有多重攻击的剑。我知道如何进行过渡并进行布局,但我不确定出了什么问题。
这是代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SwAnim : MonoBehaviour
{
bool swing;
public Animator anim;
bool sprint;
bool air;
// Start is called before the first frame update
void Start()
{
swing = false;
sprint = false;
}
// Update is called once per frame
void Update()
{
if (Input.GetButton("Fire3") && !swing)
{
sprint = true;
anim.SetBool("Sprinting", true);
anim.SetBool("Swinging", false);
}
if (!Input.GetButton("Fire3"))
{
sprint = false;
anim.SetBool("Sprinting", false);
//anim.SetBool("Swinging", false);
}
if (Input.GetButton("Fire1") && !swing && !air)
{
anim.SetBool("Sprinting", false);
Swing();
}
if (Input.GetButton("Fire1") && air)
{
// anim.SetBool("Sprinting", false);
//Swing();
}
}
void Swing()
{
// anim.Play();
swing = true;
StartCoroutine(Cool());
StartCoroutine(CoolTwo());
// StartCoroutine(Trail());
}
IEnumerator Cool()
{
anim.SetBool("Swinging", true);
yield return new WaitForSeconds(0.2f);
anim.SetBool("Swinging", false);
}
IEnumerator CoolTwo()
{
//canSwing = false;
yield return new WaitForSeconds(0.5f);
swing = false;
}
public void Grounded(bool isGr)
{
if (!isGr)
{
anim.SetBool("In Air", true);
air = true;
Debug.Log("jump");
}
if (isGr)
{
anim.SetBool("In Air", false);
air = false;
Debug.Log("nope");
}
}
}
问题是在空中按下 Fire1 时。 它不会让玩家摆动,这很好,但是一旦我输入另一个功能,它就不起作用了。
这是我试过的。
if (Input.GetButton("Fire1") && air )
{
anim.SetBool("Sprinting", false);
AirSwing();
}
}
void Swing()
{
// anim.Play();
swing = true;
StartCoroutine(Cool());
StartCoroutine(CoolTwo());
// StartCoroutine(Trail());
}
void AirSwing()
{
StartCoroutine(CoolAir());
}
IEnumerator Cool()
{
anim.SetBool("Swinging", true);
yield return new WaitForSeconds(0.2f);
anim.SetBool("Swinging", false);
}
IEnumerator CoolAir()
{
anim.SetBool("Swinging", true);
anim.SetBool("In Air", true);
yield return new WaitForSeconds(0.5f);
anim.SetBool("Swinging", false);
anim.SetBool("In Air", false);
}
如果有人能帮忙,那就太好了! 我对 Unity 和 C# 还是有点陌生。
好吧,你已经踏上了编程的光滑道路,突然将自己置于顺序条件执行陷阱中:D 没关系,兄弟,我们都经历过。所以,我会尽快解释,希望你能弄清楚剩下的部分。首先,您的
Hero
有一个状态:行走、站立、接地、飞行、摆动等。这里有两个问题:它很复杂并且在 Update()
上下文之外基本上不存在。所以首先我们介绍state
并立即拆分它:
enum GroundState
{
Grounded,
JumpingUp,
Levitating,
FallingDown
}
enum AttackState
{
Idle,
Swinging,
Blocking
}
这些状态将帮助您构建游戏逻辑,然后再控制动画。您可以构建您喜欢的任何逻辑,添加更多状态,通过进入另一个状态来阻止一个状态,只需为每个行为至少提供它自己的方法(一个类更好,但是嘿,你很快就会明白为什么),所以你会至少阅读你自己的代码感觉更好 :)