Adventure Creator Wikia
(typo)
Tag: Visual edit
No edit summary
Tag: Visual edit
Line 5: Line 5:
 
# Add the component Animator Parameter Variable Link to your Animator component
 
# Add the component Animator Parameter Variable Link to your Animator component
 
# In the component's Inspector, enter the name of the variable/parameter into the "Shared Variable Name" field. If the parameter is only intended to be read - and not set via the variable's value - check "Download Only".
 
# In the component's Inspector, enter the name of the variable/parameter into the "Shared Variable Name" field. If the parameter is only intended to be read - and not set via the variable's value - check "Download Only".
AnimatorParameterLink.cs:
+
AnimatorParameterLink.cs:<syntaxhighlight lang="csharp">
using UnityEngine;<br>
+
using UnityEngine;
using AC;<br>
+
using AC;
<br>
 
public class AnimatorParameterLink : MonoBehaviour<br>
 
{<br>
 
<br>
 
public string sharedVariableName;<br>
 
public bool downloadOnly;<br>
 
private Variables variables;<br>
 
private Animator _animator;<br>
 
<br>
 
<br>
 
private void OnEnable()<br>
 
{<br>
 
variables = GetComponent <Variables>();<br>
 
_animator = GetComponent <Animator>();<br>
 
<br>
 
EventManager.OnDownloadVariable += OnDownload;<br>
 
EventManager.OnUploadVariable += OnUpload;<br>
 
}<br>
 
<br>
 
<br>
 
private void OnDisable()<br>
 
{<br>
 
EventManager.OnDownloadVariable -= OnDownload;<br>
 
EventManager.OnUploadVariable -= OnUpload;<br>
 
}<br>
 
<br>
 
<br>
 
private void OnDownload (GVar variable, Variables variables)<br>
 
{<br>
 
if (_animator == null || variables == null || string.IsNullOrEmpty (sharedVariableName))<br>
 
{<br>
 
return;<br>
 
}<br>
 
<br>
 
if (this.variables == variables && variable.label == sharedVariableName)<br>
 
{<br>
 
switch (variable.type)<br>
 
{<br>
 
case VariableType.Boolean:<br>
 
variable.BooleanValue = _animator.GetBool (sharedVariableName);<br>
 
break;<br>
 
<br>
 
case VariableType.Integer:<br>
 
variable.IntegerValue = _animator.GetInteger (sharedVariableName);<br>
 
break;<br>
 
<br>
 
case VariableType.Float:<br>
 
variable.FloatValue = _animator.GetFloat (sharedVariableName);<br>
 
break;<br>
 
<br>
 
default:<br>
 
break;<br>
 
}<br>
 
}<br>
 
}<br>
 
<br>
 
<br>
 
private void OnUpload (GVar variable, Variables variables)<br>
 
{<br>
 
if (_animator == null || variables == null || string.IsNullOrEmpty (sharedVariableName) || downloadOnly)<br>
 
{<br>
 
return;<br>
 
}<br>
 
<br>
 
if (this.variables == variables && variable.label == sharedVariableName)<br>
 
{<br>
 
switch (variable.type)<br>
 
{<br>
 
case VariableType.Boolean:<br>
 
_animator.SetBool (sharedVariableName, variable.BooleanValue);<br>
 
break;<br>
 
<br>
 
case VariableType.Integer:<br>
 
_animator.SetInteger (sharedVariableName, variable.IntegerValue);<br>
 
break;<br>
 
<br>
 
case VariableType.Float:<br>
 
_animator.SetFloat (sharedVariableName, variable.FloatValue);<br>
 
break;<br>
 
<br>
 
default:<br>
 
break;<br>
 
}<br>
 
}<br>
 
}<br>
 
}
 
   
 
