【unity小技巧】最简单的FPS游戏准心跳动动画控制

简介: 【unity小技巧】最简单的FPS游戏准心跳动动画控制

前言

游戏准心跳动在FPS也是比较常用的功能,可以增强游戏反馈打击感,丰富游戏内容,实现准心跳动的方式五花八门,我不知道别人是怎么做的,但是我自认为我这种应该是最简单的,继续看下去你就知道了。

绘制简单的准心UI

注意不同位置的准心都进行了边缘定位,这样可以方便的控制父类尺寸大小变化来控制整个准心的变化

实现不同状态准心大小变化

新增CrossHair代码,挂载在准心父类上

MovementScript是控制角色移动的代码,具体可以查看之前的文章:

unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡,复制粘贴即用

public class CrossHair : MonoBehaviour
{
    public MovementScript movementScript;
    [Header("UI")]
    
    public float smoothness = 10f;//变变化平滑值
    private RectTransform crossQuarter; //准心UI
    Vector2 crossQuarterSize;//保存准心初始尺寸

    [Header("判断")]
    bool isMove;//是否在移动
    bool isWalking;//是否正在行走
    bool isRuning; //是否正在奔跑
    bool isCrouching; //是否正在下蹲

    private void Start()
    {
        crossQuarter = GetComponent<RectTransform>();
        
        crossQuarterSize = crossQuarter.sizeDelta;
    }

    void Update()
    {
        isMove = Vector3.SqrMagnitude(new Vector3(movementScript.moveDirection.x, 0, movementScript.moveDirection.z)) > 0;
        isRuning = movementScript.isRun && isMove;
        isCrouching = movementScript.isCrouching;
        isWalking = !isRuning && !isCrouching && isMove;

        if (isWalking)
        {
            //行走时的准心开合度
            ExpandCrossUpdate(1.5f);
        }
        else if (isRuning)
        {
            //奔跑时候的准心开合度(2倍)
            ExpandCrossUpdate(2f);
        }
        else if (isCrouching)
        {
            //下蹲时候的准心开合度(-2倍)
            ExpandCrossUpdate(0.6f);
        }
        else
        {
            //站立时,不调整准心开合度
            ExpandCrossUpdate(1f);
        }
    }

    //根据指定大小,来增加或减小准心的开合度
    public void ExpandCrossUpdate(float expandDegree)
    {
        Vector2 targetSize = crossQuarterSize * expandDegree;
        crossQuarter.sizeDelta = Vector2.Lerp(crossQuarter.sizeDelta, targetSize, Time.deltaTime * smoothness);
    }
}

效果

image.png

射击准心跳动的效果

修改代码

if (Input.GetKey(KeyCode.Mouse0))
{
    Invoke("Shoot", 0.1f);//模拟射击间隔0.1s
}

void Shoot(){
    ExpandCrossUpdate(2.5f);
}

效果

image.png

好了,就是这么简单!

目录
相关文章
|
4天前
|
存储 JSON 关系型数据库
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
14 2
|
4天前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(上)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
10 2
|
4天前
|
图形学
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
5 0
|
4天前
|
存储 JSON 图形学
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
6 0
|
4天前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
7 0
|
4天前
|
图形学
【unity小技巧】unity通过代码进行更改后处理效果
【unity小技巧】unity通过代码进行更改后处理效果
6 0
|
4天前
|
图形学
【unity小技巧】unity3D寻路指示轨迹预测
【unity小技巧】unity3D寻路指示轨迹预测
10 0
|
4天前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
8 0
|
4天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
16 2
|
4天前
|
图形学
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
15 0