项目实训(十三)——FPS游戏射击反馈震屏及UI子弹数量

一、前言

本篇博客记录的内容为上篇的延续,将介绍完成的射击反馈震屏及UI子弹数量等工作内容。这里实现的是开枪以后抖动屏幕的效果以及子弹数在游戏界面的UI显示。
至此,FPS游戏的单机开发部分就已经大致完成,接下来我们将基于PUN2继续进行游戏的多人化。

二、射击反馈震屏

首先创建了一个CameraSpringUtility脚本。Values是spring施加的一个力度。
UpdateSpring实现的是弹簧弹出去然后把镜头逐渐拉回来的效果。
target一般定为圆心。没有继承MonoBehaviour的话是没有办法直接赋值到组件当中去的。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraSpringUtility
{
    
    
    public Vector3 Values;


    private float frequence;//过渡的效果
    private float damp;
    private Vector3 dampVaules;


    public CameraSpringUtility(float _frequence,float _damp)
    {
    
    
        frequence = _frequence;
        damp = _damp;
    }
    
    public void UpdateSpring(float _deltaTime, Vector3 _target)
    {
    
    
        Values -= _deltaTime * frequence * dampVaules;//从外面施加过来一个向上抬的力
        dampVaules = Vector3.Lerp(dampVaules, Values - _target, damp * _deltaTime);//衰减到target数值
    }
}

然后创建一个CameraSpring脚本,它继承了MonoBehaviour,它才能挂载到我们的物体上。

using System;
using System.Collections;
using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;

public class CameraSpring : MonoBehaviour
{
    
    
    public float Frequence = 25;
    public float Damp = 15;


    public Vector2 MinRecoilRange;//输入的力的最小范围
    public Vector2 MaxRecoilRange;


    private CameraSpringUtility cameraSpringUtility;
    private Transform cameraSpringTransform;

    private void Start()
    {
    
    
        cameraSpringUtility = new CameraSpringUtility(Frequence, Damp);//新建一个对象
        cameraSpringTransform = transform;
    }


    private void Update()
    {
    
    
        cameraSpringUtility.UpdateSpring(Time.deltaTime, Vector3.zero);
        cameraSpringTransform.localRotation = Quaternion.Slerp(cameraSpringTransform.localRotation,
            Quaternion.Euler(cameraSpringUtility.Values), Time.deltaTime * 10);//
    }

	//施加力的一个方法
    public void StartCameraSpring()
    {
    
    
        cameraSpringUtility.Values = new Vector3(0,
            UnityEngine.Random.Range(MinRecoilRange.x, MaxRecoilRange.x),
            UnityEngine.Random.Range(MinRecoilRange.y, MaxRecoilRange.y));
    }
}

然后到FPMouseLook脚本中去,在start函数中声明cameraSpring,找到FiringForTest,在其中引用StartCameraSpring。

cameraSpring = GetComponentInChildren<CameraSpring>();
    public void FiringForTest()
    {
    
    
        currentRecoil += RecoilRange;
        cameraSpring.StartCameraSpring();
        currentRecoilTime = 0;
    }

随后到unity界面中
在这里插入图片描述
在这里插入图片描述
然后开始游戏,进行射击,就会发现实现了一定的屏幕晃动效果。frequence频率越大,抖动就越快,damp数值越大,回到中心的速度就越快。

三、UI子弹数量

对代码修改完成以及在unity中修改添加了UI后,游戏界面的右下角就会显示子弹数量。前面的数字是弹夹中剩余的子弹数,后面的数字是弹夹容纳的最大子弹数量。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Fancy145/article/details/125055928