Thèmes
RadialMenuUI permet une personnalisation visuelle poussée via RadialMenuTheme et RadialMenuConfig.
1. Personnaliser couleurs et opacité
Vous pouvez personnaliser l'apparence du fond de la roue, des tranches au survol, des icônes et du texte central :

var theme = new RadialMenuTheme("my_custom_theme")
{
// Teinte et alpha du fond de la roue
WheelTint = Color.FromArgb(20, 20, 30),
WheelBaseAlpha = 0.85f,
// Teinte de la tranche au survol (couleur de surbrillance)
HoverTint = Color.FromArgb(0, 180, 255), // Lueur néon cyan
// Teintes des icônes
IconNormalTint = Color.White,
IconHoverTint = Color.White,
IconDisabledTint = Color.FromArgb(120, 120, 120),
// Textes du hub central
CenterTextTint = Color.White,
CenterDisabledTextTint = Color.Gray
};
2. Nombre de tranches supportées
Le thème par défaut embarqué inclut des anneaux géométriques pré-rendus et pixel-perfect pour :
- 3, 4, 5, 6, 7, 8, 9, 10 et 12 tranches.
À la création d'un menu, passez le nombre de tranches souhaité :
// Un menu ultra-compact à 3 tranches
var smallMenu = new RadialMenuDef("compact", 3);
// Une grande roue d'inventaire à 12 tranches
var largeMenu = new RadialMenuDef("inventory", 12);
3. Art personnalisé de la roue (sprites de base)
Au-delà des teintes, vous pouvez remplacer entièrement l'art de l'anneau de la roue, de la tranche de survol et du hub central. Chaque visuel est un simple PNG : les textures sont chargées paresseusement par chemin (RadialMenuAssets.EnsureTexture) — aucune compilation ni génération à l'exécution.
Structure du dossier de skin du thème embarqué (scripts\RadialMenuUI\skins\default\) :
skins/default/
├── segment_8slots.png # fichier de validation du thème + gabarit d'une seule tranche
├── generated/
│ ├── wheel_full_{n}.png # roue de base atténuée pour n tranches (pré-cuite)
│ ├── segment_{n}_slot_{i}.png # tranche de survol, pré-rotée pour la tranche i (0-based)
│ └── segment_{n}_slot_{i}_runtime.png # tranche optionnelle quand un portrait runtime est affiché
├── center/
│ ├── center_bg.png # arrière-plan du hub
│ ├── arrow_left.png / arrow_right.png # flèches de pagination des variantes
│ └── dot_active.png / dot_inactive.png # points de pagination
└── icons/
└── wheel_*.png # icônes des entrées (voir Assets)
Option 1 — Remplacer l'art embarqué sur place (zéro code)
Remplacez vos propres PNG par-dessus le skin fourni, en conservant les mêmes noms et dimensions. La roue est dessinée en deux couches :
generated\wheel_full_{n}.png— la roue de base, atténuée avecWheelTintàWheelBaseAlpha(0.65 par défaut).generated\segment_{n}_slot_{i}.png— la tranche de survol, repeinte par-dessus en pleinHoverTint.
Les textures sont créées une seule fois et mises en cache par chemin absolu : remplacez les fichiers avant le premier rendu (redémarrez le jeu ou rechargez le mod), pas en pleine session.
Option 2 — Livrer son propre dossier de skin (par mod, recommandé)
Gardez votre art dans un dossier dédié pour ne jamais entrer en conflit avec le skin embarqué ou d'autres mods :
var theme = new RadialMenuTheme("my_skin")
.WithAssetRoot(@"skins\my_skin")
.WithIconRoot(@"skins\my_skin\icons");
theme.RegisterIcon("car", "wheel_car.png");
// ... puis application : menu.WithTheme(theme);
BaseDirectory est facultatif ; quand il est vide, la base est résolue automatiquement à côté de la DLL ou sous scripts\.
Contraintes géométriques
- La roue complète et chaque tranche sont dessinées centrées sur le même canvas ; le bord extérieur de l'art est attendu à ~92,8 % de ce canvas (
BgArtOuterF). Gardez le même rayon extérieur pour qu'une tranche recouvre exactement l'anneau de base. - Chaque tranche est pré-rotée pour son index et dessinée à rotation 0 — générez une tranche par secteur à son propre angle.
segment_8slots.pngdoit rester dans le skin : c'est le fichier de référence utilisé pour valider qu'un thème est installé.- Nombre de tranches supportées : 3 à 10 et 12 (
RadialMenuDef.IsSupportedSlotCount). Le skin doit fournir le setwheel_full_{n}et les tranches correspondants ; 4/6/8/10/12 sont préchauffées au démarrage, les autres chargées au premier usage.
Si vous voulez seulement un autre rendu (couleurs, opacité), les teintes de la section 1 suffisent en général — aucun art requis.
Pour les icônes, textures et images dynamiques, voir Assets.