蓝图控制
inputAxis MoveForward----------add movement input; Axis value---Scale value//前后移动
inputAxis MoveRight----------add movement input, Axis value---Scale value//左右移动
get control rotation/*控制组件*/-----get forward vector/*角度力*/------movement inpt下的world direction
get control rotation/*控制组件*/-----get right vector/*角度力*/------movement inpt下的world direction
inputAxis true/*左右转动视角*/------Add controller yaw input/*Z轴移动*/-------Visual angle--val
inputAxis lookup/*上下转动视角*/------Add controller pitchinput/*Y轴移动*/-------Visual angle--val
记得use pawn control rotation选上,才可以上下移动,但是这样做会有一个问题,向量传递,视角向下会移动很慢。所以control rotation 只用Z轴链接。
停止移动观察视角
选择chaercatermovement组件下的orient rotation to movement。需要注意的是,class defaults下的use controller rotation yaw需要关闭,否则会冲突
创建动画
Animation--animation blue 上面选择animlnstance,下面选择骨骼,自己导入的动画即可。
打开animation graph创建新的状态机,new state machine
创建移动混合空间
Animation-------blue space 1d,不带1D是8个方向。这个是根据速度来播放动画,根据速度自己拖拽右边动画。
设置完成,点击animation state ,将做好的动画拖进去就可以了。然后拖拽绿色那个属性,点promote to variable设置成变量,根据速度调整。
选择event graph里面try get pawn owner的return value----isvalid/*判断是否为空*/,在从该节点下获取速度get velocity,从velocity下的return value-----vector length。
按ALT+设置好的speed给is valid赋值,将vector length的return value链接到speed上面。
event blue update animationli链接exec。
做完之后点击mesh 将做好的new blueprint传给anim class。
这个时候测试,发现速度一直是600,需要在蓝图里创建left shift(左边的shift),将左边的character movement 拖下来-----setmax speed 再复制一个,将left shift pressed链接,速度设置200,release链接一个,设置200。
跳跃
在new anima blue print,在try get pawn owner-----get movement component-----is falling/*判断人物是否悬空*/,在return value------promote to varible。
在new state machine 下将跳跃的状态拖进来,并按顺序链接,由walk----start--loop---end---walk。这个时候还需要一个条件切换状态,点击线上按钮,将is air按ctrl拖进去,连接上。需要注意的是,这里的动画不要重复播放。
然后从start 到loop那个互换按钮get relevant anim time remaning(start)/*获取当前动画播放剩余比例*/-----float/*设置剩余时间*/---result。
loop到end互换按钮,同样拖拽air---输入not boolean----result,end到walk如同start一样get relevant anim time remaning(end)括号里面是end.
最后在new blueprint 里创建space bar, pressed----jump.设置跳跃高度在charcatermovement下jump velocity调整。release---stop jumping