public static void InitIfNeeded() { if (s_init) { return; } // For a collision detection to happen between two filters, their 'BelongsTo' and 'CollidesWith' must mention each other Physics.CharacterFilter.Data = CollisionFilter.FromLayer(Physics.LAYER_CHARACTER); Physics.CollideWithTerrainFilter.Data = new CollisionFilter() { BelongsTo = ~(uint)0, CollidesWith = CollisionFilter.CreateMask(Physics.LAYER_TERRAIN) }; Physics.CollideWithCharactersAndTerrainFilter.Data = new CollisionFilter() { BelongsTo = ~(uint)0, CollidesWith = CollisionFilter.CreateMask(Physics.LAYER_TERRAIN, Physics.LAYER_CHARACTER) }; Physics.CollideWithCharactersFilter.Data = new CollisionFilter() { BelongsTo = ~(uint)0, CollidesWith = CollisionFilter.CreateMask(Physics.LAYER_CHARACTER) }; s_init = true; }