当前位置: 首页 > news >正文

【Unity笔记】Unity音效管理:ScriptableObject配置 + 音量控制 + 编辑器预览播放自动化实现

摘要:
本文介绍了如何在 Unity 中构建一个高效的音效管理系统,通过 ScriptableObject 实现音效集中配置,支持为每个音效单独设置音量,并通过自定义 Editor 实现音效的可视化预览播放与下拉选择播放功能,整个系统无场景污染、操作便捷,适用于中大型项目的音效统一管理与开发流程提效。

在这里插入图片描述

在 Unity 项目开发中,良好的音效管理系统可以大幅提升开发效率与维护性。尤其是在多人协作、音效较多、需要统一管理的场景下,通过 ScriptableObject 管理音效配置,并结合 Editor 工具自动生成与预览播放功能,是一种高效、专业的解决方案。

本文将从以下几个方面,从0开始构建一个完善的音效管理系统:


一、音效管理系统功能概览

主要包括以下核心功能:

  • ✅ 自动扫描音效文件并生成配置数据(ScriptableObject);
  • ✅ 每个音效支持单独设置播放音量;
  • ✅ 在 Inspector 面板中可预览播放音效;
  • ✅ 无污染场景(不生成临时 GameObject);
  • ✅ 支持通过下拉选择播放指定音效。

二、配置类:使用 ScriptableObject 存储音效列表

定义一个名为 SoundEffectsConfig 的 ScriptableObject 用于存储音效数据,结构如下:

