# ReflectedParameter

> Information about a shader function parameter.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEditor.ShaderApiReflection](/engine/6000.6/script-reference/unityeditor/shaderapireflection.md)
* **Assembly:** UnityEditor.CoreModule

```csharp
public struct ReflectedParameter
```

## Remarks

This struct represents a function parameter as reflected from shader source code. On top of information extracted directly from the syntax, such as [ReflectedParameter.DirectionFlags](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/directionflags.md), [ReflectedParameter.TypeName](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/typename.md), and [ReflectedParameter.Name](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/name.md), it also contains [ReflectedParameter.Hints](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/hints.md): metadata extracted from structured comments decorating the function.

Additional Resources: [ReflectedFunction.Parameters](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedfunction/parameters.md).

## Examples

```csharp
using UnityEditor;
using UnityEditor.ShaderApiReflection;
using UnityEngine;

// This example adds a menu item which prints information from reflected functions in any shader include
// assets selected in the project view.
public class ReflectedFunctionPrinter
{
    [MenuItem("Examples/ReflectedFunctionPrinter")]
    static void PrintReflectedFunctions()
    {
        // Visit each selected object
        foreach (Object selectedObject in Selection.objects)
        {
            // Check if the object is a ShaderInclude
            if (selectedObject is ShaderInclude includeObject)
            {
                Debug.Log("Found shader include at " + AssetDatabase.GetAssetPath(includeObject));

                // Visit each exposed function in the include
                foreach (ReflectedFunction func in includeObject.Reflection.ReflectedFunctions)
                    PrintFunction(func);
            }
        }
    }

    static void PrintFunction(ReflectedFunction func)
    {
        // Print the function's signature
        Debug.Log($"Found function with signature: {func.GetSignature()}");

        // Print the function's summary, if it exists
        if (func.Hints.TryGetValue("summary", out string funcSummary))
            Debug.Log($"{func.Name}'s doc comment: {funcSummary}");

        // Print the function's body text
        Debug.Log($"{func.Name}'s body:\n{func.GetNormalizedBodyText()}");

        // Visit each parameter
        foreach (ReflectedParameter param in func.Parameters)
        {
            // Print the parameter
            Debug.Log($"{func.Name} has parameter: {param.ToString()}");

            // Print the parameter's summary
            if (param.Hints.TryGetValue("summary", out string paramSummary))
                Debug.Log($"{param.Name}'s doc comment: {paramSummary}");
        }
    }
}
```

## Properties

| Property                                                                                                               | Description                                                                                        |
| ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| [DirectionFlags](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/directionflags.md) | The parameter's read- and writability.                                                             |
| [Hints](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/hints.md)                   | The function parameter's metadata, extracted from any structured comments decorating the function. |
| [Name](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/name.md)                     | The parameter's name.                                                                              |
| [TypeName](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/typename.md)             | The name of the parameter's type.                                                                  |

## Methods

| Method                                                                                                     | Description                                                                                 |
| ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| [ToString](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/tostring.md) | Gets the parameter's declaration, as would be written in the shader function's declaration. |

## Enums

| Enum                                                                                                                            | Description                                               |
| ------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| [ReflectedParameter.Direction](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedparameter/direction.md) | The read- and writability flags for a function parameter. |
