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

【Unity3D赛车游戏优化篇】【十】汽车粒子特效和引擎咆哮打造极速漂移

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity游戏demo

🅰️Unity3D赛车游戏



文章目录

    • 🅰️Unity3D赛车游戏
    • 前言
    • 🎶(==A==)烟雾粒子特效
        • 😶‍🌫️初步添加
        • 😶‍🌫️漂移烟雾粒子参数设置和位置设置后的效果
        • 😶‍🌫️漂移烟雾排放量与速度关联
        • 😶‍🌫️最终脚本
    • 🎶(==B==)引擎咆哮
        • 😶‍🌫️资源下载
        • 😶‍🌫️多普勒效应
        • 😶‍🌫️ 四声道代码资源导入
    • 🎶(==C==)漂移轨迹
        • 😶‍🌫️拖尾渲染器参数
        • 😶‍🌫️拖尾渲染器添加
        • 😶‍🌫️核心代码:
        • 😶‍🌫️添加漂移音效
        • 😶‍🌫️最终代码
    • 🅰️


前言


😶‍🌫️版本: Unity2021
😶‍🌫️适合人群:Unity初学者进阶
😶‍🌫️学习目标:3D赛车游戏的基础制作
😶‍🌫️技能掌握:

Unity3D游戏制作片段【一】