using UnityEngine;
using System.Collections.Generic;[CreateAssetMenu(fileName = "E_SoundEffectsConfig", menuName = "XRCore/音效配置")]
public class SoundEffectsConfig : ScriptableObject
{[System.Serializable]public class SoundEntry{public string name;public AudioClip clip;[Range(0f, 1f)]public float volume = 1.0f;  // 每个音效的独立音量}public List<SoundEntry> soundList = new List<SoundEntry>();
}

使用 [CreateAssetMenu] 后,可在 Unity Project 面板中右键快速创建。


三、自动生成音效配置的 Editor 工具

Assets/Editor/ 下新建一个 SoundEffectsManagerEditor.cs 脚本:

using UnityEditor;
using UnityEngine;
using System.IO;
using System.Linq;public class SoundEffectsManagerEditor : EditorWindow
{private static readonly string defaultAudioPath = "Assets/Resources/Audio/";private static readonly string configAssetPath = "Assets/Resources/E_SoundEffectsConfig.asset";[MenuItem("Tools/SoundManager/Generate configuration")]public static void GenerateSoundConfig(){// 创建目录if (!Directory.Exists("Assets/Resources")){Directory.CreateDirectory("Assets/Resources");AssetDatabase.Refresh();Debug.Log("已创建目录:Assets/Resources/");}if (!Directory.Exists(defaultAudioPath)){Directory.CreateDirectory(defaultAudioPath);AssetDatabase.Refresh();Debug.Log("已创建目录:" + defaultAudioPath);}// 查找所有音效string[] audioGuids = AssetDatabase.FindAssets("t:AudioClip", new[] { defaultAudioPath });var clips = audioGuids.Select(guid => AssetDatabase.LoadAssetAtPath<AudioClip>(AssetDatabase.GUIDToAssetPath(guid))).Where(clip => clip != null).ToList();if (clips.Count == 0){Debug.LogWarning("⚠️ 未在目录中找到任何 AudioClip!");return;}// 加载或创建配置var config = AssetDatabase.LoadAssetAtPath<SoundEffectsConfig>(configAssetPath);if (config == null){config = ScriptableObject.CreateInstance<SoundEffectsConfig>();AssetDatabase.CreateAsset(config, configAssetPath);AssetDatabase.SaveAssets();Debug.Log("已创建新的 SoundConfig.asset");}Undo.RecordObject(config, "更新音效配置");config.soundList.Clear();foreach (var clip in clips){config.soundList.Add(new SoundEffectsConfig.SoundEntry{name = clip.name,clip = clip,volume = 1.0f  // 默认音量});}EditorUtility.SetDirty(config);AssetDatabase.SaveAssets();// ✅ 高亮展示配置文件Selection.activeObject = config;EditorGUIUtility.PingObject(config);Debug.Log($"音效配置更新完成,共 {clips.Count} 个音效已保存到 ScriptableObject。");}
}

四、在 Inspector 中预览音效播放(无污染方式)

使用 AudioSource.PlayClipAtPoint 会在场景中创建临时对象,容易污染编辑环境。我们推荐用如下方式播放预览音效:

private AudioSource previewSource;private void PlayPreview(AudioClip clip)
{if (clip == null) return;if (previewSource == null){GameObject go = EditorUtility.CreateGameObjectWithHideFlags("AudioPreviewer", HideFlags.HideAndDontSave, typeof(AudioSource));previewSource = go.GetComponent<AudioSource>();}previewSource.clip = clip;previewSource.loop = false;previewSource.Play();
}

HideFlags.HideAndDontSave 确保该对象在场景中不保存、不显示、不影响运行。


五、运行时播放音效:支持按名称查找 + 音量控制

使用如下方法在代码中播放:

public class SoundPlayer : MonoBehaviour
{public SoundEffectsConfig config;public string soundName;public void PlaySound(){var entry = config.soundList.FirstOrDefault(e => e.name == soundName);if (entry != null && entry.clip != null){AudioSource.PlayClipAtPoint(entry.clip, transform.position, entry.volume);}else{Debug.LogWarning("音效未找到或为空!");}}
}

六、支持下拉列表选择音效(编辑器拓展)

实现一个自定义 Editor,为 SoundPlayer 脚本提供下拉选择功能,还可以一键预览播放。如下:

[CustomEditor(typeof(SoundPlayer))]
public class SoundPlayerEditor : Editor
{public override void OnInspectorGUI(){var player = (SoundPlayer)target;if (player.config == null){EditorGUILayout.HelpBox("请先拖入音效配置文件", MessageType.Warning);return;}var names = player.config.soundList.Select(s => s.name).ToList();int index = Mathf.Max(0, names.IndexOf(player.soundName));index = EditorGUILayout.Popup("选择音效", index, names.ToArray());player.soundName = names[index];if (GUILayout.Button("▶ 预览播放")){var entry = player.config.soundList.FirstOrDefault(e => e.name == player.soundName);if (entry?.clip != null){PlayPreview(entry.clip);}}DrawDefaultInspector();}private AudioSource previewSource;private void PlayPreview(AudioClip clip){if (previewSource == null){GameObject go = EditorUtility.CreateGameObjectWithHideFlags("AudioPreviewer", HideFlags.HideAndDontSave, typeof(AudioSource));previewSource = go.GetComponent<AudioSource>();}previewSource.clip = clip;previewSource.Play();}
}

总结

通过以上实现,我们构建了一个 高效、可扩展、可视化的音效管理工具链,极大提升了 Unity 项目中音效的管理体验:

功能是否支持
自动扫描音效并生成配置
ScriptableObject 存储数据
每个音效支持独立音量控制
Inspector 中预览播放音效
下拉选择指定音效播放

如果你觉得这篇文章对你有帮助,欢迎点赞收藏、关注专栏!

相关文章:

【Unity笔记】Unity音效管理:ScriptableObject配置 + 音量控制 + 编辑器预览播放自动化实现

摘要&#xff1a; 本文介绍了如何在 Unity 中构建一个高效的音效管理系统&#xff0c;通过 ScriptableObject 实现音效集中配置&#xff0c;支持为每个音效单独设置音量&#xff0c;并通过自定义 Editor 实现音效的可视化预览播放与下拉选择播放功能&#xff0c;整个系统无场景…...

面向高可靠场景的RISC-V低功耗MCU硬件安全设计

该RISC-V架构的低功耗MCU通过多项硬件级安全技术满足工业控制、汽车电子及物联网等领域对可靠性与安全性的需求。其核心特性包含六个方面&#xff1a; 在数据完整性验证与固件安全升级方面&#xff0c;该MCU通过硬件级校验机制&#xff08;如CRC、哈希算法&#xff09;确保固件…...

OpenVINO教程(五):实现YOLOv11+OpenVINO实时视频目标检测

目录 实现讲解效果展示完整代码 本文作为上篇博客的延续&#xff0c;在之前实现了图片推理的基础上&#xff0c;进一步介绍如何进行视频推理。 实现讲解 首先&#xff0c;我们需要对之前的 predict_and_show_image 函数进行拆分&#xff0c;将图像显示与推理器&#xff08;pre…...

【新能源科学与技术】MATALB/Simulink小白教程(一)实验文档【新能源电力转换与控制仿真】

DP读书&#xff1a;新能源科学与工程——专业课「新能源发电系统」 2025a 版本 MATLAB下面进入正题 仿真一&#xff1a;Buck 电路一、仿真目的二、仿真内容&#xff08;一&#xff09;Buck电路基本构成及工作原理&#xff08;二&#xff09;Buck电路仿真模型及元件连接&#xf…...

软件项目实施全流程及交付物清单

需求分析 -> 概要设计 -> 详细设计 -> 开发 -> 测试 -> 部署 -> 上线运行 一、确认项目目标、范围和团队成员 二、收集和分析客户需求&#xff0c;确定需求规格 三、制定详细的项目计划&#xff0c;包括时间表、资源计划、预算 四、系统架构设计&#xf…...

Docker安装ES :确保 Kibana 正确连接 Elasticsearch

在使用 Docker 部署 ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;堆栈时&#xff0c;正确的服务配置和依赖管理至关重要。本文将分享如何优化 Docker Compose 配置&#xff0c;确保 Kibana 能稳定连接到 Elasticsearch&#xff0c;并提供故障排查建议 cd /opt/…...

云贝餐饮 最新 V3 独立连锁版 全开源 多端源码 VUE 可二开

云贝餐饮源码 最新 V3 独立连锁版 全开源 多端源码 VUE 可二开 vue uniapp 独家优化版本 后台管理 Vue 源文件 后台管理文件 yii2 升级包 &#xff08;全开源&#xff09; 收银台 Vue 源文件 装修 Vue 源文件 商家端 uni-app 源文件 用户端 uni-app 源文件 数据库文件 云贝餐饮…...

python异步协程async调用过程图解

1.背景&#xff1a; 项目中有用到协程&#xff0c;但是对于协程&#xff0c;线程&#xff0c;进程的区别还不是特别了解&#xff0c;所以用图示的方式画了出来&#xff0c;用于理清三者的概念。 2.概念理解&#xff1a; 2.1协程&#xff0c;线程&#xff0c;进程包含关系 一…...

【Java学习笔记】选择结构

选择结构 内容结构 一、顺序结构 二、分支控制 &#xff08;1&#xff09;单分支 &#xff08;2&#xff09;双分支 &#xff08;3&#xff09;多分支 &#xff08;4&#xff09;嵌套分支 &#xff08;5&#xff09;switch 分支结构 三、switch和if的比较 一、顺序结构…...

java Nacos

windows下载nacos&#xff0c;版本2.x的&#xff0c;1.0的话会出现“Server check fail, please check server 127.0.0.1 ,port 9848 is available , error {}” 这个鬼问题 下载链接 这里用的是2.0.4版本&#xff0c;启动的话用 startup.cmd -m standalone&#xff0c;单体启…...

c语言之杂识

前言 主要说一下c语言的杂知识 一、预处理指令 1. #include #include指令用于包含其他头文件的内容到当前文件中。这允许您在程序中使用其他模块定义的函数和变量。 示例&#xff1a; #include <stdio.h> // 包含标准输入输出头文件int main() {printf("Hello…...

CSS内边距、外边距、边框

CSS内边距 内边距 &#xff1a;内容区&#xff08;Content&#xff09;与边框&#xff08;Border&#xff09;之间的透明间距&#xff0c;用于增加元素内部的留白。不影响元素内容本身的尺寸&#xff08;如文字大小&#xff09;&#xff0c;但会增大元素的总占用空间。 以下是…...

融山科技前端面经

前端面试问题解答 这次是波珠的第三次面试&#xff0c;持续打怪升级&#xff0c;积累面试中面试官问到的不会的点子。 1.自我介绍 面试官您好&#xff0c;我是来自XX学校XX专业本科的XX名字&#xff0c;然后介绍在学校情况&#xff0c;我就介绍了大一自学前端&#xff0c;然…...

元素滚动和内容垂直居中同时存在,完美的 html 元素垂直居中的方法flex + margin: auto

假设有一个元素 div 作为父容器且宽高固定&#xff0c;里面的内容 content 在父容器中垂直/水平都居中&#xff0c;且当内容很多时&#xff0c;父元素滚动overflow: auto&#xff0c;content的内容要能够完全展示。 我之前在这篇文档提到了两个方法&#xff1a; 使用 flex s…...

STM32F103 单片机(基于 ARM Cortex-M3 内核)的启动过程涉及硬件初始化、固件配置和程序执行流程。

1. 启动模式与地址映射 STM32F103 的启动模式由 BOOT0 和 BOOT1 引脚配置决定&#xff0c;不同的启动模式对应不同的存储器映射&#xff1a; 启动模式 映射地址范围 说明 主 Flash 0x08000000~0x0807FFFF 用户程序存储在 Flash 中&#xff0c;复位后从 Flash 启动&#xff08…...

c++中iota容器和fill的区别

在C 中&#xff0c;std::iota 和 std::fill 都是标准库中的函数&#xff0c;用于对序列进行操作&#xff0c;它们的功能和用法如下&#xff1a; std::iota 功能&#xff1a;std::iota 函数用于将一个连续的递增序列赋值给指定范围的元素。它接受三个参数&#xff0c;第一个参…...

Kafka集群

kafka集群: kafka-server-start.sh;kafka-server-stop.sh cd/opt/software/kafka/ kafka.sh上传:cd /usr/local/bin/ 执行文件变成绿色&#xff1a;chmod 777 kafka.sh Kafka.sh start Xcall.sh jps...

多源数据集成技术分析与应用实践探索

摘要&#xff1a;本文聚焦多源数据集成技术&#xff0c;深入剖析联邦式、基于中间件模型及数据仓库三类主流技术的侧重点与应用场景。通过实际案例阐述多源数据集成应用构建过程&#xff0c;旨在为企业数据整合与共享提供理论指导与实践参考&#xff0c;助力企业提升数据利用效…...

UniOcc:自动驾驶占用预测和预报的统一基准

25年3月来自 UC Riverside、U Wisconsin 和 TAMU 的论文"UniOcc: A Unified Benchmark for Occupancy Forecasting and Prediction in Autonomous Driving"。 UniOcc 是一个全面统一的占用预测基准&#xff08;即基于历史信息预测未来占用&#xff09;和基于摄像头图…...

反向代理和DDNS的区别是什么?

反向代理&#xff08;Reverse Proxy&#xff09;和动态域名解析&#xff08;DDNS&#xff0c;Dynamic Domain Name System&#xff09;是两种不同的网络技术&#xff0c;虽然它们都与外部访问内部服务相关&#xff0c;但解决的问题和应用场景完全不同。具体区别如下&#xff1a…...

markdown展示数学公式

要让Markdown正确展示数学公式&#xff0c;你需要使用支持数学公式渲染的工具&#xff0c;比如在支持LaTeX语法的Markdown编辑器中进行编写。 Markdown本身并不原生支持数学公式的渲染&#xff0c;但许多Markdown解析器&#xff08;例如在GitHub、Jupyter Notebooks、或一些博…...

服务器编译环境配置及数据接收脚本编写(11)

文章目录 一、本章说明二、云端服务器Python编译环境配置三、传感数据解析脚本编写一、本章说明 注:本节为【基于STM的环境监测系统(节点+云服务器存储+QT界面设计)】项目第11篇文章,上面两篇介绍了云服务器数据库的安装与相关设置,本章主要介绍在服务器中安装Python编译…...

硬件基本概念

目录 基本概念 电压 电流 串联、并联 欧姆定律 电路仿真网址&#xff1a; 功率 焦耳定律 AC220V 转 DC5V 基本电子元器件了解 电阻&#xff1a;&#xff08;电阻器&#xff09; 电容 电感 继电器 二极管 三极管 晶振&#xff08;晶体振荡器&#xff09; 光耦…...

Spark与Hadoop之间的联系与区别

联系 生态系统互补&#xff1a; Hadoop 是一个分布式存储和计算平台&#xff0c;主要包括 HDFS&#xff08;分布式文件系统&#xff09;和 MapReduce&#xff08;分布式计算框架&#xff09;。Hadoop 提供了可靠的数据存储和分布式计算的基础。 Spark 是一个高性能的分布式计算…...

spark和Hadoop之间的对比与联系

对比 计算模型&#xff1a; Hadoop&#xff1a;采用MapReduce计算模型&#xff0c;分map与reduce两个阶段&#xff0c;数据处理按阶段顺序执行&#xff0c;数据处理按阶段顺序执行&#xff0c;中间结果会写入磁盘&#xff0c;I/O开销大。 Spark&#xff1a;基于弹性分布式数…...

0802api设计和实战-网络ajax请求1-react-仿低代码平台项目

文章目录 1 API设计1.1 用户功能1.1.1 获取用户信息1.1.2 注册1.1.3 登录 1.2 问卷功能1.2.1 获取单个问卷1.2.2 获取问卷列表1.2.3 创建问卷1.2.4 更新问卷1.2.5 批量彻底删除问卷1.2.6 复制问卷 1.3 小结 2 实战2.1配置axios2.2 封装API和测试2.3 新建问卷2.4 自定义hooks封装…...

什么是CAN的非破坏仲裁?

‌CAN总线的非破坏性仲裁‌是一种在多个设备同时发送数据时&#xff0c;通过标识符&#xff08;ID&#xff09;优先级来决定哪个设备可以优先发送数据的机制。其核心思想是&#xff1a;当多个设备同时发送数据时&#xff0c;ID值较小的数据具有更高的优先级&#xff0c;能够优先…...

无线监控系统分类全解析:搭配视频融合平台EasyCVR开启高效监控

随着技术的发展&#xff0c;无线监控系统在家庭、小型企业、特定行业以及室外恶劣环境中的应用越来越广泛。本文将介绍几种常见的无线监控系统&#xff0c;分析其优缺点&#xff0c;并结合EasyCVR视频融合平台的功能&#xff0c;探讨如何优化无线监控系统的性能和应用。 一、主…...

并行RANSAC平面拟合(C++)

依赖库 1&#xff09;Eigen 2&#xff09;GLM 算法大致思路 Step 1&#xff1a;源点云随机采样3个点&#xff1b; Step 2&#xff1a;3个点拟合平面&#xff0c;统计符合该平面模型的点&#xff0c;为inlier点&#xff1b; Step 3&#xff1a;判断inlier点比例是否达到阈…...

Docker核心技术精讲:从入门到企业级实战

&#xfeff;第一章>Docker概述 第二章>Docker安装与镜像下载加速 第三章>镜像 第四章>容器 第五章>发布镜像到阿里云或私有化仓库 第六章>容器卷 第七章>Docker安装常用软件 第八章>Docker高级版-Mysql主从复制、Redis主从、分布式存储 第九章>Doc…...

【KWDB 创作者计划】_深度学习篇---向量指令集

文章目录 前言一、加速原理数据级并行&#xff08;DLP&#xff09;计算密度提升减少指令开销内存带宽优化隐藏内存延迟 二、关键实现技术1. 手动向量化&#xff08;Intrinsics&#xff09;优势挑战 2. 编译器自动向量化限制 3. BLAS/LAPACK库优化4. 框架级优化 三、典型应用场景…...

音视频小白系统入门课-4

本系列笔记为博主学习李超老师课程的课堂笔记&#xff0c;仅供参阅 往期课程笔记传送门&#xff1a; 音视频小白系统入门笔记-0音视频小白系统入门笔记-1音视频小白系统入门笔记-2音视频小白系统入门笔记-3 将mp4文件转换为yuv文件 ffmpeg -i demo.mp4 # 输入文件-an …...

CS144 Lab3 实战记录:TCP 发送器实现

文章目录 1 实验背景与目标2 TCP发送器的实现2.1 整体流程2.2 核心组件2.3 窗口管理2.4 关键函数实现2.4.1 push函数2.4.2 receive函数2.4.3 tick函数 3 仓库地址 1 实验背景与目标 在 TCP 协议中&#xff0c;发送器&#xff08;TCP Sender&#xff09;是实现可靠传输的核心组…...

Transformer:引领深度学习新时代的架构

引言 在深度学习的快速发展历程中&#xff0c;Transformer 架构如同璀璨的新星&#xff0c;照亮了自然语言处理&#xff08;NLP&#xff09;以及计算机视觉&#xff08;CV&#xff09;等众多领域的前行道路。自 2017 年在论文《Attention Is All You Need》中被提出以来&#…...

基于RabbitMQ实现订单超时自动处理

基于RabbitMQ实现订单超时自动处理 引言 在现代电商系统中&#xff0c;订单超时自动取消是一个常见的业务需求。传统的定时任务扫描数据库的方式存在性能瓶颈和实时性差的问题。本文将介绍如何使用RabbitMQ的消息队列和死信队列特性&#xff0c;构建一个高效可靠的订单超时自…...

nginx实现同一个端口监听多个服务

nginx实现同一个端口监听多个服务 前言原理配置不同域名基于路径&#xff08;URL 路由&#xff09;​补充 总之完结撒花&#xff0c;如有需要收藏的看官&#xff0c;顺便也用发财的小手点点赞哈&#xff0c;如有错漏&#xff0c;也欢迎各位在评论区评论&#xff01; 前言 受同…...

用 Firebase 和 WebRTC 快速搭建一款浏览器视频聊天应用

在现代 Web 应用中&#xff0c;实时音视频通信变得越来越普遍。本文将通过一个简洁实用的示例&#xff0c;带你一步步搭建一个基于 Firebase WebRTC 的浏览器视频聊天应用&#xff0c;帮助你理解 WebRTC 的核心通信机制以及如何借助 Firebase 进行信令传输。 &#x1f527; 技…...

记录一次OGG进程abended,报错OGG-01431、OGG-01003、OGG-01151、OGG-01296问题的处理

1. ogg进程abended的几种常见原因&#xff1a; 1. undo表空间不足导致abended。 2. 数据不一致&#xff0c;违反唯一约束导致abended。 3. 源端和目标端表结构不一致导致abended。 4. 源端表名过长&#xff0c;同步到目标端报错导致abended。 5. OGG-03517字符集转换问题导…...

机器学习分类算法详解:原理、应用场景与测试用例

机器学习分类算法详解:原理、应用场景与测试用例 一、基础分类算法 1. 决策树 原理: 通过递归划分数据集,选择信息增益(ID3)或基尼系数(CART)最大的特征作为分裂节点,构建树结构。叶节点代表分类结果。应用场景: 医疗诊断(需解释性,如判断疾病风险)。客户分群(如根…...

机器人仿真:相机信息仿真及显示

1)概要 除了激光雷达以外,机器人常用的视觉传感器还包括相机,相机图像能够获取真实世界的真实颜色和纹理信息,能够被用于进行目标检测、分割和追踪。 2)结果展示...

车载功能测试-车载域控/BCM控制器测试用例开发流程【用例导出方法+优先级划分原则】

目录 1 摘要2 位置灯手动控制简述2.1 位置灯手动控制需求简述2.2 位置灯手动控制逻辑交互图 3 用例导出方法以及优先级原则3.1 用例导出方法3.1.1 用例导出方法介绍3.1.2 用例导出方法关键差异分析 3.2 优先级规则3.2.1 优先级划分的核心原则3.2.2 具体等级定义与判定标准 3.3 …...

gem5-gpu教程05 内存建模

memory-modeling|Details on how memory is modeled in gem5-gpu ====== gem5-gpu’s Memory Simulation ====== gem5-gpu, for the most part, eschews GPGPU-Sim’s separate functional simulation and instead uses gem5’s execute-in-execute model. Therefore, memory …...

如何提升个人解决问题的能力?

提升个人解决问题的能力是一个系统性工程&#xff0c;涉及思维、知识、经验和心态的多方面提升。以下是一些具体且可操作的方法&#xff0c;帮助你逐步增强解决问题的能力&#xff1a; 1. 培养「结构化思维」 明确问题本质&#xff1a; 遇到问题时&#xff0c;先问自己&…...

CSS清楚默认样式

* {margin: 0;padding: 0;box-sizing: border-box;} 这段 CSS 代码是一个常见的全局样式重置代码块&#xff0c;它会对网页中的所有元素&#xff08;通过通配符 * 选择器&#xff09;应用相同的样式规则&#xff0c;下面分别解释每一条规则的作用。 margin: 0; 在 HTML 中&a…...

问题:raw.githubusercontent无法访问

问题&#xff1a;raw.githubusercontent无法访问 文章目录 一、问题二、hosts文件2.1、hosts文件简介2.2、hosts文件位置2.3、hosts文件修改 3、解决方法3.1、查询出raw.githubusercontent.com的ip地址3.2、在/etc/hosts里填写IP地址3.3、再次执行命令 4、一些常用IP地址 一、问…...

【C语言】文本操作函数fgetc、fputc、fgets、fputs、fprintf、fscanf、fread、fwrite

一、介绍 二、简要概括 三、函数的使用 1、fgetc和fputc int fgetc ( FILE * stream ); 从文件中读取信息&#xff0c;每次读取一个字符 从流中获取字符返回指定流的内部文件位置指示符当前指向的字符。然后将内部文件位置指示符推进到下一个字符 int main() {//打开文件FI…...

(19)VTK C++开发示例 --- 分隔文本读取器

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 本例采用坐标和法线&#xff08;x y z nx ny nz&#xff09;的纯文本文件&#xff0c;并将它们读入vtkPolyData并显示…...

C++ 中 std::thread 的高级应用

C 中 std::thread 的高级应用、常见坑&#xff0c;以及如何封装为类&#xff0c;适合做线程池、异步任务、后台 worker、并发调度等场景。内容结构如下&#xff1a; 一、std::thread 高级用法清单 1. 线程成员函数调用&#xff08;this 捕获&#xff09; class Worker { publ…...

Linux之彻底掌握防火墙-----安全管理详解

—— 小 峰 编 程 目录&#xff1a; 一、防火墙作用 二、防火墙分类 1、逻辑上划分&#xff1a;大体分为 主机防火墙 和 网络防火墙 2、物理上划分&#xff1a; 硬件防火墙 和 软件防火墙 三、硬件防火墙 四、软件防火墙 五、iptables 1、iptables的介绍 2、netfilter/…...

Linux安装ffmpeg7.1操作说明

安装yasm Index of /projects/yasm/releases/ 下载最新版 wget https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz 解压 tar -zxvf yasm-1.3.0.tar.gz 编译及安装 ./configure make && make install 安装ffmpeg https://download.csdn.net/down…...