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

news2024/11/27 20:58:11

文章目录

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

本节最终效果

在这里插入图片描述

前言

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

素材

素材,为了方便我直接用了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。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二证券:政策稳预期强信心 民间投资结构性亮点纷呈

民营经济是中国特色社会主义商场经济的重要组成部分&#xff0c;是推动中国式现代化和高质量展开的生力军。本年以来&#xff0c;国内外环境仍然复杂多变&#xff0c;我国民营企业展开耐性不减。受访专家标明&#xff0c;跟着支撑民营经济展开的系列严峻抉择计划安置执行落地&a…

sql注入 [GXYCTF2019]BabySQli1

打开题目 多次尝试以后我们发现存在一个admin的账号&#xff0c;但是密码我们不知道 我们尝试一下万能密码 admin or 11 -- q 报错 我们尝试bp抓一下包看看 看着很像编码 先去base32解码 再base64解码 得到 我们从这个sql语句中得到注入点为name 根据报错信息我们知道是…

Java网络编程——非阻塞通信

对于用ServerSocket以及Socket编写的服务器程序和客户程序&#xff0c;它们在运行过程中常常会阻塞。例如当一个线程执行ServerSocket的accept()方法时&#xff0c;假如没有客户连接&#xff0c;该线程就会一直等到有了客户连接才从accept()方法返回。再例如当线程执行Socket的…

【深度学习】Adversarial Diffusion Distillation,SDXL-Turbo 一步出图

代码&#xff1a; https://huggingface.co/stabilityai/sdxl-turbo 使用 SDXL-Turbo 是SDXL 1.0的精炼版本&#xff0c;经过实时合成训练。SDXL-Turbo 基于一种称为对抗扩散蒸馏 (ADD) 的新颖训练方法&#xff08;请参阅技术报告&#xff09;&#xff0c;该方法允许在高图像质…

免费的AI智能改写工具,让你的文章每一篇都是原创

在当今数字化的时代&#xff0c;对于各行各业都带来了深刻的变革。在文案创作领域&#xff0c;AI智能改写工具成为写作者们提高效率、拓展创作思路的得力助手。本文将深入探讨AI智能改写工具的现状和发展趋势。 AI智能改写工具大全 让我们回顾一下AI智能改写工具的发展历程以…

MySQL为何偏爱B+树索引

一、MySQL、B树概念 MySQL是一种关系型数据库&#xff0c;它使用SQL语言来操作数据。SQL语言可以实现对数据的增删改查等操作&#xff0c;但是如果数据量很大&#xff0c;那么这些操作的效率就会很低。为了提高效率&#xff0c;MySQL引入了索引的概念。 索引是一种数据结构&am…

市场上好用的aspera替代方案,你知道哪些

Aspera作为一个高速文件传输方案曾经非常受欢迎&#xff0c;但是其昂贵的价格却限制了许多用户的选择&#xff0c;因此市场上出现了众多Aspera替代方案&#xff0c;本文将会介绍市场上最好的Aspera替代方案。 最近几年&#xff0c;网络传输已成为现代商业运作中必不可少的一部…

Qt6 QRibbon 一键美化Qt界面

强烈推荐一个 github 项目&#xff1a; https://github.com/gnibuoz/QRibbon 作用&#xff1a; 在几乎不修改任何你自己代码的情况下&#xff0c;一键美化你的 UI 界面。 代码环境&#xff1a;使用 VS2019 编译 Qt6 GUI 程序&#xff0c;继承 QMainWindow 窗口类 一、使用方法 …

QT+Unity3D 超详细(将unity3D与QT进行连接,并实现信息传递)

QTUnity3D连接 在QT中连接unity3D&#xff0c;首先要有一个unity.exe执行文件。在这里不提供unity执行文件的编写&#xff0c;只提供QT这边与unity3D连接和信息传递。 创建项目 创建一个新的项目&#xff0c;我创建的项目名称如下。 下图是我建立新项目的文件。APP文件就是…

Spring boot 使用Redis 消息发布订阅

