unity3d player gameobject“听到”声音

时间:2015-05-22 10:59:46

标签: unity3d raycasting listen

我有一个问题,有点......复杂

基本上我想让一个游戏对象(一个敌人)“听”玩家的声音(脚步声,开门,枪声等)

我可以通过使用:

来做到这一点
>Collider[] hitColliders;

>hitColliders = Physics.OverlapSphere(transform.position, 10f,enemyLayer);
>
>for(int i=0;i<hitcolliders.Length;i++){}// Call Enemy Hear Player Function

然而,问题从这里开始:

我希望墙壁挡住“声音”。起初,我以为我可以使用Physics.Linecast来做到这一点。然而,这意味着声音可以被一根杆子阻挡,因为Physics.Linecast只拍摄一条直线。

Example Picture

我想要的是玩家C根本听不到任何人,但玩家A和B仍然可以听到对方。

我希望你们理解我的问题。

2 个答案:

答案 0 :(得分:1)

您可以将要阻挡声波的对象放置在特定图层上。然后让raycast忽略所有其他图层。

答案 1 :(得分:1)

将所有这些物理和其他图形内容留下。

为此行为创建单独的逻辑。

创建一个大棋盘(其中x,y将是你游戏中的x,y位置)并且只添加声音发生器,声音听众和声音障碍物。

每帧更新这个国际象棋棋盘,创造声音,飞行声音,阻挡声音和听声音,并作为现实生活中的演员。

通过这种方式,您可以为每个障碍物,声音发生器和声音监听器添加参数,以便所有参数都可以配置。