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

unity怎样让玩家在不同材质上行走具有不同脚步声音效_第1张图片

问题:
玩家在草地,雪地,木板上行走需要不同的脚步声音效,且无论行走还是奔跑,音效都要和脚步动画同步.
思路:
在动画上添加事件触发脚步声音效,并判断地面的材质然后播放不同的 音效.
实现:
一.判断地面材质
第一种情况 是在unity内置terrain上行走
  地面有草地,石地,木地等,需要有不同音效,这时可以通过terrain的terrain.Data的alphamapTextures[0]得到一个图层,其rgba分别代表四张terrain贴图的权重(或不透明度)利用此可以判断某点是什么材质,再调用相应的音效即可区别玩家在不同材质行走的脚步声.
关键代码;
    public Terrain terrain;
    TerrainData _terrainData;
    void Start()
    {
        _terrainData = terrain.terrainData;
        Texture2D _alphamapTexture = _terrainData.alphamapTextures[0];
        var x = (int)(transform.position.x * _terrainData.alphamapResolution / _terrainData.size.x);
        var z = (int)(transform.position.y * _terrainData.alphamapResolution / _terrainData.size.z);
        var color = _alphamapTexture.GetPixel(x, z);
       //比较一下color各通道值就能知道当前在什么材质上行走了

第二种情况是在某个物体上行走(比如木板上行走 )
  这时可以用向下的射线检测到物体类别并得到材质.
把第一种情况和第二种情况加在一起就能判断所有脚下的材质了.具体可用射线来判断,代码很简单略.....
二.动画事件的设置:
第一种方法(推荐!): 点击动画-->编辑-->预览速读调到最低0.1方便精确找点-->播放预览在所需处停下-->设置事件点,注意函数只能包含在玩家根下的脚本下面.注意:动画如果是legacy格式需要更改,否则不会出现事件编辑界面
unity怎样让玩家在不同材质上行走具有不同脚步声音效_第2张图片

c#脚本: 注意函数只能包含在玩家根下的脚本下面
unity怎样让玩家在不同材质上行走具有不同脚步声音效_第3张图片

第二种方法: 先复制想添加的动画(否则只能只读)windows-->animation-->animation-->添加事件,代码同上.
unity怎样让玩家在不同材质上行走具有不同脚步声音效_第4张图片
需要注意的是事件不要选在最后一帧,很有可能失效,再就是时间参数尽可能选择int,或者hash值.效率可能高些.

你可能感兴趣的:(unity3d,unity,脚步,音效,地面材质,同步)