【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇3(附项目源码)

文章目录

  • 本节最终效果
  • 前言
  • 素材
  • 人物移动音效
  • 枪口火焰和开火音效
  • 枪口灯光
  • 弹孔和火花
  • 添加武器随镜头手臂摇摆效果
  • 源码
  • 完结

本节最终效果

在这里插入图片描述

前言

本节主要实现添加音效,和一些特效、武器摆动调整。

素材

素材,为了方便我直接用了unity免费的音效输出,后面还会使用他里面的一些特效
https://assetstore.unity.com/packages/templates/systems/low-poly-shooter-pack-free-sample-144839
在这里插入图片描述

人物移动音效

修改PlayerController

MoveSound();

//移动音效
public void MoveSound()
{
    // 如果在地面上并且移动长度大于0.9
    if (isGround && moveDirection.sqrMagnitude > 0.9f)
    {
        audioSource.clip = isRun ? runingSound : walkingSound;
        if (!audioSource.isPlaying) audioSource.Play();
    }
    else
    {
        if (audioSource.isPlaying) audioSource.Pause();
    }
}

配置参数
在这里插入图片描述
测试效果,截屏是没声音的,这里就不演示了
在这里插入图片描述

枪口火焰和开火音效

修改WeaponController

[Header("特效")]
public ParticleSystem muzzleFlash;//枪口火焰特效
[Header("声音")]
private AudioSource audioSource;
public AudioClip fireSound;

private void Start()
{
    currentBullects = bulletsMag;
    audioSource = GetComponent<AudioSource>();
}

// 射击
public void GunFire()
{
    //。。。

    PlayerShootSound();
    muzzleFlash.Play();//枪口火焰
}


//播放射击音效
public void PlayerShootSound()
{
    audioSource.clip = fireSound;
    audioSource.Play();
}

配置参数,在枪口处放置特效
在这里插入图片描述
火焰粒子特效我稍微改了一下参数
在这里插入图片描述

效果
在这里插入图片描述

枪口灯光

灯光介绍:零基础带你从小白到超神14——灯光、摄像机、天空盒、镜子的制作

在枪口处加个点光源,配置参数,并默认关闭灯光
在这里插入图片描述
修改WeaponController

public Light muzzleFlashLight;//枪口火焰灯光

void Update()
{
    if (Input.GetMouseButton(0) && currentBullects > 0)
    {
        GunFire();
    }
    else
    {
        muzzleFlashLight.enabled = false;
    }
}

// 射击
public void GunFire()
{
    //...
    muzzleFlashLight.enabled = true;//枪口灯光
}

效果
在这里插入图片描述

弹孔和火花

子弹和火花为了省事,我直接P_IMP_Concrete的特效分出来
在这里插入图片描述
修改WeaponController

public GameObject hitParticle;//子弹击中火花粒子特效
public GameObject bullectHole;//弹孔

// 射击
public void GunFire()
{
    if (fireTimer < fireRate || currentBullects <= 0) return;
    isFire = true;
    RaycastHit hit;
    Vector3 shootDirection = shooterPoint.forward; // 射击方向(向前)

    //场景显示红线,方便调试查看
    Debug.DrawRay(shooterPoint.position, shooterPoint.position + shootDirection * range, Color.red);

    if (Physics.Raycast(shooterPoint.position, shootDirection, out hit, range)) // 判断射击
    {
        Debug.Log(hit.transform.name + "被击中了");
        GameObject hitParticleEffect = Instantiate(hitParticle, hit.point, Quaternion.identity);//实例出击中特效
        GameObject bullectHoleEffect=Instantiate (bullectHole, hit.point,Quaternion.FromToRotation(Vector3.up,hit.normal));//实例出弹孔号
        Destroy(hitParticleEffect, 1f);
        Destroy(bullectHoleEffect, 3f);
    }
    currentBullects--;
    fireTimer = 0;

    PlayerShootSound();
}

配置参数
在这里插入图片描述
新增ImpactScript 脚本,用于控制弹道击中表面时的效果,播放击中音效,并在一定时间后销毁

public class ImpactScript : MonoBehaviour
{
	[Header("持续时间")]
	public float despawnTimer = 10.0f;

	[Header("音效")]
	public AudioClip[] impactSounds;
	public AudioSource audioSource;