Spring boot 使用Redis 消息发布订阅 文章目录 Spring boot 使用Redis 消息发布订阅Redis 消息发布订阅Redis 发布订阅 命令 Spring boot 实现消息发布订阅发布消息消息监听主题订阅 Spring boot 监听 Key 过期事件消息监听主题订阅 最近在做请求风控的时候&#xff0c;在网上搜…

智能成绩表 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题目描述 小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗? 输入描述 第1行输入两个整数,学生人数n和科目数量m。0<n<100,0<m<10 第2行输入m个科目名称,彼此之间用空格隔开。科目名称只由英文…

备战2024年1月AMC8美国数学竞赛新方式:刷在线真题集(附资源)

今天是2023年12月7日&#xff0c;距离暂定于2024年1月19日举办的AMC8美国数学竞赛的举办日期还有42天&#xff0c;有志于尽早出国留学&#xff0c;或者小升初冲击名校的孩子们相信已经在如火如荼地利用课余时间上辅导班或者自学。 为了帮助大家提高备考2024年1月份AMC8竞赛的效…

二百一十、Hive——Flume采集的JSON数据文件写入Hive的ODS层表后字段的数据残缺

一、目的 在用Flume把Kafka的数据采集写入Hive的ODS层表的HDFS文件路径后&#xff0c;发现HDFS文件中没问题&#xff0c;但是ODS层表中字段的数据却有问题&#xff0c;字段中的JSON数据不全 二、Hive处理JSON数据方式 &#xff08;一&#xff09;将Flume采集Kafka的JSON数据…

设计一算法,对单链表实现就地逆置

对单链表逆置&#xff0c;要联想到单链表的头插性质 举个例子&#xff1a;现在有一个空链表&#xff0c;我们依次对它进行头插123 那么形成的链表是321&#xff0c;这样就形成了逆置 //单链表就地逆置 //思路&#xff1a;把原表接到一个新表上&#xff0c;然后对原表进行头插 …

实例分割 Mask-RCNN

参考文章 使用LabelMe标注目标检测数据集并转换为COCO2017格式_labelme转coco-CSDN博客 数据集选择 voc 这次不选择voc&#xff0c;因为文件组织太难了 voc2012文件夹组织 COCO COCO介绍 MC COCO2017年主要包含以下四个任务&#xff1a;目标检测与分割、图像描述、人体关…

【论文阅读】Bayes’ Rays:神经辐射场的不确定性量化

【论文阅读】Bayes’ Rays&#xff1a;神经辐射场的不确定性量化 1. Introduction2. Related work3. Background3.2. Neural Laplace Approximations 4. Method4.1. Intuition4.2. Modeling perturbations4.3. Approximating H4.4. Spatial uncertainty 5. Experiments & A…

多域名SSL证书该怎么分类

多域名SSL证书多域名SSL证书是一种网络安全工具&#xff0c;它能够为多个域名提供加密和安全保障。多域名SSL证书可以同时保护多个不同的域名站点&#xff0c;为用户打造安全可靠的网络环境。今天就随SSL盾小编了解多域名SSL证书的分类。 1.多域名SSL证书按照验证方式分为DV基础…

Java项目学生管理系统六后端补充

班级管理 1 班级列表&#xff1a;后端 编写JavaBean【已有】编写Mapper【已有】编写Service编写controller 编写Service 接口 package com.czxy.service;import com.czxy.domain.Classes;import java.util.List;/*** author 桐叔* email liangtongitcast.cn* description*/ p…

老师可以做副业吗

当老师&#xff0c;除了教学工作之外&#xff0c;还可以怎样来丰富自己的职业体验和增加收入呢&#xff1f; 自媒体作者 许多教师选择成为自媒体作者&#xff0c;分享自己的教育心得、教学经验以及与学生相处的生活状态等。通过撰写文章、发布在社交媒体上&#xff0c;不仅可以…

单片机第三季-第六课:STM32标准库

1&#xff0c;为什么会有标准外设库 传统单片机软件开发方式&#xff1a; (1)芯片厂商提供数据手册、示例代码、开发环境&#xff1b; (2)单片机软件工程师面向产品功能&#xff0c;查阅数据手册&#xff0c;参考官方示例代码进行开发&#xff1b; (3)硬件操作的方式是用C语言…