警告-Unity3d的新知识(大约需要4个小时的工作时间),但具有编程经验。也可以long ...
所以我有点遵循基本的“领取硬币”游戏教程。立即对其进行签名,我已经弄清楚了如何使硬币旋转/旋转,捡起硬币等。
我可以播放声音-唤醒/创建声音,或者取消选中该框并致电
request()
在我的GetComponent<AudioSource>().Play();
里面,我可以听到声音。
不幸的是,当下一行呼叫onTriggerEnter()
...时,声音不会播放。我可以注释掉销毁呼叫,并且其他所有工作(包括播放拾音声音)都可以,但是我确实需要在“抓取”硬币时将它们从场景中移除。
我可以将AudioSource移到另一个不会被破坏的对象,甚至可以创建一个MyGame c#脚本来控制所有声音,硬币计数,时间等。
但是在我看来,我也应该能够制造“硬币”资产,并且我导入该资产的任何项目都应该使用自己的AS,带有它的mp3等,等等。
所以...如何创建一个独立的对象,当它与之碰撞时会发出声音,然后Destroy(gameObject)
本身?
我完整的Destroy()
文件-通过调整Column 3D类型对象的大小将其附加到Coin.cs
。如果注释了对Coin
的呼叫,则硬币上的AudioSource可以正常播放。运行适用于Linux的最新Unity3d Beta(对不起,没有Mac或Win机器,它吸收了virtualbox)。不知道如何发布项目信息等,但是如果需要告诉我...
Destroy()
答案 0 :(得分:1)
如果您真的想将音频与对象自成一体,可以尝试以下方法:
public class Coin : MonoBehaviour
{
// A generic Collider... You can be more specific if you want.
public Collider collider;
// Reference your renderer here.
public MeshRenderer renderer;
// Reference you AudioSource here.
public AudioSource audioSource;
public float rotate_speed = 200f;
private bool isActive = true;
void OnTriggerEnter ( Collider Col )
{
if ( Col.CompareTag ( "Player" ) )
{
Player.gotCoin ( );
audioSource.Play ( );
isActive = false;
collider.enabled = renderer.enabled = false;
}
}
void Update ( )
{
if ( isActive )
{
// make coin tumble
transform.Rotate ( Vector3.left, rotate_speed * Time.deltaTime );
transform.Rotate ( Vector3.back, rotate_speed * Time.deltaTime );
transform.Rotate ( Vector3.up, rotate_speed * Time.deltaTime );
}
else
{
// If the coin is "dead", we check to see if the audio is still playing.
// If not, we destroy the object.
if ( !audioSource.isPlaying )
Destroy ( gameObject );
}
}
}
从本质上讲,代码应该关闭对撞机,因此您不必重新触发捡起同一枚硬币并关闭渲染器,因此它不会显示在屏幕上。就玩家而言,已经不存在了。
尽管..我仍然只使用音频管理器,并使用“硬币”池(而不是销毁),因为“硬币”的数量通常很多。但这是另一天的故事。