Files
GameDevTVObstacleDodge/Library/PackageCache/com.unity.cinemachine@5342685532bb/Editor/PropertyDrawers/TrackerSettingsPropertyDrawer.cs

46 lines
2.1 KiB
C#
Raw Normal View History

2026-01-08 16:50:20 +00:00
using UnityEditor;
using UnityEngine.UIElements;
using UnityEditor.UIElements;
namespace Unity.Cinemachine.Editor
{
[CustomPropertyDrawer(typeof(TargetTracking.TrackerSettings))]
class TrackerSettingsPropertyDrawer : PropertyDrawer
{
public override VisualElement CreatePropertyGUI(SerializedProperty property)
{
TargetTracking.TrackerSettings def = new();
var modeProp = property.FindPropertyRelative(() => def.BindingMode);
var rotModeProp = property.FindPropertyRelative(() => def.AngularDampingMode);
var ux = new VisualElement();
ux.Add(new PropertyField(modeProp));
var rotModeField = ux.AddChild(new PropertyField(rotModeProp));
var rotDampingField = ux.AddChild(new PropertyField(property.FindPropertyRelative(() => def.RotationDamping)));
var quatDampingField = ux.AddChild(new PropertyField(property.FindPropertyRelative(() => def.QuaternionDamping)));
ux.Add(new PropertyField(property.FindPropertyRelative(() => def.PositionDamping)));
ux.TrackPropertyWithInitialCallback(modeProp, (modeProp) => UpdateRotVisibility());
ux.TrackPropertyWithInitialCallback(rotModeProp, (modeProp) => UpdateRotVisibility());
void UpdateRotVisibility()
{
if (modeProp.IsDeletedObject())
return;
var mode = (TargetTracking.BindingMode)modeProp.intValue;
var rotMode = (TargetTracking.AngularDampingMode)rotModeProp.intValue;
bool showRot = mode != TargetTracking.BindingMode.WorldSpace && mode != TargetTracking.BindingMode.LazyFollow;
bool showQuat = mode == TargetTracking.BindingMode.LockToTarget && rotMode == TargetTracking.AngularDampingMode.Quaternion;
rotModeField.SetVisible(mode == TargetTracking.BindingMode.LockToTarget);
rotDampingField.SetVisible(showRot && !showQuat);
quatDampingField.SetVisible(showRot && showQuat);
}
return ux;
}
}
}