	private void Start()
	{
		// 启动销毁计时器
		StartCoroutine(DespawnTimer());

		// 从数组中随机选择一个音效剪辑
		audioSource.clip = impactSounds[Random.Range(0, impactSounds.Length)];
		// 播放随机音效
		audioSource.Play();
	}

	private IEnumerator DespawnTimer()
	{
		// 等待指定时间
		yield return new WaitForSeconds(despawnTimer);
		// 销毁撞击效果物体
		Destroy(gameObject);
	}
}

挂载配置参数
在这里插入图片描述

效果
在这里插入图片描述

添加武器随镜头手臂摇摆效果

新增

// 武器摇摆
public class WeaponSway : MonoBehaviour
{
    /* 摇摆的参数 */
    public float amount; // 摇摆幅度
    public float smoothAmount; // 平滑值
    public float maxAmount; // 最大摇摆幅度
    private Vector3 originalPosition; // 初始位置

    void Start()
    {
        // 自身位置(相对于父级物体变换得位置)
        originalPosition = transform.localPosition;
    }

    void Update()
    {
        // 设置武器手臂模型位置的值,(鼠标反转)
        float movementX = -Input.GetAxis("Mouse X") * amount;
        float movementY = -Input.GetAxis("Mouse Y") * amount;

        // 限制摇摆范围
        movementX = Mathf.Clamp(movementX, -maxAmount, maxAmount);
        movementY = Mathf.Clamp(movementY, -maxAmount, maxAmount);
        Vector3 finalPosition = new Vector3(movementX, movementY, 0);

        // 手柄位置变换
        transform.localPosition = Vector3.Lerp(transform.localPosition, finalPosition + originalPosition, Time.deltaTime * smoothAmount);
    }
}

配置参数,可以配置到自己喜欢的感觉
在这里插入图片描述
效果,可以看到视角移动枪会有跟着小幅度摆动,很灵动
在这里插入图片描述

源码

源码在最后一节

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/225288.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

zabbix的自动发现和注册、proxy代理和SNMP监控

目录 一、zabbix自动发现与自动注册机制&#xff1a; 1、概念 2、zabbix 自动发现与自动注册的部署 二、zabbix的proxy代理功能&#xff1a; 1、工作流程 2、安装部署 三、zabbix-snmp 监控 1、概念 2、安装部署 四、总结&#xff1a; 一、zabbix自动发现与自动注册…

