Skip to content

Instantly share code, notes, and snippets.

@shivaduke28
Created February 22, 2025 16:19
Show Gist options
  • Save shivaduke28/8d2310e49a1c60123fa422431c41e65e to your computer and use it in GitHub Desktop.
Save shivaduke28/8d2310e49a1c60123fa422431c41e65e to your computer and use it in GitHub Desktop.
Read VFX Graph's Parameters from .vfx file using VYaml
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using VYaml.Annotations;
using VYaml.Serialization;
namespace Rector.Editor
{
public static class VfxPropertyInfoReader
{
[MenuItem("Tools/Read VFX Property Info")]
public static void Test()
{
var selection = Selection.assetGUIDs;
foreach (var guid in selection)
{
var path = AssetDatabase.GUIDToAssetPath(guid);
if (path.EndsWith(".vfx"))
{
var text = System.IO.File.ReadAllBytes(path);
var docs = YamlSerializer.DeserializeMultipleDocuments<SerializedDocument>(text);
foreach (var doc in docs)
{
if (doc is { MonoBehaviour: { ParameterInfo: { } parameterInfo } })
{
foreach (var paramInfo in parameterInfo)
{
Debug.Log(paramInfo);
}
return;
}
}
}
}
}
}
[YamlObject]
public partial class SerializedDocument
{
[YamlMember("MonoBehaviour")] public SerializedVfxGraph MonoBehaviour;
}
// https://github.com/needle-mirror/com.unity.visualeffectgraph/blob/787767efd455eb421d58ec1109b055a5ad8b0777/Editor/Models/VFXGraph.cs
[YamlObject]
public partial class SerializedVfxGraph
{
[YamlMember("m_ParameterInfo")] public SerializedVFXParameterInfo[] ParameterInfo;
}
// https://github.com/needle-mirror/com.unity.visualeffectgraph/blob/13.0.0/Editor/Models/VFXParameterInfo.cs
[YamlObject]
public partial class SerializedVFXParameterInfo
{
[YamlMember("name")] public string Name;
[YamlMember("path")] public string Path;
[YamlMember("tooltip")] public string Tooltip;
[YamlMember("sheetType")] public string SheetType;
[YamlMember("realType")] public string RealType;
[YamlMember("defaultValue")] public VFXSerializableObject DefaultValue;
[YamlMember("min")] public float Min;
[YamlMember("max")] public float Max;
[YamlMember("enumValues")] public List<string> EnumValues;
[YamlMember("descendantCount")] public int DescendantCount;
public override string ToString() =>
$"Name: {Name}, Path: {Path}, Tooltip: {Tooltip}, SheetType: {SheetType}, RealType: {RealType}, DefaultValue: {DefaultValue}, Min: {Min}, Max: {Max}, EnumValues: {EnumValues}, DescendantCount: {DescendantCount}";
}
// https://github.com/needle-mirror/com.unity.visualeffectgraph/blob/787767efd455eb421d58ec1109b055a5ad8b0777/Editor/Core/VFXSerializer.cs
[YamlObject]
public partial class VFXSerializableObject
{
[YamlMember("m_Type")] public object Type;
[YamlMember("m_SerializableObject")] public string SerializableObject;
public override string ToString() => $"Type: {Type}, SerializableObject: {SerializableObject}";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment