unity 状态机示范代码
时间: 2023-09-02 09:12:14 浏览: 56
以下是一个简单的状态机示范代码,用于Unity中的游戏开发。这个示例是一个简单的角色控制器,包含三个状态:站立,行走和跳跃。
```csharp
public class CharacterController : MonoBehaviour
{
public float moveSpeed = 5f;
public float jumpForce = 10f;
private Rigidbody2D rb;
private Animator anim;
private enum State
{
Idle,
Walking,
Jumping
}
private State currentState = State.Idle;
void Start()
{
rb = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
}
void Update()
{
switch (currentState)
{
case State.Idle:
HandleIdleState();
break;
case State.Walking:
HandleWalkingState();
break;
case State.Jumping:
HandleJumpingState();
break;
}
}
private void HandleIdleState()
{
anim.SetBool("isWalking", false);
anim.SetBool("isJumping", false);
if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.LeftArrow))
{
currentState = State.Walking;
}
else if (Input.GetKeyDown(KeyCode.Space))
{
currentState = State.Jumping;
}
}
private void HandleWalkingState()
{
anim.SetBool("isWalking", true);
anim.SetBool("isJumping", false);
float moveDirection = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveDirection * moveSpeed, rb.velocity.y);
if (Input.GetKeyDown(KeyCode.Space))
{
currentState = State.Jumping;
}
else if (!Input.GetKey(KeyCode.RightArrow) && !Input.GetKey(KeyCode.LeftArrow))
{
currentState = State.Idle;
}
}
private void HandleJumpingState()
{
anim.SetBool("isWalking", false);
anim.SetBool("isJumping", true);
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
if (rb.velocity.y < 0)
{
currentState = State.Idle;
}
}
}
```
在这个示例中,我们使用了一个枚举类型来表示不同的状态,并在Update()方法中根据当前状态调用相应的处理方法。在每个状态的处理方法中,我们根据用户输入和角色当前状态的情况来更新状态,并对角色的动画和物理属性进行相应的调整。
相关推荐
![unitypackage](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)