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

解决问题:

  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 中的地形改变你的脚步

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值