当前位置: 首页 > article >正文

有限状态机(续)

一、添加刀光和场景

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中的设置


http://www.kler.cn/a/400293.html

相关文章:

  • 01_MinIO部署(Windows单节点部署/Docker化部署)
  • 数据分析24.11.13
  • ChatGPT学术专用版,一键润色纠错+中英互译+批量翻译PDF
  • 【Telephony】Android移动数据网络的控制面和数据面含义
  • 微信小程序-prettier 格式化
  • Java基础-集合
  • 跨平台WPF框架Avalonia教程 十
  • Spring Boot出现java: 错误: 无效的源发行版:16的解决方式
  • 缓存与数据库不一致的解决方案:深入理解与实践
  • Prometheus结合K8s(二)使用
  • Linux多线程(线程池与单例模式)
  • Java项目实战II基于Java+Spring Boot+MySQL的共享汽车管理系统(源码+数据库+文档)
  • uniapp 设置form表单以及验证密码
  • SQL,力扣题目1369,获取最近第二次的活动
  • uniapp Uview上传图片组件Upload会自动刷新
  • mysql的my.cnf配置文件参数说明
  • go语言中的占位符有哪些
  • 性能调优专题(12)之垃圾收集器ParNewCMS与底层三色标记算法详解
  • idea 通过git撤销commit但未push的操作
  • 没钱买KEGG怎么办?REACTOME开源通路更强大
  • 4K双模MiniLED显示器哪个好
  • 大数据平台的网络安全架构
  • 学习笔记024——Ubuntu 安装 Redis遇到相关问题
  • 【网络安全】SSL(二):Keyless SSL技术细节
  • 电子电气架构 --- 车载通信框架和对应技术
  • 使用MaxKB搭建知识库问答系统并接入个人网站(halo)