Mate-Engine/Assets/UMotionEditor/Manual/CustomProperty.html
shinyflvre 091ae7be88 Public Release X3.0b
# MateEngine X3.0

## Windows and Taskbar Sitting Rewrite

* Avatars sit more naturally on windows and the taskbar. Legs render in front while hair renders behind for a seamless look.
* Transitions between dragging and sitting are smoother.
* Alignment with windows and the taskbar improved. If a model looks off adjust **Y Offset** in settings. Some models may need minor manual tweaks due to different bone rigs.
* You can give headpats while the avatar sits. The avatar closes its eyes and shows sparkling particles. More headpat animations will be added later.
* The avatar no longer jumps off the taskbar when the Windows Start Menu or Search opens.
* You must hold the avatar for at least one second before it will sit to prevent accidental sits during fast moves.

## Feed System (Alpha)

* Avatars can drink. Press the middle mouse button to open the Food Radial menu. Spawn smoothies and bring them to the avatar to feed. This is an early access feature.
* When Spawning a Smoothie it will always spawn a Random smoothie! Keep in mind this feature is new and not perfect but i think it is a nice to have!

## Drag Smoothing

* Dragging the avatar feels smoother and more stable.
* A light smoothing effect was added to make dragging natural without noticeable delay.

## Taskbar Sitting Changes

* The circle menu is disabled while the avatar sits on the taskbar, showing only **Jump Off**.
* This prevents visual overlap from other UI while sitting.
* Moving the menu up while sitting increases cost, so it remains off for taskbar sitting but works normally on window sitting.

## Animation Changes

* Minor rotation adjustments to dragging animations.
* Improved transition timing for intimate animation for smoother flow.

## Minecraft Integration

MateEngine reacts to Minecraft events in real time. The avatar comments on gameplay, warns about danger, and celebrates victories.

### How it works

* Install the **MateSignal Forge mod** in Minecraft and run **MateEngine** on the same device or local network.
* MateSignal forwards in-game events to MateEngine so the avatar can display messages or play animations.
* Intended for singleplayer and private multiplayer use. Avoid competitive or official servers where live alerts could be an unfair advantage.

### Examples of reactions

* Day start: cheerful wake-up
* Night start: reminder to stay safe
* Nearby mobs: instant warnings for creepers, zombies, etc.
* Low health or hunger: worried or encouraging lines
* Crafting: excited comments
* Weather: reactions when rain starts
* Death: sad or comforting messages
* Biome discovery: happy or curious reactions
* Eating: cheering during meals
* Killing mobs: victory reactions

### Requirements

* Minecraft 1.21.10
* Forge Mod Loader
* MateSignal installed and integration enabled in MateEngine

## Dance Player Update

* Added **Lock Mode (Experimental)**. Enables camera tracking for dances that move the avatar far left or right so the window follows their motion.

## Hand Tracking Changes

* Hand tracking is more accurate to the mouse position.
* Reduced activation zone to prevent unwanted tracking on smaller avatars.

## Buy Option

* Added a buy button to the Minecraft Integration and Steam DLC categories. These buttons appear when running the free GitHub build.

## Bug Fixes

* Avatars no longer attach to windows or the taskbar while custom dances are active.
* Fixed avatar disappearing after sitting on minimized windows.
* Fixed incorrect positioning when a window closes.
* Fixed teleport when a window is maximized.

## Internal Changes

* Removed unused code to reduce missing script warnings.
* General cleanup and small performance adjustments.
2025-11-01 10:12:19 +01:00