public class AnimatorParameterLink : MonoBehaviour
 
  +
{
   
 
public string sharedVariableName;
 
public bool downloadOnly;
 
private Variables variables;
 
private Animator _animator;
  +
  +
 
private void OnEnable()
 
{
 
variables = GetComponent <Variables>();
 
_animator = GetComponent <Animator>();
  +
 
EventManager.OnDownloadVariable += OnDownload;
 
EventManager.OnUploadVariable += OnUpload;
 
}
  +
  +
 
private void OnDisable()
  +
{
 
EventManager.OnDownloadVariable -= OnDownload;
 
EventManager.OnUploadVariable -= OnUpload;
  +
}
  +
  +
 
private void OnDownload (GVar variable, Variables variables)
  +
{
 
if (_animator == null || variables == null || string.IsNullOrEmpty (sharedVariableName))
  +
{
 
return;
  +
}
  +
 
if (this.variables == variables && variable.label == sharedVariableName)
  +
{
 
switch (variable.type)
 
{
 
case VariableType.Boolean:
 
variable.BooleanValue = _animator.GetBool (sharedVariableName);
 
break;
  +
 
case VariableType.Integer:
 
variable.IntegerValue = _animator.GetInteger (sharedVariableName);
 
break;
  +
 
case VariableType.Float:
 
variable.FloatValue = _animator.GetFloat (sharedVariableName);
 
break;
  +
 
default:
 
break;
 
}
  +
}
  +
}
  +
  +
 
private void OnUpload (GVar variable, Variables variables)
  +
{
 
if (_animator == null || variables == null || string.IsNullOrEmpty (sharedVariableName) || downloadOnly)
  +
{
 
return;
  +
}
  +
 
if (this.variables == variables && variable.label == sharedVariableName)
  +
{
 
switch (variable.type)
 
{
 
case VariableType.Boolean:
 
_animator.SetBool (sharedVariableName, variable.BooleanValue);
 
break;
  +
 
case VariableType.Integer:
 
_animator.SetInteger (sharedVariableName, variable.IntegerValue);
 
break;
  +
 
case VariableType.Float:
 
_animator.SetFloat (sharedVariableName, variable.FloatValue);
 
break;
  +
 
default:
 
break;
 
}
  +
  +
}
  +
  +
}
  +
  +
}
  +
</syntaxhighlight>
 
[[Category:General]]
 
[[Category:General]]

Revision as of 07:21, 30 June 2021

This script allows you to sync up an Animator parameter's value with an AC component variable. To use it:

  1. Attach a Variables component to the Animator, and define a Bool, Integer, or Float parameter that matches the name of the Animator parameter you want to sync with.
  2. Set its Link to field to Custom Script
  3. Place the script below into a C# file named AnimatorParameterLink.cs
  4. Add the component Animator Parameter Variable Link to your Animator component
  5. In the component's Inspector, enter the name of the variable/parameter into the "Shared Variable Name" field. If the parameter is only intended to be read - and not set via the variable's value - check "Download Only".

AnimatorParameterLink.cs:

using UnityEngine;
using AC;

public class AnimatorParameterLink : MonoBehaviour
{

	public string sharedVariableName;
	public bool downloadOnly;
	private Variables variables;
	private Animator _animator;


	private void OnEnable()
	{
		variables = GetComponent <Variables>();
		_animator = GetComponent <Animator>();

		EventManager.OnDownloadVariable += OnDownload;
		EventManager.OnUploadVariable += OnUpload;
	}


	private void OnDisable()
	{
		EventManager.OnDownloadVariable -= OnDownload;
		EventManager.OnUploadVariable -= OnUpload;
	}


	private void OnDownload (GVar variable, Variables variables)
	{
		if (_animator == null || variables == null || string.IsNullOrEmpty (sharedVariableName))
		{
			return;
		}

		if (this.variables == variables && variable.label == sharedVariableName)
		{
			switch (variable.type)
			{
				case VariableType.Boolean:
					variable.BooleanValue = _animator.GetBool (sharedVariableName);
					break;

				case VariableType.Integer:
					variable.IntegerValue = _animator.GetInteger (sharedVariableName);
					break;

				case VariableType.Float:
					variable.FloatValue = _animator.GetFloat (sharedVariableName);
					break;

				default:
					break;
			}
		}
	}


	private void OnUpload (GVar variable, Variables variables)
	{
		if (_animator == null || variables == null || string.IsNullOrEmpty (sharedVariableName) || downloadOnly)
		{
			return;
		}

		if (this.variables == variables && variable.label == sharedVariableName)
		{
			switch (variable.type)
			{
				case VariableType.Boolean:
					_animator.SetBool (sharedVariableName, variable.BooleanValue);
					break;

				case VariableType.Integer:
					_animator.SetInteger (sharedVariableName, variable.IntegerValue);
					break;

				case VariableType.Float:
					_animator.SetFloat (sharedVariableName, variable.FloatValue);
					break;

				default:
					break;
			}

		}

	}

}