【问题标题】:How do I make this code more manageable audio for collisions?如何使此代码更易于管理碰撞音频?
【发布时间】:2012-12-08 04:31:59
【问题描述】:

我只是在寻找可以使此代码更好的任何建议。如果我以这种方式继续下去,我认为这是可以避免的大量代码,但现在我无法做到这一点。这将很快失去控制。

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;
            }
   }
}

【问题讨论】:

  • 如果phyMatA 是AsteroidBall 而phyMatB 是BalloonRubber,你想发生什么? (反之亦然)如果它们都是同一类型,您是否只有声音播放?
  • 这只是一个简短的例子,我目前有大约 15 种材料,它们都可以相互碰撞并且都可以播放声音。虽然如果你交换 phyMatB 击中 phyMatA 的顺序,它会播放与 phyMatA 击中 phyMatB 相同的声音。

标签: c# optimization audio refactoring unity3d


【解决方案1】:

如果您将拥有很多类型,并且必须以多种方式处理不同类型之间的预期碰撞声音,请考虑为您要实现的每种类型从 PhysicMaterial 派生一个类。在派生类中定义一个公共方法来处理确定播放哪种声音 - 将第二个对象的类型传递给此方法。像这样:

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)
   {
       ...
   }
}

返回最适合您的场景的任何数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多