How can I modify Project Settings via scripting?

I want to access some properties from the Project Settings via scripting but there’s no API available for those properties.

Cause

There are some Project Settings properties that haven’t been implemented in the API yet or don’t need to be exposed to the average user as they could cause many different kinds of issues if they are not used properly.

Resolution

Most settings are managed via SerializedObjects (for example QualitySettings.asset), so if you know what properties you want to modify it's just a matter of finding the property and changing its value.

For example, if you want to change the built-in deferred Shader to a custom Shader (as seen in the image below), you’ll need to change the m_Mode and m_Shader sub-properties from the m_Deferred property: