Unity-动作系统-案例学习(1)人物移动和转向

更新时间:2023-06-17 11:37:17 阅读: 评论:0

Unity-动作系统-案例学习(1)⼈物移动和转向系列⽂章⽬录
(更新中。。。)
⽬录
前⾔
本⼈对游戏的动作系统⽐较感兴趣,同时打算尽可能系统的学习Unity3d的动作系统,再次记录基于unity案例的学习历程。实现效果(⽰例):
提⽰:以下是本篇⽂章正⽂内容,下⾯案例可供参考
⼀、⼈物的站⽴状态
不同状态的参数切换:
在defaultIdle中添加StateMachineBehaviour的派⽣类;
在脚本中实现⼀定时间后更改整数参数的函数(接⼝)(创建脚本时会⾃动⽣成接⼝的模板)
protected float ChangeTime;
protected bool idleState = fal;
protected float idleTime = 0f;
protected readonly int hashOfRandomIdle = Animator.StringToHash("RandomIdle");
protected readonly int hashOfDefaultIdleState = Animator.StringToHash("DefaultIdleState");//默认idle标签
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
挚爱的英文
ChangeTime = Random.Range(5f,8f);
googo>zmridleState = true;
animator.SetInteger(hashOfRandomIdle,0);
}
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
idleState = fal;
}dees
// OnStateMove is called right after Animator.OnAnimatorMove()
override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{fsk
idleTime += Time.deltaTime;
if(animator.GetCurrentAnimatorStateInfo(0).tagHash == hashOfDefaultIdleState && idleTime >= ChangeTime)
{
idleTime = 0f;
int index = Random.Range(1, 4);
//Debug.Log("idle:" + index);
animator.SetInteger(hashOfRandomIdle, index);//随机赋值 1 到 3
}
}
OnstateEnter:进⼊该状态时⾃动调⽤,idleTime = 0,idle状态参数设置为0;
OnstateMove:  在Animator.OnAnimatorMove()后调⽤,对idleTime计时,达到⼀定时间随机切换idle状态;
默认状态,
随机状态:
⼆、⼈物的移动实现
质量管理体系标准实现⼈物的向前移动,⾸先实现的只是向朝向移动,不涉及转向。
1. 添加必要组件
为⼈物添加animator、character Controller组件,新建⼀个MyPlayerInput、MyPlayerController脚本。        设置⼈物为Player层级
2. Animator状态结构体设置
Motion混合树:
这⾥只⽤1D就⾏了。在脚本中不断更新forwardSpeed的速度,从⽽控制⼈物的前进速度和前进状态(idle、walk、run)。
3. MyPlayerInput脚本实现:
public class MyPlayerInput : MonoBehaviour
{
public static MyPlayerInput m_Input
{
get
{
return m_Instance;
}
}
施工许可证管理办法
protected static MyPlayerInput m_Instance;
yangquanprotected Vector2 m_MoveInput;
protected Vector2 m_CameraInput;
protected bool m_Jump;差距英语
protected bool m_attack;
[HideInInspector]
public bool playerInputBlock;
public bool Attack
{
get
{
return m_attack && !playerInputBlock;//还要不处于其他状态
}
}
public Vector2 MoveInput
{
get
{
return m_MoveInput;
}
}
public Vector2 CameraInput
{
get
{
return m_CameraInput;
}
}
public bool Jump
{
get
{
return m_Jump;
阴极射线
}

本文发布于:2023-06-17 11:37:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/975229.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:状态   实现   学习   系统   时间
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图