🎶(A烟雾粒子特效


😶‍🌫️初步添加


在这里插入图片描述

在这里插入图片描述

  • 新建脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:   汽车特效管理 
//___________创建者:_____梅西湖_____
//_____________________________________
//-------------------------------------
public class CarEffect : MonoBehaviour
{public ParticleSystem[] smoke;public CarMoveControl carControl;void Awake(){smoke = new ParticleSystem[4];//给有烟雾数组初始化赋值for (int i = 0; i < 4; i++){smoke[i] = transform.GetChild(1).GetChild(i).GetComponent<ParticleSystem>();}//初始化CarMoveContorl脚本carControl = gameObject .GetComponent<CarMoveControl>();StopSmoke();}private void Update(){//如果烟雾判断开关开启-按下空格或者 烟雾开关开启if(carControl.playPauseSmoke || InputManager.InputManagerment.handbanl ) StarSmoke();else StopSmoke();}//烟雾特效开始public void StarSmoke(){for (int i = 0; i < 4; i++){smoke[i].Play();}}//烟雾特效停止public void StopSmoke(){for (int i = 0; i < 4; i++){smoke[i].Stop();}}
}
  • CarMoveContorl漂移板块中新增代码
    在这里插入图片描述
  • 相关参数官方解释

WheelHit.sidewaysSlip
WheelHit


😶‍🌫️漂移烟雾粒子参数设置和位置设置后的效果


在这里插入图片描述

  • 参数设置
    在这里插入图片描述

😶‍🌫️漂移烟雾排放量与速度关联


  • 脚本修改
    //烟雾特效开始public void StarSmoke(){for (int i = 0; i < 4; i++){//var自动变成需要的类型,“你变我也变”var emisiion = smoke[i].emission;emisiion.rateOverTime = carControl.Km_H * 10 >= 200 ? carControl.Km_H * 10 : 2000;smoke[i].Play();}}

😶‍🌫️最终脚本


在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:   汽车特效管理 
//___________创建者:_____梅西湖_____
//_____________________________________
//-------------------------------------
public class CarEffect : MonoBehaviour
{public ParticleSystem[] smoke;public CarMoveControl carControl;void Awake(){smoke = new ParticleSystem[4];//给有烟雾数组初始化赋值for (int i = 0; i < 4; i++){smoke[i] = transform.GetChild(1).GetChild(i).GetComponent<ParticleSystem>();}//初始化CarMoveContorl脚本carControl = gameObject .GetComponent<CarMoveControl>();StopSmoke();}private void Update(){//如果烟雾判断开关开启-按下空格或者 烟雾开关开启if(carControl.playPauseSmoke || InputManager.InputManagerment.handbanl ) StarSmoke();else StopSmoke();}//烟雾特效开始public void StarSmoke(){for (int i = 0; i < 4; i++){//var自动变成需要的类型var emisiion = smoke[i].emission;emisiion.rateOverTime = carControl.Km_H * 10 >= 200 ? carControl.Km_H * 10 : 2000;smoke[i].Play();}}//烟雾特效停止public void StopSmoke(){for (int i = 0; i < 4; i++){smoke[i].Stop();}}
}

🎶(B引擎咆哮


😶‍🌫️资源下载


在这里插入图片描述
在这里插入图片描述


😶‍🌫️多普勒效应


生活中有这样一个有趣的现象:当声音由远及近或者由近及远时,我们会听到声音音调有高低的变化。这个现象就是“多普勒效应”。距离远的时候听到的声音比较低沉,距离近的时候,声音高频成分增加,听起来音调有所上升。


😶‍🌫️ 四声道代码资源导入


using System;
using UnityEngine;
using Random = UnityEngine.Random;//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 汽车声道管理
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------public class CarAudio : MonoBehaviour
{//这个脚本读取汽车的一些当前属性,并相应地播放声音。//发动机的声音可以是一个简单的循环和音调剪辑,或者//可以是代表引擎音色的四个剪辑的交叉混合//在不同的转速和节气门状态下。//发动机夹子都应该是稳定的俯仰,而不是上升或下降。//当使用四通道发动机交叉火力时,四个夹子应为://lowAccelClip:发动机处于低转速,节气门打开(即在非常低的速度下开始加速)//highAccelClip:高转速下的Thenengine,节气门打开(即加速,但几乎处于最高速度)//lowDecelClip:发动机处于低转速,节气门处于最小值(即怠速或发动机在极低转速下制动)//highDecelClip:高转速下的Thenengine,节气门处于最小值(即发动机在非常高的速度下制动)//为了获得适当的交叉火力,剪辑的音高应该全部匹配,在低音和高音之间有一个八度偏移。public enum EngineAudioOptions //发动机音频选项{Simple,      //单声道音频FourChannel      //四声道音频}public EngineAudioOptions engineSoundStyle = EngineAudioOptions.FourChannel;//将默认音频选项设置为四声道public AudioClip lowAccelClip;                                              //用于低加速的音频public AudioClip lowDecelClip;                                              //用于低减速音频public AudioClip highAccelClip;                                             //用于高加速的音频public AudioClip highDecelClip;                                             //用于高减速的音频public float pitchMultiplier = 1f;                                          // 用于更改音频片段的音调public float lowPitchMin = 1f;                                              // 低音的最低音高public float lowPitchMax = 6f;                                              // 低音的最高音高public float highPitchMultiplier = 0.25f;                                   // 用于改变高音的音高public float maxRolloffDistance = 500;                                      // 开始发生翻滚的最大距离public float dopplerLevel = 1;                                              // 音频中使用的多普勒效应public bool useDoppler = true;                                              // 多普勒效应是否勾选private AudioSource m_LowAccel;  // 低加速度声音的来源private AudioSource m_LowDecel;  // 低减速声音的来源private AudioSource m_HighAccel; // 高加速度声音的来源private AudioSource m_HighDecel; // 高减速度声音的来源private bool m_StartedSound;     // 是否已开始发声的标志//private CarController m_CarController; // Reference to car we are controllingpublic CarMoveControl m_CarController;//  private AIcontroller aicontroler;//开始发声private void StartSound(){//获取carcontroller(这不会为null,因为我们需要组件)//m_CarController=GetComponent<CarController>();//设置单声道音频源m_HighAccel = SetUpEngineAudioSource(highAccelClip);// 如果枚举选择了四声道音频,设置四个音频源if (engineSoundStyle == EngineAudioOptions.FourChannel){m_LowAccel = SetUpEngineAudioSource(lowAccelClip);m_LowDecel = SetUpEngineAudioSource(lowDecelClip);m_HighDecel = SetUpEngineAudioSource(highDecelClip);}//已开始发声的标志m_StartedSound = true;}//停止发声private void StopSound(){//销毁所有音频foreach (var source in GetComponents<AudioSource>()){Destroy(source);}//发声停止m_StartedSound = false;}private void FixedUpdate(){//获取到主摄像头的距离float camDist = (Camera.main.transform.position - transform.position).sqrMagnitude;  //sqrMagnitude为单位平方毫米//如果物体和相机的距离 超过最大滚降距离,则停止发声——模拟汽车事故损毁if (m_StartedSound && camDist > maxRolloffDistance * maxRolloffDistance){StopSound();}//如果没有播放,相机的距离和最大距离较近,则启动声音if (!m_StartedSound && camDist < maxRolloffDistance * maxRolloffDistance){StartSound();}if (m_StartedSound){//根据汽车的转速,音高在最小值和最大值之间插值。.float pitch = ULerp(lowPitchMin, lowPitchMax, m_CarController.engineRPM / m_CarController.maxRPM);//取最小音高pitch = Mathf.Min(lowPitchMax, pitch);if (engineSoundStyle == EngineAudioOptions.Simple){// 单声道时, 高加速度声音的音频资源的音高m_HighAccel.pitch = pitch * pitchMultiplier * highPitchMultiplier;m_HighAccel.dopplerLevel = useDoppler ? dopplerLevel : 0;m_HighAccel.volume = 1;}else{//4声道引擎声音//根据乘数调整音高m_LowAccel.pitch = pitch * pitchMultiplier;m_LowDecel.pitch = pitch * pitchMultiplier;m_HighAccel.pitch = pitch * highPitchMultiplier * pitchMultiplier;m_HighDecel.pitch = pitch * highPitchMultiplier * pitchMultiplier;float accFade = 0;// 获取基于加速度的声音衰减值accFade = Mathf.Abs((InputManager.InputManagerment .vertical > 0 ? InputManager.InputManagerment.vertical : 0));float decFade = 1 - accFade;//根据汽车转速获得高衰减值float highFade = Mathf.InverseLerp(0.2f, 0.8f, m_CarController.engineRPM / 10000);float lowFade = 1 - highFade;// 调整一组值以使其更加现实highFade = 1 - ((1 - highFade) * (1 - highFade));lowFade = 1 - ((1 - lowFade) * (1 - lowFade));accFade = 1 - ((1 - accFade) * (1 - accFade));decFade = 1 - ((1 - decFade) * (1 - decFade));//根据淡入度值修改音频资源m_LowAccel.volume = lowFade * accFade;m_LowDecel.volume = lowFade * decFade;m_HighAccel.volume = highFade * accFade;m_HighDecel.volume = highFade * decFade;//调整多普勒水平值m_HighAccel.dopplerLevel = useDoppler ? dopplerLevel : 0;m_LowAccel.dopplerLevel  = useDoppler ? dopplerLevel : 0;m_HighDecel.dopplerLevel = useDoppler ? dopplerLevel : 0;m_LowDecel.dopplerLevel  = useDoppler ? dopplerLevel : 0;}}}//设置新的音频源并将其添加到 对象private AudioSource SetUpEngineAudioSource(AudioClip clip){// 在游戏对象上创建新的音频源组件并设置其属性AudioSource source = gameObject.AddComponent<AudioSource>();source.clip = clip;source.volume = 0;source.spatialBlend = 1;source.loop = true;// 音频片段从随机点开始source.time = Random.Range(0f, clip.length);source.Play();source.minDistance = 5;source.maxDistance = maxRolloffDistance;source.dopplerLevel = 0;return source;}// 反转Lerp,允许值超过从a到b的范围private static float ULerp(float from, float to, float value){return (1.0f - value) * from + value * to;}
}

🎶(C漂移轨迹


😶‍🌫️拖尾渲染器参数


在这里插入图片描述


😶‍🌫️拖尾渲染器添加



在这里插入图片描述

  • 将TrailRender的灯光关闭
    在这里插入图片描述
  • 选择拖尾的材质和设置宽度
    在这里插入图片描述

😶‍🌫️核心代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:   汽车特效管理 
//___________创建者:_____梅西湖_____
//_____________________________________
//-------------------------------------
public class CarEffect : MonoBehaviour
{public ParticleSystem[] smoke;     //获取粒子特效数组 public TrailRenderer[] TrailArray; //获取漂移拖尾数组public CarMoveControl carControl;  //获取脚本CarMoveContorlvoid Awake(){//初始化两个数组smoke = new ParticleSystem[4];TrailArray = new TrailRenderer[4];//给有烟雾数组 和 拖尾数组 初始化赋值for (int i = 0; i < 4; i++){smoke[i] = transform.GetChild(1).GetChild(i).GetComponent<ParticleSystem>();TrailArray[i] = transform.GetChild(1).GetChild(i).GetComponent<TrailRenderer>();} //初始化CarMoveContorl脚本carControl = gameObject .GetComponent<CarMoveControl>();//特效先停止StopSmoke();}private void Update(){//如果烟雾判断开关开启-按下空格或者 烟雾开关开启  和 漂移轨迹拖尾判断if (carControl.playPauseSmoke || InputManager.InputManagerment.handbanl){StarSmoke();   //开启烟雾StartTrail();  //开启拖尾特效}else{StopSmoke();  //关闭烟雾StopTrail();  //关闭拖尾特效}}//烟雾特效开始public void StarSmoke(){for (int i = 0; i < 4; i++){//var自动变成需要的类型var emisiion = smoke[i].emission;emisiion.rateOverTime = carControl.Km_H * 10 >= 200 ? carControl.Km_H * 10 : 2000;smoke[i].Play();}}//烟雾特效停止public void StopSmoke(){for (int i = 0; i < 4; i++){smoke[i].Stop();}}//拖尾轨迹开启public void StartTrail(){for (int i = 0; i < 4; i++){TrailArray[i].emitting = true;}}//拖尾轨迹关闭public void StopTrail(){for (int i = 0; i < 4; i++){TrailArray[i].emitting = false;}}}

😶‍🌫️添加漂移音效


  • 关闭苏醒时激活,设置为3D,取消多普勒效应
    在这里插入图片描述
    音频源官方手册解释
    在这里插入图片描述

😶‍🌫️最终代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:   汽车特效管理 
//___________创建者:_____梅西湖_____
//_____________________________________
//-------------------------------------
public class CarEffect : MonoBehaviour
{public ParticleSystem[] smoke;     //获取粒子特效数组 public TrailRenderer[] TrailArray; //获取漂移拖尾数组public CarMoveControl carControl;  //获取脚本CarMoveContorlpublic AudioSource skipClip;       //获取音频文件void Awake(){//初始化两个数组smoke = new ParticleSystem[4];TrailArray = new TrailRenderer[4];//获取音频资源skipClip = GetComponent<AudioSource>();//给有烟雾数组 和 拖尾数组 初始化赋值for (int i = 0; i < 4; i++){smoke[i] = transform.GetChild(1).GetChild(i).GetComponent<ParticleSystem>();TrailArray[i] = transform.GetChild(1).GetChild(i).GetComponent<TrailRenderer>();} //初始化CarMoveContorl脚本carControl = gameObject .GetComponent<CarMoveControl>();//特效先停止StopSmoke();//音效先停止skipClip.Stop();}private void Update(){//如果烟雾判断开关开启-按下空格或者 烟雾开关开启  和 漂移轨迹拖尾判断if (carControl.playPauseSmoke || InputManager.InputManagerment.handbanl)StarSmoke();   //开启烟雾else       StopSmoke();  //关闭烟雾//当按下空格时if (InputManager.InputManagerment.handbanl)StartTrail();  //开启拖尾特效else StopTrail();  //关闭拖尾特效}//烟雾特效开始public void StarSmoke(){for (int i = 0; i < 4; i++){//var自动变成需要的类型var emisiion = smoke[i].emission;emisiion.rateOverTime = carControl.Km_H * 10 >= 200 ? carControl.Km_H * 10 : 2000;smoke[i].Play();}}//烟雾特效停止public void StopSmoke(){for (int i = 0; i < 4; i++){smoke[i].Stop();}}//拖尾轨迹开启public void StartTrail(){for (int i = 0; i < 4; i++){TrailArray[i].emitting = true;}skipClip.Play();}//拖尾轨迹关闭public void StopTrail(){for (int i = 0; i < 4; i++){TrailArray[i].emitting = false;}skipClip.Stop();}}

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


相关文章:

【Unity3D赛车游戏优化篇】【十】汽车粒子特效和引擎咆哮打造极速漂移

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

肖sir__设计测试用例方法之编写测试用例12

编写测试用例 一、用例模板 案例1&#xff1a; 案例2&#xff1a; 案例3&#xff1a; 二、测试工作重点&#xff1a; 编写测试用例、 执行用例 &#xff08;依据测试用例&#xff09; 三、测试流程&#xff08;h模型&#xff09; 1、拿到需求 2、编写测试计划&#xff08;…...

Android 11.0 ota升级之Systemui下拉状态栏quick_settings_tiles_default值减少时更新的功能实现

1.前言 在11.0的系统rom定制化开发中,在定制功能需求中,在进行systemui的下拉状态栏定制以后,当需要ota升级的时候,发现在systemui下拉状态栏的快捷功能键部分去掉的 一些快捷功能并没有减少,这是因为systemui有缓存造成的只有清理缓存或者恢复出厂设置后才正常,所以今天…...

Android Studio中创建java项目

1.创建普通的android工程 2.创建一个module 3.module类型选择java library 4.填写libary和class的名字 5.生成的工程如图所示 6.然后点击Run --- Edit Configurations... 选择Application选项 设置所需要的参数 选中myjavalib后点击OK。然后打开刚创建的lib的gradle 编辑gradl…...

冠达管理:“旺季”来临,煤炭板块走高,云煤能源、陕西黑猫涨停

煤炭板块1日盘中发力走高&#xff0c;截至发稿&#xff0c;云煤动力、陕西黑猫涨停&#xff0c;兖矿动力涨超7%&#xff0c;晋控煤业、华阳股份涨超6%&#xff0c;山西焦煤、平煤股份涨超5%。 组织表明&#xff0c;动力大通胀背景下&#xff0c;未来3-5年煤炭供需偏紧的格局仍…...

【EI检索】第四届公共卫生与数据科学国际学术研讨会(ICPHDS 2023)

第四届公共卫生与数据科学国际学术研讨会&#xff08;ICPHDS 2023&#xff09; 2023 4th International Conference on Public Health and Data Science&#xff08;ICPHDS 2023&#xff09; 第四届公共卫生与数据科学国际学术研讨会&#xff08;ICPHDS 2023&#xff09;将于…...

对时序数据进行分类与聚类

我在最近的工作中遇到了一个问题&#xff0c;问题是我需要根据银行账户在一定时间内的使用信息对该账户在未来的一段时间是否会被销户进行预测。这是一个双元值的分类问题&#xff0c;只有两种可能&#xff0c;即会被销户和不会被销户。针对这个问题一般来说有两种解决策略。 …...

Win10如何找回图片查看器

近期有小伙伴反映在将Win10升级之后发现电脑自带的图片查看器没有了&#xff0c;这是怎么回事&#xff0c;该怎么找回呢&#xff0c;下面小编就给大家详细介绍一下Win10找回图片查看器的方法&#xff0c;有需要的小伙伴快来和小编一起阅读看看吧。 win10找回windows照片查看器…...

【脑机接口】基于运动想象的康复指导在脑卒中偏瘫患者中的应用

【摘要】 目的 探讨运动想象康复指导对脑卒中偏瘫患者的康复效果及意义。 方法 将 60例脑卒中偏瘫患者随机分为观察组(n31)和对照组(n29)&#xff0c;对照组的康复训练指导采用讲解示范法&#xff0c;观察组采用运动想象法 。比较两组 患者 的运 动功能 、日常生活 活动能力及 …...

vue-cli中vuex下$store”未在实例上定义

这里写目录标题 一、版本的问题二、vuex中的代码 一、版本的问题 vuex版本不对&#xff0c;获取不到store&#xff0c;vue默认vue3版本&#xff0c;vuex默认vuex4版本&#xff0c;vuex4只能在vue3中使用&#xff0c;在vue2中能使用vuex3,那么不能默认下载最新的版本 npm instal…...

AutoSAR配置与实践(实践篇)12.1 BSW WatchDog功能的配置和实现

AutoSAR配置与实践(实践篇)12.1 BSW WatchDog功能的配置和实现 BSW WatchDog功能的配置和实现一、Wdg监控需求二、WdgM状态管理原理2.1 WdgM状态管理中的配置项和层次关系2.2 SE 本地状态(Local Status)管理2.3 全局状态(Global Status)管理三、Alive/ Deadline/ Program Flo…...

【UI自动化测试】Jenkins配置

前一段时间帮助团队搭建了UI自动化环境&#xff0c;这里将Jenkins环境的一些配置分享给大家。 背景&#xff1a; 团队下半年的目标之一是实现自动化测试&#xff0c;这里要吐槽一下&#xff0c;之前开发的测试平台了&#xff0c;最初的目的是用来做接口自动化测试和性能测试&…...

C#使用DataTable的Select方法来选择特定的字段

在C#中&#xff0c;可以使用DataTable的Select方法来选择特定的字段。要选择特定的字段&#xff0c;可以使用Select方法的参数来指定要返回的列的名称&#xff0c;然后将结果存储在一个新的DataTable中。以下是一个示例&#xff1a; using System; using System.Data; class …...

总结梳理HTTP状态码

前端开发中和后端联调时总会遇到一些状态码的问题&#xff0c;本文用于介绍一些常见的状态码&#xff0c;以及遇到这些状态码应该如何进行排查。 400 Bad Request - 请求无效。 表示客户端发送的请求存在语法错误&#xff0c;服务器无法理解或处理该请求的语法或参数。这通常…...

MySQL 8.0(winx64)安装笔记

一、背景 从MySQL 5.6到5.7&#xff0c;再到8.0&#xff0c;版本的跳跃不可谓不大。安装、配置的差别也不可谓不大&#xff0c;特此备忘。 二、过程 &#xff08;1&#xff09;获取MySQL 8.0社区版&#xff08;MySQL Community Server&#xff09;   从 官网 字样 “MySQL …...

vue封装wangEditor

components下面创建WangEditor.vue <template><div><toolbarstyle"border-bottom: 1px solid #ccc":editor"editor":defaultConfig"toolbarConfig":mode"mode"/><editorstyle"height: 500px; overflow-y: …...

【Spring Boot 源码学习】深入 FilteringSpringBootCondition

走近 AutoConfigurationImportFilter 引言往期内容主要内容1. match 方法2. ClassNameFilter 枚举类3. filter 方法 总结 引言 前两篇博文笔者带大家从源码深入了解了 Spring Boot 的自动装配流程&#xff0c;其中自动配置过滤的实现由于篇幅限制&#xff0c;还未深入分析。 …...

docker 笔记6:高级篇 DockerFile解析

目录 1.是什么&#xff1f; 2.构建三步骤 3.DockerFile构建过程解析 3.1 Dockerfile内容基础知识 3.2Docker执行Dockerfile的大致流程 总结 4.DockerFile常用保留字指令 5.案例&#xff1a;自定义镜像 5.1 要求&#xff1a; Centos7镜像具备vimifconfigjdk8 5.2编写 5…...

微信小程序navigateTo进入页面后返回原来的页面需要携带数据回来

需求 如图&#xff1a;点击评论后会通过wx.navigateTo进入到评论页面&#xff0c;评论完返回count给原页面&#xff0c;重新赋值实现数量动态变化&#xff0c;不然要刷新这个页面才会更新最新的评论数量。 实现方式&#xff1a; 在评论页面通过wx.setStorageSync(‘data’…...

Python照片压缩教程详解

介绍 在日常的编程工作中&#xff0c;我们经常需要处理图像&#xff0c;例如上传、下载、显示、编辑等。有时候&#xff0c;我们需要对图像进行压缩&#xff0c;以减少占用的空间和带宽&#xff0c;提高加载速度和用户体验。那么&#xff0c;如何用Python来实现图像压缩呢&…...

CMake 导言

为什么选择 CMake 在掌握 Linux 基础后&#xff0c;我们知道一个项目通常由多个源文件组成。想要构建这个项目&#xff0c;就需要按照一定的规则对源文件进行编译和链接&#xff0c;而这些规则通常需要在 Makefile 中定义。 但随着项目体量增大&#xff0c;手写 Makefile 会变得…...

OpenClaw+千问3.5-9B智能家居:自然语言控制HomeAssistant

OpenClaw千问3.5-9B智能家居&#xff1a;自然语言控制HomeAssistant 1. 为什么需要自然语言控制智能家居&#xff1f; 去年装修新房时&#xff0c;我安装了HomeAssistant系统来控制全屋灯光、空调和窗帘。虽然手机App能实现远程控制&#xff0c;但每次都要打开应用、找到对应…...

如何突破Cursor AI使用限制?解锁永久免费Pro功能的终极指南

如何突破Cursor AI使用限制&#xff1f;解锁永久免费Pro功能的终极指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached you…...

Pixel Dream Workshop 快速上手:Python 零基础入门到生成第一幅AI画作

Pixel Dream Workshop 快速上手&#xff1a;Python 零基础入门到生成第一幅AI画作 1. 前言&#xff1a;为什么选择Pixel Dream Workshop 如果你对AI绘画感兴趣但苦于没有编程基础&#xff0c;这篇教程就是为你量身定制的。Pixel Dream Workshop是一个对新手极其友好的AI绘画工…...

FinalShell v4.5.12 安装避坑指南:为什么你的远程连接总是失败?

FinalShell 4.5.12 高效配置手册&#xff1a;从安装到稳定连接的进阶实践 远程终端工具的选择往往决定了运维效率的天花板。作为一款集SSH连接、文件传输、性能监控于一体的全能型工具&#xff0c;FinalShell近年来在开发者社区中积累了不错的口碑。但不少用户在初次接触时&…...

如何用QtScrcpy实现低延迟Android投屏?5个技巧带你解锁高效多设备控制体验

如何用QtScrcpy实现低延迟Android投屏&#xff1f;5个技巧带你解锁高效多设备控制体验 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/…...

Splunk Enterprise 10.2.2 (macOS, Linux, Windows) - 搜索、分析和可视化,数据全面洞察平台

Splunk Enterprise 10.2.2 (macOS, Linux, Windows) - 搜索、分析和可视化&#xff0c;数据全面洞察平台 Search, analysis, and visualization for actionable insights from all of your data 请访问原文链接&#xff1a;https://sysin.org/blog/splunk-10/ 查看最新版。原…...

保姆级避坑指南:在Ubuntu 22.04上用ROS2 Humble搞定TurtleBot3的SLAM与导航(附5个常见报错解决方案)

保姆级避坑指南&#xff1a;在Ubuntu 22.04上用ROS2 Humble搞定TurtleBot3的SLAM与导航&#xff08;附5个常见报错解决方案&#xff09; 当你第一次尝试在Ubuntu 22.04上使用ROS2 Humble和TurtleBot3进行SLAM建图与导航时&#xff0c;可能会遇到各种令人沮丧的报错。这些报错往…...

电商客服外包怎么选|避坑指南[特殊字符]2026 商家必看

做电商绕不开客服外包&#xff0c;但低价陷阱、转包兼职、大促掉链、响应超时、售后甩锅真的太坑了&#xff01;今天整理一套不踩雷选型攻略&#xff0c;全是行业干货&#xff0c;新手也能直接抄作业&#x1f447; &#x1f6ab;先避坑&#xff1a;这些雷区千万别碰 超低价诱惑…...

Phi-3-mini-4k-instruct-gguf应用落地:律师助理合同风险点识别与提示生成

Phi-3-mini-4k-instruct-gguf应用落地&#xff1a;律师助理合同风险点识别与提示生成 1. 项目背景与价值 在法律服务领域&#xff0c;合同审查是律师日常工作中最耗时且重复性高的任务之一。传统人工审查方式存在效率低下、容易遗漏细节等问题。Phi-3-mini-4k-instruct-gguf作…...