有限状态机(续)

news/2024/11/19 9:26:48/

一、添加刀光和场景

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.ppmy.cn/news/1548197.html

相关文章

【WiFi】ubuntu20.4 WiFi6 无线抓包环境搭建及使用

环境说明 笔记本电脑,无线网卡AX200,安装ubuntu20.04 安装无线网卡工具aircrack-ng sudo apt-get install aircrack-ng 安装wireshark sudo add-apt-repository ppa:wireshark-dev/stable sudo apt update sudo apt -y install wireshark sudo apt -…

CSS基础知识01

一、定义 CSS(Cascading Style Sheets,层叠样式表)是一种样式表语言,用于描述HTML文档的呈现和美化内容。 二、css的引入方式 2.1.内联样式(行内样式) 直接在HTML元素的style属性中添加CSS样式。这种方式只…

Flutter:input输入框

输入框: // 是否显示关闭按钮 bool _showClear false; // 文字编辑控制器,监听搜索框的变化。 final TextEditingController _controller TextEditingController(); // 输入框发生变化事件 void _onChange(String value){if(value.length > 0){setS…

游戏引擎学习第16天

视频参考:https://www.bilibili.com/video/BV1mEUCY8EiC/ 这些字幕讨论了编译器警告的概念以及如何在编译过程中启用和处理警告。以下是字幕的内容摘要: 警告的定义:警告是编译器用来告诉你某些地方可能存在问题,尽管编译器不强制要求你修复…

【GAT】 代码详解 (2) 主体框架【pytorch】可运行版本

GRAPH ATTENTION NETWORKS 代码详解 前言一、数据集介绍二、文件整体架构三、GAT代码详解3.1 utils 模块3.1.1 函数 encode_onehot(labels)3.1.2 函数 load_data(path, dataset)3.1.3 函数 normalize_adj(mx)3.1.4 函数 normalize_features(mx)3.1.5 函数 accuracy(output, lab…

【Telephony】Android移动数据网络的控制面和数据面含义

控制面主要负责网络连接的建立和管理,而数据面则负责数据的传输和路由。这两个方面共同协作,为用户提供稳定、高效的移动网络体验。 控制面流程 控制面主要负责处理移动网络的信令和连接管理。当用户尝试使用移动数据网络时,控制面会进行一…

D3基础:绘制圆形、椭圆形、多边形、线、路径、矩形

在D3.js中&#xff0c;可以通过SVG元素来创建各种几何图形。以下是D3.js中常用的几何图形及其简单的创建方法&#xff1a; 1. 圆形 (Circle) 圆形是最基本的形状之一&#xff0c;可以通过<circle>标签来创建。 <!DOCTYPE html> <html> <head><met…

P1048 [NOIP2005 普及组] 采药

P1048 [NOIP2005 普及组] 采药 #include<bits/stdc.h> using namespace std; long long T,M,w[105],t[105],dp[1005][1005]; int main(){cin>>T>>M;for(int i1;i<M;i) cin>>t[i]>>w[i];for(int i1;i<T;i){ //i表示时间限制for(int j1;j&l…