有限状态机(续)
一、添加刀光和场景
1、资源链接:
武器刀光:https://assetstore.unity.com/packages/tools/particles-effects/melee-weapon-trail-1728
场景:https://assetstore.unity.com/packages/3d/environments/fantasy/casual-tiny-environment-jungle-set-169765
2、实现原理
(1)场景
在地板上添加一个盒装控制器,取消网格材质
在场景中的四周添加网格碰撞器
(2)刀光
将光效的脚本覆盖之前的拖尾脚本
设置一个起点和终点
在代码中更改API
二、摄像机震动(击打效果)
1、unity设置
创建一个空物体作为父级,管理所有的子级摄像机
添加一个振动监听
同时需要一个脚本挂在到被监听的对象身上
在代码中选择旧版种类
使用6Dshake 下面的两个值是振动的强度
2、代码调用
在控制层写这个方法
//屏幕震动
public void ScreenImpulse()
{
impulseSource.GenerateImpulse();
}
在武器层调用这个方法
三、摄像机碰撞
添加一个虚拟摄像机的扩展功能,增加摄像机碰撞器
一般调整摄像机半径,可以实现较好的效果;
图层要选择所有,使摄像机与所有的图层碰撞;
设置一个与fllowPos点的目标距离 0.5合适;
四、命中效果(屏幕后处理)
1、添加后处理文件
五、相机平滑位移(Dotween)
使用Dotween插件和Cinemachine插件共同实现
在模型层增加一个动画事件,调用这个摄像机的位移方法
在玩家层增加这个摄像机位移方法
在配置层定义这个相机位移的数据,并且这个位移效果可能有多个,所以是一个数组
1、配置层
// 一次摄像机位移的全部数据
[Serializable]
public class CameraMoveModel
{
//相机要偏移的程度
public Vector3 Target;
//多久偏移,平滑时间(速度)
public float Time;
//回归时间
public float BackTime;
}
2、玩家层
声明两个变量
在start中,先获取摄像机目标的位置,转化为一个v3类型的
然后把这个位置的本地坐标赋值给摄像机坐标
写一个相机位移的方法并且接收三个参数,对应配置中的三个参数
调用Dotween插件中的方法
先位移摄像机的位置加上一个偏移值,然后使用Lamboo表达式委托,执行回到原来的位置
//基于攻击的相机移动
public void CameraMoveForAttack(Vector3 offset,float time,float backTime)
{
//花time的时间去到offset的位置
//经过backTime时间回归到cameaPos的位置
cameraTarget.DOLocalMove(camerPos + offset, time).onComplete = () =>
{
cameraTarget.DOLocalMove(camerPos, backTime);
};
}
3、模型层
因为配置中是一个数组的形式,所以在这里接收一个index
然后在SO配置文件里面写入第几个这里就会传入几
然后调用这个方法,并且传入参数
六、角色平滑位移
不使用Dotween来进行移动的原因是:UCC在移动时会有碰撞,不会穿模
与摄像机平滑移动差不多
角色的移动要使用CharacterController
1、配置层
// 一次角色位移的全部数据
[Serializable]
public class CharacterMoveModel
{
//角色要偏移的程度
public Vector3 Target;
//多久偏移,平滑时间(速度)
public float Time;
}
2、玩家层
使用协程来调用攻击移动方法;
注:协程传参数修改的原因是,v3会导致移动方向相反,应该使用自身的坐标方向
3、模型层
调用玩家层的方法,可以看作是一个动画事件
这里面调用方法传入的参数,就是配置SO中的设置