C# 如何使此代码更易于管理,以防止音频冲突?
我只是在寻找任何能让这段代码更好的建议。如果我以这种方式继续下去,将会产生大量的代码,我认为这是可以避免的,但我现在无法做到这一点。这将很快失去控制C# 如何使此代码更易于管理,以防止音频冲突?,c#,optimization,audio,refactoring,unity3d,C#,Optimization,Audio,Refactoring,Unity3d,我只是在寻找任何能让这段代码更好的建议。如果我以这种方式继续下去,将会产生大量的代码,我认为这是可以避免的,但我现在无法做到这一点。这将很快失去控制 public enum PhysicMaterialType { SoundFailure = 0, AsteroidBall, BalloonRubber } public void PlaySoundBasedOnCollision ( PhysicMaterialType phyMatA, PhysicMater
public enum PhysicMaterialType
{
SoundFailure = 0,
AsteroidBall,
BalloonRubber
}
public void PlaySoundBasedOnCollision ( PhysicMaterialType phyMatA, PhysicMaterialType phyMatB )
{
switch ( phyMatA )
{
case PhysicMaterialType.AsteroidBall:
{
CheckAsteroidBallCollision ( phyMatB );
break;
}
case PhysicMaterialType.BalloonRubber:
{
CheckBalloonRubberCollision ( phyMatB );
break;
}
}
}
void CheckAsteroidBallCollision ( PhysicMaterial phyMatB )
{
switch ( phyMatB )
{
case PhysicMaterialType.AsteroidBall:
{
//Play AsteroidAsteroidBallSound
break;
}
case PhysicMaterialType.BalloonRubber:
{
break;
}
}
}
如果你要有很多类型,不同类型的预期碰撞声音必须以多种方式来处理,考虑从你要实现的每种类型的物理材料派生类。在派生类中定义一个公共方法来处理确定要播放的声音-将第二个对象的类型传递给此方法。像这样:
class PhysicMaterial
{
public virtual string GetCollisionSound (PhysicMaterialType targetType)
{
// define default behavior here, if derived class doesn't need to do anything special
}
}
class AsteroidBall : PhysicMaterial
{
public override string GetCollisionSound (PhysicMaterialType targetType)
{
...
}
}
class BalloonRubber: PhysicMaterial
{
public override string GetCollisionSound (PhysicMaterialType targetType)
{
...
}
}
返回最适合您的场景的任何数据类型。如果
phyMatA
是小行星球而phymatab
是气球橡胶,您希望发生什么?(或反之亦然)只有当它们都是同一类型时,你才有声音播放吗?这只是一个简单的例子,我现在有大约15种材料,它们都可以相互碰撞,都可以播放声音。虽然如果你交换Phymatab击中phyMatA的顺序,它将播放与phyMatA击中Phymatab相同的声音。