A couple of random thoughts:
Because of the number of variables involved: scale, DC vs DCC, single track vs mulit-track sensing, optical vs infrared vs block detection, animation mechanism, etc it’s very difficult (if not impossible) for a manufacturer to put together a single package that would suit everyone. That’s why you have to piece together what you want depending on your specific needs.
The easy part is deciding on the crossing gates and activating mechanism. Find one you like and decide on Tortoise, muscle wire, etc and figure out how to rig it.
The easiest interface with the detection system is one that simply is activated by a relay being tripped. Relay tripped, then gate lowers. Relay released, the gate raises. Most detection systems can do that easily.
Now for the detection part. Photocell (CDS) has several drawbacks. If you intend to do night operations, that pretty well eliminates them. If your train room has windows, they’ll require constant adjustment. Multi track operation using CDS cells will requite a detection unit for each track.
Infrared works better, and some trackside units can detect across multi-tracks. But some are susceptible to visible light disruption and can be tricky to adjust and hide.
Block detection is the other primary choice. If you run DCC, a single block detector can detect all the tracks within a block as long as they have a common feeder. If you run DC, you’ll need a detection unit for each track.
Your best choice depends on your situation and preferences. All have weaknesses and strengths.
Final thought. Unless you develope a very complicated, logic based system, the gate operation is going to be a compromise. Why? Because trains usually approach a gate from two directions. You want it to activate early enough as a train approaches to be lowered, but you want it to raise fairly quickly after a train passes. But the simple systems have fixed points for detection a