matlab 点云放缩变换

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 缩放可以独立应用于三个坐标轴,如将点 ( x , y , z ) ( x

k8s官方镜像代理加速

背景 大家可能在云原生领域需要部署周边的一些生态组件时&#xff0c;在国内遇到无法正常拉取镜像&#xff0c;显得就有点苦恼&#xff0c;不过没关系&#xff0c;常见的${{ registry_name }} 例如 “gcr.io”&#xff0c;“registry.k8s.io” Failed to pull image “registry…

2023下半年软件设计师 关于我用了半个月过了软件设计师这件事

前言 废话不多说、看图喽。刚可以查询、我就赶紧去查成绩 上午成绩是57分、下午成绩是45分。下午成绩刚好踩着及格线 有关备考 我是在工作之余外进行的备考、备考前前后后花了半个月。但是备考的很仓促、每天下班都要搞到十一二点。早上赶班车也在刷题&#xff0c;吃饭的时候也…

从cot到agent的survey视频笔记

参考视频&#xff1a; 从CoT到Agent的列车即将发车&#xff0c;请各位旅客尽快上车 姚杳 由于总结不易&#xff0c;所以暂时都是粉丝可见&#xff0c;如果总结的不好见谅。 核心理解点总结&#xff1a; paradigm shifts of cot when cot&#xff1f;推理多的任务时 how cot…

html+css+js 三亚旅游网页设计与制作实例(6个页面)

一、作品介绍 HTMLCSSJS网页设计与制作&#xff0c;三亚旅游网页设计与制作实例&#xff0c; 本实例适合于初学HTMLCSSJS的同学。该案例里面有divcss的样式布局设置&#xff0c;这个实例比较全面&#xff0c;有一级页、二级页、详情页、输入表单等&#xff0c;共6个页面。本文…

智能优化算法应用:基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹰栖息算法4.实验参数设定5.算法结果6.参考文献7.…

一步解决 java.io.FileNotFoundException: 找不到文件异常

1.问题描述 java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp\localhost\uploads\image\20231206\2843cb16-9654-4e52-a757-76e3ca1f80ff.png (系统找不到指定的路径。) 2.原因分析 文件路径中的文件目录不存在 3.解决方案 方案一&#xff1a;如果…

Elaticsearch 学习笔记

文章目录 Elaticsearch 学习笔记一、什么是 Elaticsearch &#xff1f;二、Elaticsearch 安装1 es 安装2 问题解决3 数据格式 三、索引操作1 PUT 请求&#xff1a;在postman中&#xff0c;向 ES 服务器发 PUT 请求&#xff08;PUT请求相当于创建的意思&#xff09;2 GET 请求&a…

关于pycharm代码误删,本地历史恢复

关于pycharm代码误删&#xff0c;本地历史恢复 1.工作中或多或少的出现代码误删&#xff0c;或者其他原因导致我们的辛辛苦苦写的码子没了&#xff0c;一定很着急。 2.我们点击工作目录文件夹或者是项目内鼠标右击&#xff0c;找到local history 然后选择show history,就可以…

工业交换机的内部结构和工作原理,你了解多少?

工业交换机由许多小组件构造而成&#xff0c;因此&#xff0c;为了更全面地了解和认识工业交换机&#xff0c;我们需要了解其内部结构和工作原理。 工业交换机的内部结构&#xff1a; 1、主板&#xff0c;也被称为背板&#xff0c;是计算机的核心部件之一。 为各业务接口和数…

系统调用过程

应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管&#xff0c;因此凡是与共享资源有关的操作&#xff08;如存储分配、/O操作、文件管理等&#xff09;&#xff0c;都必须通过系统调用的方式向操作系统内核提出服务请求&#xff0c;由…

Linux---访问NFS存储及自动挂载

本章主要介绍NFS客户端的使用 创建NFS服务器并通过NFS共享一个目录在客户端上访问NFS共享的目录自动挂载的配置和使用 访问NFS存储 前面介绍了本地存储&#xff0c;本章就来介绍如何使用网络上的存储设备。NFS即网络文件系统&#xff0c; 所实现的是 Linux 和 Linux 之间的共…

HTML基础教程:构建你的第一个个人网页

由于篇幅限制&#xff0c;我将提供一个详细的大纲和一部分文章内容&#xff0c;而不是完整的3000字教程。 HTML基础教程&#xff1a;构建你的第一个个人网页 引言 在这个数字化不断进步的时代&#xff0c;拥有一个个人网页可以说是你数字身份的重要组成部分。无论你是学生、专…

Java网络编程——ServerSocket用法解析

在客户/服务器通信模式中&#xff0c;服务器端需要创建监听特定的端口的ServerSocket&#xff0c;ServerSocket负责接收客户连接请求。 1、构造ServerSocket ServerSocket的构造方法有以下几种重载形式&#xff1a; public ServerSocket() throws IOException; public Serve…

定义一个学生类,其中有3个私有数据成员学号、姓名、成绩,以及若于成员。 函数实现对学生数据的赋值和输出。

#include <stdio.h> // 定义学生类 typedef struct Student { int stuNum; // 学号 char name[20]; // 姓名&#xff0c;假设最长为20个字符 float score; // 成绩 } Student; // 初始化学生信息 void initializeStudent(Student *student, int num, const…

Linux--文件权限与shell外壳的理解

目录 一.Linux的用户与用户切换&#xff0c;提权 二.对文件权限的理解 1.文件权限角色的权限文件属性 2.Linux中的三种角色 3.为什么会存在所属组这个角色 4.文件属性的意义 4.1.第一个字母的意义 4.2 第2——第10个字母的意义 4.3修改文件权限的方法 三.目录权限 四…

vue-draggable-plu

一、介绍 由于 Sortablejs 的 vue3 组件一直没有更新&#xff0c;已经跟 vue3 严重脱节&#xff0c;所以诞生了这个项目&#xff0c;这个组件是基于 Sortablejs 的&#xff0c;所以如果你想了解更多关于 Sortablejs 的信息&#xff0c;可以查看Sortablejs 官网。vue-draggable…

openEuler JDK21 部署 Zookeeper 集群

zookeeper-jdk21 操作系统&#xff1a;openEuler JDK&#xff1a;21 主机名IP地址spark01192.168.171.101spark02192.168.171.102spark03192.168.171.103 安装 1. 升级内核和软件 yum -y update2. 安装常用软件 yum -y install gcc gcc-c autoconf automake cmake make \zl…

低多边形3D建模动画风格纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…