解决问题:

  1. 3D角色动画需要很精确的在某个动作点时播放特定音效

  1. 3D角色在自定义的地形模型上行走时,根据地面材质的不同(如草地,石头,泥土等等),脚所发出的

音效也会随着替换


问题一思路:

1.对于第一个问题,利用动画事件,在关键动作处触发该事件去实现音效的播放

2.在脚本中去调用走和跑不同的Function函数(走:step 跑:steprun)

这里有个新问题:走和跑是混合树动画(下面解决它)

由于角色的动画是用了混合树,根据控制在走和跑之间切换的动作状态,在调用step和steprun两个函数时,需要对混合树的参数值movespeed进行判断,关键代码如下:

 public void StepRun() { if (ani.GetFloat("Movespeed") >= 0.6) {moveSound.pitch = 1.5f;moveSound.volume = 0.5f;moveSound.Play();        } }public void Step(){if (ani.GetFloat("Movespeed") > 0.1 && ani.GetFloat("Movespeed") < 0.6){moveSound.pitch = 0.8f;moveSound.volume = 0.3f;moveSound.Play();           }}

问题二思路:

1.通过脚本去访问地面材质球的IDmask贴图(注:地面非unity内置terrain,而是一个自定义的gameObect,IDMask也是自定义的)

关键代码:

texture= (Texture2D)material.GetTexture("_Mask");

2.根据主角的位置信息去对贴图进行采样,用采样的RGB通道值来作为判定条件识别是播放什么材质

的音效。

那么如何实现采样呢?根据unity官方文档的Texture2D.GetPixel 方法,关键点在于地形的有个角一定是世界坐标原点,那么我们可以把地形的UV和地形的尺寸大小一一对应起来形成映射,角色在世界空间坐标系下位置代表对地形上某个点的采样,从而得到该位置的color值。

unity官方文档API链接------------ Texture2D.GetPixel

关键代码如下:

 void Update(){x = -transform.position.x / 100*texture.width;y = -transform.position.z / 100*texture.height;color = texture.GetPixel((int)x, (int)y);Debug.Log(color.r);

得到了color的RGB值后面就容易了,根据这个值来做限定,去调用不同情况下的音效文件,最好的方法是外面只添加一个Audio Source组件,AudioClip以数组的形式添加,示例代码如下:

public class FootSteps : MonoBehaviour
{[SerializeField]private AudioClip[] stoneClips;[SerializeField]private AudioClip[] mudClips;[SerializeField]private AudioClip[] grassClips;private AudioSource audioSource;private void Awake(){audioSource = GetComponent<AudioSource>();}private void Step(){AudioClip clip = stoneClips[1];audioSource.PlayOneShot(clip);

PS:如果是用的unity自带的Terrain地形制作,想要制作脚步在不同地形材质上的不同音效方法可以参考这个YouTube视频教程,内附代码:

https: 根据 Unity 中的地形改变你的脚步

unity角色脚步音效根据地面材质不同而改变问题相关推荐

  1. unity怎样让玩家在不同材质上行走具有不同脚步声音效

    问题: 玩家在草地,雪地,木板上行走需要不同的脚步声音效,且无论行走还是奔跑,音效都要和脚步动画同步. 思路: 在动画上添加事件触发脚步声音效,并判断地面的材质然后播放不同的 音效. 实现: 一.判断 ...

  2. Unity角色同时播放两个音效(走路音效+说话音效)

    Unity角色同时播放两个动画 写在前面 效果展示 代码 写在后面 写在前面 需要实现一个人物走路音效和说法音效一起播放的功能. 效果展示 即人物的脚步声和举手说话的音效都要播放 代码 说话音乐是要判 ...

  3. unity 角色换装

    unity角色换装的关键是更改角色部位上的物体的SkinnedMeshRenderer组件的属性: 更改mesh:mesh决定了部位的物体的外形,是主要的数据. 刷新骨骼:同一个部位下,不同的mesh ...

  4. Ruby‘s Adventrue游戏制作笔记(十四)Unity播放游戏音效

    Ruby's Adventrue游戏制作笔记(十四)Unity播放游戏音效 前言 一.创建背景音乐 二.创建新的脚本 三.在其他需要播放的所有脚本中进行操作 四.给敌人添加音效 五.给玩家添加移动音效 ...

  5. Ruby‘s Adventrue游戏制作笔记(十一)Unity角色攻击——发射子弹

    Ruby's Adventrue游戏制作笔记(十一)Unity角色攻击--发射子弹 前言 一.编辑子弹 二.创建脚本 三.修改玩家攻击脚本 四.将子弹拖入玩家脚本 五.让子弹碰撞到该碰撞的东西 六.编 ...

  6. Unity角色扮演游戏集合

    Unity角色扮演游戏集合 Aurora Trail A new epic game where the perspective of the camera changes everything. D ...

  7. Unity批量给模型上同一个材质

    Unity批量给模型上同一个材质 第一步:先选择所有要上材质的模型: 第二步:将创建的材质拖到右侧属性栏:

  8. unity导入FBX模型时出现材质丢失,模型为白膜的情况

    unity导入FBX模型时出现材质丢失,模型为白膜的情况 导入模型后点击该模型 修改属性即可:

  9. Unity 角色朝向目标 / 动态转向动画

    Unity 角色朝向目标 / 动态转向动画 一.静态角色转向 1.1 C# 脚本 1.2 Unity 实现 1.3 修改 二.动态角色转向 2.1 C# 脚本 2.2 Unity 实现 写在最最最后 ...

最新文章

  1. FPGA详细芯片结构
  2. RxJava from 处理list时,其中有一个出错时如何继续发送下面的list内容。
  3. 让 ScrollViewer 的滚动带上动画
  4. Redis进阶-Redis持久化原理
  5. 形似棺材的“抗震救生床”,你会要吗?
  6. echarts_部分图表配置_图表click事件
  7. 机器学习入门系列(2)--机器学习概览(下)
  8. t-sql中的事务控制及错误处理
  9. 【HDU -1568】 Fibonacci(斐波那契通项公式+取对数)
  10. 乱谈卡巴CCTV黄金时段广告
  11. BZOJ4029: [HEOI2015]定价
  12. 服务器双网卡导致的网络故障及解决方案
  13. BP神经网络预测(人口)程序(matlab)
  14. TCP/IP三次握手四次挥手
  15. 中美线径对照表_美国线规对照表
  16. VoxelMorph运行时遇到的问题
  17. IDEA 导入项目中文注释乱码如何解决
  18. python爬虫豆瓣影评保存到excel_Python爬虫获取豆瓣电影并写入excel
  19. 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类来继承图形类,并实现上述两个方法。并创建实例验证。
  20. android显示视频预览

热门文章

  1. 证券公司信息化8-什么是银行间债券市场?定息收益部主要做什么的?债券是跨市场品种吗?
  2. 财管U01 公司理财基本原理 教材解读
  3. 教学|跨境追踪(Re-ID)技术与Milvus的完美邂逅
  4. pikachu 暴力破解 Brute Force(皮卡丘漏洞平台通关系列)
  5. WPF强制刷新UI界面
  6. 前端网页三剑客------JavaScript基础
  7. 基于matlab的信道编码仿真,基于matlab的信道编码仿真(可编辑).doc
  8. 2019 年,把人生奉献给我所热爱的一切
  9. FFmpeg视频的旋转rotate
  10. 想知道你的服务器被暴力登录次数吗?教你统计ssh登录日志