93 lines
3.9 KiB
Markdown
93 lines
3.9 KiB
Markdown
|
# Add custom graphics settings
|
||
|
|
||
|
You can add custom graphics settings to the **Edit** > **Project Settings** > **Graphics** window, then use the values of the settings to customize your build.
|
||
|
|
||
|
You can change the values of settings while you're editing your project. Unity makes the values static when it builds your project, so you can't change them at runtime.
|
||
|
|
||
|
## Add a setting
|
||
|
|
||
|
To add a setting, follow these steps:
|
||
|
|
||
|
1. Create a class that implements the `IRenderPipelineGraphicsSettings` interface, and add a `[Serializable]` attribute. This becomes a new settings group in the **Graphics** settings window.
|
||
|
2. To set which render pipeline the setting applies to, add a `[SupportedOnRenderPipeline]` attribute and pass in a `RenderPipelineAsset` type.
|
||
|
3. Add a property. This becomes a setting.
|
||
|
4. Implement the `version` field and set it to `0`. Unity doesn't currently use the `version` field, but you must implement it.
|
||
|
|
||
|
For example, the following script adds a setting called **My Value** in a settings group called **My Settings**, in the graphics settings for the Universal Render Pipeline (URP).
|
||
|
|
||
|
```c#
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.Rendering;
|
||
|
using System;
|
||
|
|
||
|
[Serializable]
|
||
|
[SupportedOnRenderPipeline(typeof(UniversalRenderPipelineAsset))]
|
||
|
|
||
|
// Create a new settings group by implementing the IRenderPipelineGraphicsSettings interface
|
||
|
public class MySettings : IRenderPipelineGraphicsSettings
|
||
|
{
|
||
|
// Implement the version field
|
||
|
public int version => 0;
|
||
|
|
||
|
// Create a new setting and set its default value to 100.
|
||
|
public int myValue = 100;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Add a reference property
|
||
|
|
||
|
[Reference properties](https://docs.unity3d.com/2023.3/Documentation/Manual/EditingValueProperties.html#references) take compatible project assets or GameObjects in the scene as inputs.
|
||
|
|
||
|
To add a reference property, follow these steps:
|
||
|
|
||
|
1. Create a class that implements the `IRenderPipelineResources` interface. This becomes a new settings group in the Graphics Settings window.
|
||
|
2. Add a property. This becomes a reference property.
|
||
|
3. Implement the `version` field and set it to `0`. Unity doesn't currently use the `version` field, but you must implement it.
|
||
|
|
||
|
For example, the following script adds a reference property called **My Material** that references a material.
|
||
|
|
||
|
```c#
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.Rendering;
|
||
|
using System;
|
||
|
|
||
|
[Serializable]
|
||
|
[SupportedOnRenderPipeline(typeof(UniversalRenderPipelineAsset))]
|
||
|
|
||
|
// Create a new reference property group by implementing the IRenderPipelineResources interface
|
||
|
public class MySettings: IRenderPipelineResources
|
||
|
{
|
||
|
// Implement the version field
|
||
|
public int version => 0;
|
||
|
|
||
|
// Create a new reference property that references a material
|
||
|
[SerializeField] public Material myMaterial;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
To set a default asset, use a [`[ResourcePath]`](https://docs.unity3d.com/2023.3/Documentation/ScriptReference/Rendering.ResourcePathAttribute.html) attribute above the reference property. For example, in the example, add the following line above `public Material myMaterial`.
|
||
|
|
||
|
```c#
|
||
|
[ResourcePath('path-to-default-file')]
|
||
|
```
|
||
|
|
||
|
## Change the name and layout of a settings group
|
||
|
|
||
|
To change the name of a settings group in the **Graphics** settings window, follow these steps:
|
||
|
|
||
|
1. Add `using System.ComponentModel` to your script.
|
||
|
2. Add a `[Category]` attribute to your script. For example, `[Category("My Category")]`.
|
||
|
|
||
|
You can also use the [PropertyDrawer](https://docs.unity3d.com/ScriptReference/PropertyDrawer.html) API to further customize the layout of custom settings.
|
||
|
|
||
|
## Set which render pipeline a setting applies to
|
||
|
|
||
|
To set which render pipeline a setting applies to, use the `[SupportedOnRenderPipeline]` attribute and pass in a `RenderPipelineAsset` type.
|
||
|
|
||
|
For example, if your project uses the Universal Rendering Pipeline (URP) and you want your setting to appear only in the **URP** tab of the **Graphics** settings window, use the following code:
|
||
|
|
||
|
```c#
|
||
|
[SupportedOnRenderPipeline(typeof(UniversalRenderPipelineAsset))]
|
||
|
```
|
||
|
|