328 lines
20 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="shortcut icon" type="image/png" href="styles/UMotionFavicon.png" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>UMotion Manual - Custom Property</title>
<link rel="stylesheet" type="text/css" href="styles/theme_styles.css" media="screen">
<link rel="stylesheet" type="text/css" href="styles/treeview_styles.css" media="screen">
<link rel="stylesheet" type="text/css" href="styles/element_styles.css" media="screen">
</head>
<body>
<div class="header">
<div class="headerLogo">
<img src="styles/UMotionLogoHeader.png"></img>
</div>
<div class="headerBlueRight">
<a href="https://www.soxware.com" class="headerLink">soxware.com</a>
</div>
</div>
<div class="versionHeader">
<p class="versionText">Version: <b>1.29p04</b> </p>
</div>
<div class="leftContent">
<div class="leftContentInner">
<div class="leftContentHeadline">
UMotion Manual
</div>
<!-- Tree View -->
<ol class="tree">
<li class="file"><a href="UMotionManual.html">UMotion Manual</a></li>
<li class="file"><a href="Introduction.html">Introduction & Tips</a></li>
<li class="file"><a href="GettingStarted.html">Getting Started</a></li>
<li>
<label for="VideoTutorials"><a href="VideoTutorials.html" class="treeFolderLink">Video Tutorials</a></label> <input type="checkbox" id="VideoTutorials" />
<ol>
<li>
<label for="GeneralTutorials"><a href="GeneralTutorials.html" class="treeFolderLink">General</a></label> <input type="checkbox" id="GeneralTutorials" />
<ol>
<li class="file"><a href="QuickStart.html">Quick Start Tutorial</a></li>
<li class="file"><a href="Lesson1.html">1) Installation & First Steps</a></li>
<li class="file"><a href="Lesson2.html">2) Pose Editing</a></li>
<li class="file"><a href="Lesson3.html">3) Clip Editor</a></li>
<li class="file"><a href="Lesson4.html">4) Curves & Rotation Modes</a></li>
<li class="file"><a href="Lesson5.html">5) Config Mode</a></li>
<li class="file"><a href="Lesson6.html">6) Export Animations</a></li>
<li class="file"><a href="Lesson7.html">7) Root Motion</a></li>
<li class="file"><a href="Lesson8.html">8) Animation Events</a></li>
<li class="file"><a href="Lesson9.html">9) Pose Mirroring</a></li>
</ol>
</li>
<li>
<label for="ProfessionalExclusive"><a href="ProfessionalExclusive.html" class="treeFolderLink">UMotion Pro</a></label> <input type="checkbox" id="ProfessionalExclusive" />
<ol>
<li class="file"><a href="ProLesson1.html">1) Importing Animations</a></li>
<li class="file"><a href="ProLesson2.html">2) Inverse Kinematics</a></li>
<li class="file"><a href="ProLesson3.html">3) Child-Of Constraint</a></li>
<li class="file"><a href="ProLesson4.html">4) Custom Properties</a></li>
<li class="file"><a href="ProLesson5.html">5) IK Pinning</a></li>
</ol>
</li>
<li>
<label for="InPractice"><a href="InPractice.html" class="treeFolderLink">In Practice</a></label> <input type="checkbox" id="InPractice" />
<ol>
<li class="file"><a href="InPractice1.html">1) Our First Animation</a></li>
<li class="file"><a href="InPractice2.html">2) Editing Animations</a></li>
<li class="file"><a href="InPractice3.html">3) Customizing an animation for a RPG</a></li>
<li class="file"><a href="InPractice4.html">4) Unity Timeline & Weighted Tangents</a></li>
</ol>
</li>
<li>
<label for="Jayanam"><a href="Jayanam.html" class="treeFolderLink">Jayanam</a></label> <input type="checkbox" id="Jayanam" />
<ol>
<li class="file"><a href="Jayanam1.html">UMotion Tutorial</a></li>
</ol>
</li>
</ol>
</li>
<li class="file"><a href="HowToCreateBetterAnimations.html">How to create better animations</a></li>
<li>
<label for="ClipEditor"><a href="ClipEditor.html" class="treeFolderLink">Clip Editor</a></label> <input type="checkbox" id="ClipEditor" />
<ol>
<li>
<label for="MenuBar"><a href="MenuBar.html" class="treeFolderLink">Menu Bar</a></label> <input type="checkbox" id="MenuBar" />
<ol>
<li class="file"><a href="MenuBarFile.html">File</a></li>
<li class="file"><a href="MenuBarEdit.html">Edit</a></li>
<li class="file"><a href="MenuBarHelp.html">Help</a></li>
</ol>
</li>
<li class="file"><a href="Preferences.html">Preferences</a></li>
<li class="file"><a href="ImportExport.html">Import / Export</a></li>
<li class="file"><a href="FKtoIKConversion.html">FK to IK Conversion</a></li>
<li>
<label for="MainNavigation"><a href="MainNavigation.html" class="treeFolderLink">Main Navigation</a></label> <input type="checkbox" id="MainNavigation" />
<ol>
<li class="file"><a href="ProjectSettings.html">Project Settings</a></li>
<li class="file"><a href="ClipSettings.html">Clip Settings</a></li>
</ol>
</li>
<li class="file"><a href="AnimatedPropertiesList.html">Animated Properties List</a></li>
<li class="file"><a href="RootMotion.html">Root Motion</a></li>
<li class="file"><a href="RotationModes.html">Rotation Modes</a></li>
<li>
<label for="DopesheetCurves"><a href="DopesheetCurves.html" class="treeFolderLink">Dopesheet / Curves View</a></label> <input type="checkbox" id="DopesheetCurves" />
<ol>
<li class="file"><a href="Dopesheet.html">Dopesheet</a></li>
<li class="file"><a href="Curves.html">Curves View</a></li>
</ol>
</li>
<li class="file"><a href="Playback.html">Playback Navigation</a></li>
<li class="file"><a href="Layers.html">Layers</a></li>
</ol>
</li>
<li>
<label for="PoseEditor"><a href="PoseEditor.html" class="treeFolderLink">Pose Editor</a></label> <input type="checkbox" checked id="PoseEditor" />
<ol>
<li>
<label for="ConfigMode"><a href="ConfigMode.html" class="treeFolderLink">Config Mode</a></label> <input type="checkbox" id="ConfigMode" />
<ol>
<li>
<label for="RigHierarchy"><a href="RigHierarchy.html" class="treeFolderLink">Rig Hierarchy</a></label> <input type="checkbox" id="RigHierarchy" />
<ol>
<li class="file"><a href="IKSetupWizard.html">IK Setup Wizard</a></li>
<li class="file"><a href="MirrorMapping.html">Mirror Mapping</a></li>
</ol>
</li>
<li class="file"><a href="Configuration.html">Configuration</a></li>
<li class="file"><a href="ConfigDisplay.html">Display</a></li>
</ol>
</li>
<li>
<label for="PoseMode"><a href="PoseMode.html" class="treeFolderLink">Pose Mode</a></label> <input type="checkbox" id="PoseMode" />
<ol>
<li class="file"><a href="Tools.html">Tools</a></li>
<li class="file"><a href="Channels.html">Channels</a></li>
<li class="file"><a href="Selection.html">Selection</a></li>
<li class="file"><a href="PoseDisplay.html">Display</a></li>
<li class="file"><a href="Animation.html">Animation</a></li>
</ol>
</li>
<li>
<label for="Constraints"><a href="Constraints.html" class="treeFolderLink">Constraint System</a></label> <input type="checkbox" checked id="Constraints" />
<ol>
<li class="file"><a href="InverseKinematics.html">Inverse Kinematics</a></li>
<li class="file"><a href="ChildOf.html">Child-Of</a></li>
<li class="file"><a href="CustomProperty.html"><b><u>Custom Property</u></b></a></li>
</ol>
</li>
<li class="file"><a href="Options.html">Options</a></li>
<li class="file"><a href="ToolAssistant.html">Tool Assistant</a></li>
</ol>
</li>
<li class="file"><a href="EditInPlayMode.html">Edit In Play Mode</a></li>
<li class="file"><a href="UnityTimelineIntegration.html">Unity Timeline Integration</a></li>
<li class="file"><a href="UMotionAPI.html">UMotion API</a></li>
<li class="file"><a href="ExportingAnimationsFAQ.html">Exporting Animations FAQ</a></li>
<li class="file"><a href="Support.html">Support / FAQ</a></li>
<li class="file"><a href="ReleaseNotes.html">Release Notes</a></li>
<li class="file"><a href="KnownIssues.html">Known Issues</a></li>
<li class="file"><a href="Credits.html">Credits</a></li>
</ol>
</div>
</div>
<div class="mainContent">
<div class="mainContentInner">
<h1 class="headline1" id="">Custom Property</h1><p class="textBlock">The Custom Property makes it possible to add new properties to a joint/transform. It has 3 different operating modes:</p><ul class="listMain">
<li class="listItem"><span class="listText"><a href="CustomProperty.html#Controller" class="link">Controller</a></span></li>
<li class="listItem"><span class="listText"><a href="CustomProperty.html#ComponentProperty" class="link">Component Property</a></span></li>
<li class="listItem"><span class="listText"><a href="CustomProperty.html#AnimatorParameter" class="link">Animator Parameter</a></span></li>
</ul><p class="textBlock">Custom Properties appear in the Clip Editor's <a href="AnimatedPropertiesList.html" class="link">Animated Properties List</a> and in the Pose Editor's <a href="Channels.html" class="link">Channels List</a>. They can be keyed like any other property. Custom Properties can be constrained, meaning that the input value can be limited to a minimum and maximum value. A constrained property is displayed with a slider in the Channels List.</p><p class="textBlock">Multiple Custom Property Constraints can be added per joint/transform but the name must be unique within the same joint/transform.</p><p class="textBlock"><b>Tip:</b> Most settings of the Custom Property Constraint have the option to be mass applied. <span class="keyboardKey">context click</span> on a setting to open a context menu that provides the option to mass apply the settings current value to all currently selected Custom Property Constraints.</p><img src="images/CustomPropertyConstraintMassApply.png" class="image"></img>
<p class="imageText">Apply setting to all</p><h2 class="headline2" id="Controller">Controller</h2><p class="textBlock">In this operating mode a Custom Property is like a remote control. It can control one or multiple existing properties. This allows to give existing properties more speaking names and simplifies animating as multiple properties can be controlled at the same time (useful when e.g. all <b>FK/IK Blend</b> properties should be controlled at the same time).</p><p class="textBlock">By enabling scaling the Custom Property can have an input value of e.g. -1 ... 0 and scale it to -45 ... 45 for the driven property. Only predefined floating point value typed properties can be driven.</p><p class="textBlock">The driven property is set to read only. It can't be manipulated with a <a href="Tools.html" class="link">Pose Editor Tool</a> or in the <a href="Curves.html" class="link">Curves View</a> of the Clip Editor.</p><h3 class="headline3" id="">Setup</h3><img src="images/CustomPropertyConstraintControllerSetup.png" class="image"></img>
<p class="imageText">Custom Property Constraint - Controller Setup</p><table class="themeTable">
<tr class="themeTableRow">
<th class="themeTableHeader">UI Element</th>
<th class="themeTableHeader">Description</th>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Name</td>
<td class="themeTableCell">The name of the Custom Property.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Driven</td>
<td class="themeTableCell">A list of joint/transforms whose properties should be controlled by this Custom Property.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Channel</td>
<td class="themeTableCell">The channel that should be controlled by the custom property. Only floating point channels are supported. The selected channel will be set in read-only mode in the driven joints/transforms.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Scaling</td>
<td class="themeTableCell">Enables/Disables scaling of the Custom Property input value.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Constrain Input</td>
<td class="themeTableCell">Enables/Disables limiting of the Custom Property input value.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Input Min/Max</td>
<td class="themeTableCell">Only visible when Scaling or <b>Constrain Input</b> is enabled. Defines the input range of the Custom Property (i.e. the driver). If Constrain Input is enabled, the limits can't be exceeded. If Scaling is enabled, those values are used for scaling (the Driver min value will map to the Driven min value etc.).</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Driven Min/Max</td>
<td class="themeTableCell">Only visible when <b>Scaling</b> is enabled. Defines to which values the Custom Property input values should be scaled to when being applied to the driven property.</td>
</tr>
</table><h2 class="headline2" id="ComponentProperty">Component Property</h2><p class="textBlock">In this operating mode a Custom Property is used to animate a property of a component (MonoBehaviour) of the animated GameObject.</p><p class="textBlock">Typical use cases are:</p><ul class="listMain">
<li class="listItem"><span class="listText">Animating <a href="https://docs.unity3d.com/Manual/BlendShapes.html" class="link">Blend Shape</a> weights (e.g. for animating facial expressions)</span></li>
<li class="listItem"><span class="listText">Animating the collider size (e.g. reducing the height while crouching)</span></li>
<li class="listItem"><span class="listText">Animating a Light component's intensity property for a gun fire animation</span></li>
<li class="listItem"><span class="listText">...</span></li>
</ul><p class="textBlock">A property of a component (or a blend shape) can only be animated by a single Custom Property. The Custom Property can be attached to a completely different joint/transform than the component that should be animated.</p><p class="textBlock">Before importing animation clips that contain curves for blend shapes or component properties, a Custom Property for these properties needs to be configured. Curves where no related Custom Property can be found won't be imported.</p><h3 class="headline3" id="">Blend Shapes</h3><p class="textBlock">When a new project is created and a Game Object is applied to the Pose Editor for the first time, UMotion can automatically create Custom Properties for all blend shapes of that GameObject (if the user accepts that in the appearing dialog window).</p><p class="textBlock">For existing projects it might be necessary to manually add blend shapes. Therefore add a new Custom Property constraint using the component Property mode to a desired joint/transform. As "Object" the transform that has the "Skinned Mesh Renderer" attached needs to be selected. Select "Skinned Mesh Renderer / Blend Shape / &ltyour blend shape name&gt" as property and your done.</p><h3 class="headline3" id="">Setup</h3><img src="images/CustomPropertyConstraintComponentPropertySetup.png" class="image"></img>
<p class="imageText">Custom Property Constraint - Component Property Setup</p><table class="themeTable">
<tr class="themeTableRow">
<th class="themeTableHeader">UI Element</th>
<th class="themeTableHeader">Description</th>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Name</td>
<td class="themeTableCell">The name of the Custom Property.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Object</td>
<td class="themeTableCell">The object that holds the component of which a property should be animated.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Property</td>
<td class="themeTableCell">Select the property that should be animated by clicking on the "..." button. A context menu displays all components and all properties that can be animated. Blend shapes can be found under the "Skinned Mesh Renderer" component.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Preview</td>
<td class="themeTableCell">When enabled the value of the animated component property is written in Pose Mode. This makes it possible to preview the changes inside UMotion. Changes are reverted when the animated GameObject is not controlled by the Pose Editor anymore (clear was pressed).</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Constrain Input</td>
<td class="themeTableCell">Enables/Disables limiting of the Custom Property input value.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Input Min/Max</td>
<td class="themeTableCell">Only visible when Constrain Input is enabled. Defines the input range of the Custom Property.</td>
</tr>
</table><h2 class="headline2" id="AnimatorParameter">Animator Parameter</h2><p class="textBlock">In this operating mode a Custom Property is used to animate the value of a <a href="https://docs.unity3d.com/Manual/AnimationParameters.html" class="link">Parameter of an Animator Controller</a>. This is similar as if an animation curve is added in the model import settings (see <a href="https://docs.unity3d.com/Manual/AnimationCurvesOnImportedClips.html" class="link">Animation Curves on Imported Clips - Unity Manual</a>).</p><h3 class="headline3" id="">Setup</h3><img src="images/CustomPropertyConstraintAnimatorParameterSetup.png" class="image"></img>
<p class="imageText">Custom Property Constraint - Animator Parameter Setup</p><table class="themeTable">
<tr class="themeTableRow">
<th class="themeTableHeader">UI Element</th>
<th class="themeTableHeader">Description</th>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell">Name</td>
<td class="themeTableCell">The name of the Custom Property.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell">Constrain Input</td>
<td class="themeTableCell">Enables/Disables limiting of the Custom Property input value. When enabled, the Custom Property is displayed with a slider in the Channels panel.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell">Input Min/Max</td>
<td class="themeTableCell">Only visible when <b>Constrain Input</b> is enabled. Defines the input range of the Custom Property.</td>
</tr>
</table><h2 class="headline2" id="">Tip: Boolean Curves</h2><p class="textBlock">If the Custom Property constraint is used as a <b>Component Property</b> or <b>Animator Parameter</b> it can also be used for animating Boolean properties/parameters. The curve will be displayed like any other float curve inside UMotion. When applied to the property/parameter it is evaluated as "false" if the value equals 0 and "true" if it equals any non-zero value. For simplicity it is recommended to use 0 (= false) and 1 (= true) exclusively as key values inside UMotion. It's also recommended to use the tangent mode "Constant" for all keys of Boolean curves.</p>
<div class="mainContentFooter">
<p class="textBlock" style="float:left">Copyright © 2017 - 2021 Soxware Interactive ALL RIGHTS RESERVED</p>
<p class="textBlock" align="right"><a href="https://forum.unity.com/threads/new-umotion-animation-editor-released.490618/" class="link">Unity Forum Thread</a> | <a href="https://www.facebook.com/Soxware/" class="link">Facebook</a> | <a href="https://twitter.com/SoxwareInteract" class="link">Twitter</a> | <a href="https://www.youtube.com/channel/UCCuE6nI5gHvUQjx0lo6Twtg" class="link">Youtube</a></p>
</div>
</div>
</div>
</body>
</html>