chore: Assets 디렉토리 구조 정리 및 네이밍 컨벤션 적용

- Assets/_Game/ 하위로 게임 에셋 통합
- External/ 패키지 벤더별 분류 (Synty, Animations, UI)
- 에셋 네이밍 컨벤션 확립 및 적용
  (Data_Skill_, Data_SkillEffect_, Prefab_, Anim_, Model_, BT_ 등)
- pre-commit hook으로 네이밍 컨벤션 자동 검사 추가
- RESTRUCTURE_CHECKLIST.md 작성

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 19:08:27 +09:00
parent 309bf5f48b
commit c265f980db
17251 changed files with 2630777 additions and 206 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8e0da8384bb296e45ba9274ce956eb74
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,826 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator
// version 1.18.0
// from Assets/Synty/AnimationBaseLocomotion/Samples/Scripts/InputSystem/Controls.inputactions
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Utilities;
/// <summary>
/// Provides programmatic access to <see cref="InputActionAsset" />, <see cref="InputActionMap" />, <see cref="InputAction" /> and <see cref="InputControlScheme" /> instances defined in asset "Assets/Synty/AnimationBaseLocomotion/Samples/Scripts/InputSystem/Controls.inputactions".
/// </summary>
/// <remarks>
/// This class is source generated and any manual edits will be discarded if the associated asset is reimported or modified.
/// </remarks>
/// <example>
/// <code>
/// using namespace UnityEngine;
/// using UnityEngine.InputSystem;
///
/// // Example of using an InputActionMap named "Player" from a UnityEngine.MonoBehaviour implementing callback interface.
/// public class Example : MonoBehaviour, MyActions.IPlayerActions
/// {
/// private MyActions_Actions m_Actions; // Source code representation of asset.
/// private MyActions_Actions.PlayerActions m_Player; // Source code representation of action map.
///
/// void Awake()
/// {
/// m_Actions = new MyActions_Actions(); // Create asset object.
/// m_Player = m_Actions.Player; // Extract action map object.
/// m_Player.AddCallbacks(this); // Register callback interface IPlayerActions.
/// }
///
/// void OnDestroy()
/// {
/// m_Actions.Dispose(); // Destroy asset object.
/// }
///
/// void OnEnable()
/// {
/// m_Player.Enable(); // Enable all actions within map.
/// }
///
/// void OnDisable()
/// {
/// m_Player.Disable(); // Disable all actions within map.
/// }
///
/// #region Interface implementation of MyActions.IPlayerActions
///
/// // Invoked when "Move" action is either started, performed or canceled.
/// public void OnMove(InputAction.CallbackContext context)
/// {
/// Debug.Log($"OnMove: {context.ReadValue&lt;Vector2&gt;()}");
/// }
///
/// // Invoked when "Attack" action is either started, performed or canceled.
/// public void OnAttack(InputAction.CallbackContext context)
/// {
/// Debug.Log($"OnAttack: {context.ReadValue&lt;float&gt;()}");
/// }
///
/// #endregion
/// }
/// </code>
/// </example>
public partial class @Controls: IInputActionCollection2, IDisposable
{
/// <summary>
/// Provides access to the underlying asset instance.
/// </summary>
public InputActionAsset asset { get; }
/// <summary>
/// Constructs a new instance.
/// </summary>
public @Controls()
{
asset = InputActionAsset.FromJson(@"{
""version"": 1,
""name"": ""Controls"",
""maps"": [
{
""name"": ""Player"",
""id"": ""2c49ff3e-ee54-41db-a904-9d6a34278604"",
""actions"": [
{
""name"": ""Jump"",
""type"": ""Button"",
""id"": ""9c4baf7e-dd4a-45cb-b8b5-518f23ef2f3f"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Move"",
""type"": ""Value"",
""id"": ""105f8ab6-711b-48c9-afe5-81516e9a23b4"",
""expectedControlType"": ""Vector2"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": true
},
{
""name"": ""Look"",
""type"": ""Value"",
""id"": ""c7314668-554f-4d3e-9860-066f89d79485"",
""expectedControlType"": ""Vector2"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": true
},
{
""name"": ""Sprint"",
""type"": ""Button"",
""id"": ""8a1c0259-4ff4-47ce-8b18-87fa6457e43a"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""ToggleWalk"",
""type"": ""Button"",
""id"": ""81a5840a-1451-4af7-b390-f2f1e3099eb9"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Aim"",
""type"": ""Button"",
""id"": ""e440026d-b50a-4df1-ba03-48302673e522"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Crouch"",
""type"": ""Button"",
""id"": ""0a2dd0bc-e6ed-4515-b034-169169050ceb"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""LockOn"",
""type"": ""Button"",
""id"": ""a87fb759-f0bc-4a42-9e92-7f6bdec29e48"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
}
],
""bindings"": [
{
""name"": """",
""id"": ""4973493d-c628-41b1-8283-30a38a35726a"",
""path"": ""<Keyboard>/space"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""Jump"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""42025cc3-3d37-4b12-a885-8eca8f556f97"",
""path"": ""<Gamepad>/buttonSouth"",
""interactions"": """",
""processors"": """",
""groups"": ""Gamepad"",
""action"": ""Jump"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""1ab14112-e754-49ce-9d7a-515a9ab24396"",
""path"": ""<Gamepad>/leftStick"",
""interactions"": """",
""processors"": """",
""groups"": ""Gamepad"",
""action"": ""Move"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": ""2D Vector WASD"",
""id"": ""d68d1f5f-0e48-4c97-943a-5200d814ba4c"",
""path"": ""2DVector"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Move"",
""isComposite"": true,
""isPartOfComposite"": false
},
{
""name"": ""up"",
""id"": ""4601556f-fe76-459e-833c-8424f28ccfaf"",
""path"": ""<Keyboard>/w"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""Move"",
""isComposite"": false,
""isPartOfComposite"": true
},
{
""name"": ""down"",
""id"": ""0758e0d3-c53f-4406-b0c5-6b65928f6495"",
""path"": ""<Keyboard>/s"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""Move"",
""isComposite"": false,
""isPartOfComposite"": true
},
{
""name"": ""left"",
""id"": ""34ab6656-510b-4543-a02c-457d9d87d373"",
""path"": ""<Keyboard>/a"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""Move"",
""isComposite"": false,
""isPartOfComposite"": true
},
{
""name"": ""right"",
""id"": ""861a3c64-a95a-4fb2-90f1-2f7fc3994ebd"",
""path"": ""<Keyboard>/d"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""Move"",
""isComposite"": false,
""isPartOfComposite"": true
},
{
""name"": ""2D Vector Arrowkeys"",
""id"": ""cd992d5a-4846-4403-aad0-3c9049a191e5"",
""path"": ""2DVector"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Move"",
""isComposite"": true,
""isPartOfComposite"": false
},
{
""name"": ""up"",
""id"": ""35439dc7-4c62-4730-a600-57bd079992aa"",
""path"": ""<Keyboard>/upArrow"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Move"",
""isComposite"": false,
""isPartOfComposite"": true
},
{
""name"": ""down"",
""id"": ""8a40e7f9-06f6-4fea-82c8-a9bbfa9f3a45"",
""path"": ""<Keyboard>/downArrow"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Move"",
""isComposite"": false,
""isPartOfComposite"": true
},
{
""name"": ""left"",
""id"": ""a529365f-0079-4cdd-ad19-c2176ebc12a7"",
""path"": ""<Keyboard>/leftArrow"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Move"",
""isComposite"": false,
""isPartOfComposite"": true
},
{
""name"": ""right"",
""id"": ""032d5647-9197-4ab1-b0ed-73f9c573abaa"",
""path"": ""<Keyboard>/rightArrow"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Move"",
""isComposite"": false,
""isPartOfComposite"": true
},
{
""name"": """",
""id"": ""fd44343a-ca07-4f0a-95d7-29164ac381f0"",
""path"": ""<Mouse>/delta"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""Look"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""8a2bfa46-4ead-4a8f-aac0-c0bc4f585928"",
""path"": ""<Gamepad>/rightStick"",
""interactions"": """",
""processors"": ""ScaleVector2(x=4,y=4)"",
""groups"": ""Gamepad"",
""action"": ""Look"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""354b4cd8-944c-4d23-87b4-d26e6403b2a7"",
""path"": ""<Keyboard>/shift"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""Sprint"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""13547036-1d58-45f2-a2d8-c9f0706a8fb9"",
""path"": ""<Gamepad>/rightShoulder"",
""interactions"": """",
""processors"": """",
""groups"": ""Gamepad"",
""action"": ""Sprint"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""ab91ddfe-c482-4b55-aa59-bf1974a526b3"",
""path"": ""<Keyboard>/capsLock"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""ToggleWalk"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""b5d9ab6f-92ae-4d6a-85ce-20210c1efe16"",
""path"": ""<Gamepad>/leftStickPress"",
""interactions"": """",
""processors"": """",
""groups"": ""Gamepad"",
""action"": ""ToggleWalk"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""2d594f48-6585-4401-95f6-10f27afb0d84"",
""path"": ""<Mouse>/rightButton"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""Aim"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""9f00b84c-77a0-4264-88a7-aa6ace188e6e"",
""path"": ""<Gamepad>/leftTrigger"",
""interactions"": """",
""processors"": """",
""groups"": ""Gamepad"",
""action"": ""Aim"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""73eda66d-2118-4a22-9d70-18cc9ea08e74"",
""path"": ""<Keyboard>/ctrl"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""Crouch"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""78facee1-242d-43a5-b71f-75bfdb0ed6e1"",
""path"": ""<Gamepad>/buttonEast"",
""interactions"": """",
""processors"": """",
""groups"": ""Gamepad"",
""action"": ""Crouch"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""9f68216e-e598-4037-a000-2ca8be91e0ba"",
""path"": ""<Mouse>/middleButton"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard and Mouse"",
""action"": ""LockOn"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""bab278b9-2663-41cb-9167-ffb39759d9a9"",
""path"": ""<Gamepad>/rightStickPress"",
""interactions"": """",
""processors"": """",
""groups"": ""Gamepad"",
""action"": ""LockOn"",
""isComposite"": false,
""isPartOfComposite"": false
}
]
}
],
""controlSchemes"": [
{
""name"": ""Keyboard and Mouse"",
""bindingGroup"": ""Keyboard and Mouse"",
""devices"": [
{
""devicePath"": ""<Keyboard>"",
""isOptional"": false,
""isOR"": false
},
{
""devicePath"": ""<Mouse>"",
""isOptional"": false,
""isOR"": false
}
]
},
{
""name"": ""Gamepad"",
""bindingGroup"": ""Gamepad"",
""devices"": [
{
""devicePath"": ""<DualShockGamepad>"",
""isOptional"": true,
""isOR"": false
}
]
}
]
}");
// Player
m_Player = asset.FindActionMap("Player", throwIfNotFound: true);
m_Player_Jump = m_Player.FindAction("Jump", throwIfNotFound: true);
m_Player_Move = m_Player.FindAction("Move", throwIfNotFound: true);
m_Player_Look = m_Player.FindAction("Look", throwIfNotFound: true);
m_Player_Sprint = m_Player.FindAction("Sprint", throwIfNotFound: true);
m_Player_ToggleWalk = m_Player.FindAction("ToggleWalk", throwIfNotFound: true);
m_Player_Aim = m_Player.FindAction("Aim", throwIfNotFound: true);
m_Player_Crouch = m_Player.FindAction("Crouch", throwIfNotFound: true);
m_Player_LockOn = m_Player.FindAction("LockOn", throwIfNotFound: true);
}
~@Controls()
{
UnityEngine.Debug.Assert(!m_Player.enabled, "This will cause a leak and performance issues, Controls.Player.Disable() has not been called.");
}
/// <summary>
/// Destroys this asset and all associated <see cref="InputAction"/> instances.
/// </summary>
public void Dispose()
{
UnityEngine.Object.Destroy(asset);
}
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.bindingMask" />
public InputBinding? bindingMask
{
get => asset.bindingMask;
set => asset.bindingMask = value;
}
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.devices" />
public ReadOnlyArray<InputDevice>? devices
{
get => asset.devices;
set => asset.devices = value;
}
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.controlSchemes" />
public ReadOnlyArray<InputControlScheme> controlSchemes => asset.controlSchemes;
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.Contains(InputAction)" />
public bool Contains(InputAction action)
{
return asset.Contains(action);
}
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.GetEnumerator()" />
public IEnumerator<InputAction> GetEnumerator()
{
return asset.GetEnumerator();
}
/// <inheritdoc cref="IEnumerable.GetEnumerator()" />
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.Enable()" />
public void Enable()
{
asset.Enable();
}
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.Disable()" />
public void Disable()
{
asset.Disable();
}
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.bindings" />
public IEnumerable<InputBinding> bindings => asset.bindings;
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.FindAction(string, bool)" />
public InputAction FindAction(string actionNameOrId, bool throwIfNotFound = false)
{
return asset.FindAction(actionNameOrId, throwIfNotFound);
}
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.FindBinding(InputBinding, out InputAction)" />
public int FindBinding(InputBinding bindingMask, out InputAction action)
{
return asset.FindBinding(bindingMask, out action);
}
// Player
private readonly InputActionMap m_Player;
private List<IPlayerActions> m_PlayerActionsCallbackInterfaces = new List<IPlayerActions>();
private readonly InputAction m_Player_Jump;
private readonly InputAction m_Player_Move;
private readonly InputAction m_Player_Look;
private readonly InputAction m_Player_Sprint;
private readonly InputAction m_Player_ToggleWalk;
private readonly InputAction m_Player_Aim;
private readonly InputAction m_Player_Crouch;
private readonly InputAction m_Player_LockOn;
/// <summary>
/// Provides access to input actions defined in input action map "Player".
/// </summary>
public struct PlayerActions
{
private @Controls m_Wrapper;
/// <summary>
/// Construct a new instance of the input action map wrapper class.
/// </summary>
public PlayerActions(@Controls wrapper) { m_Wrapper = wrapper; }
/// <summary>
/// Provides access to the underlying input action "Player/Jump".
/// </summary>
public InputAction @Jump => m_Wrapper.m_Player_Jump;
/// <summary>
/// Provides access to the underlying input action "Player/Move".
/// </summary>
public InputAction @Move => m_Wrapper.m_Player_Move;
/// <summary>
/// Provides access to the underlying input action "Player/Look".
/// </summary>
public InputAction @Look => m_Wrapper.m_Player_Look;
/// <summary>
/// Provides access to the underlying input action "Player/Sprint".
/// </summary>
public InputAction @Sprint => m_Wrapper.m_Player_Sprint;
/// <summary>
/// Provides access to the underlying input action "Player/ToggleWalk".
/// </summary>
public InputAction @ToggleWalk => m_Wrapper.m_Player_ToggleWalk;
/// <summary>
/// Provides access to the underlying input action "Player/Aim".
/// </summary>
public InputAction @Aim => m_Wrapper.m_Player_Aim;
/// <summary>
/// Provides access to the underlying input action "Player/Crouch".
/// </summary>
public InputAction @Crouch => m_Wrapper.m_Player_Crouch;
/// <summary>
/// Provides access to the underlying input action "Player/LockOn".
/// </summary>
public InputAction @LockOn => m_Wrapper.m_Player_LockOn;
/// <summary>
/// Provides access to the underlying input action map instance.
/// </summary>
public InputActionMap Get() { return m_Wrapper.m_Player; }
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionMap.Enable()" />
public void Enable() { Get().Enable(); }
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionMap.Disable()" />
public void Disable() { Get().Disable(); }
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionMap.enabled" />
public bool enabled => Get().enabled;
/// <summary>
/// Implicitly converts an <see ref="PlayerActions" /> to an <see ref="InputActionMap" /> instance.
/// </summary>
public static implicit operator InputActionMap(PlayerActions set) { return set.Get(); }
/// <summary>
/// Adds <see cref="InputAction.started"/>, <see cref="InputAction.performed"/> and <see cref="InputAction.canceled"/> callbacks provided via <param cref="instance" /> on all input actions contained in this map.
/// </summary>
/// <param name="instance">Callback instance.</param>
/// <remarks>
/// If <paramref name="instance" /> is <c>null</c> or <paramref name="instance"/> have already been added this method does nothing.
/// </remarks>
/// <seealso cref="PlayerActions" />
public void AddCallbacks(IPlayerActions instance)
{
if (instance == null || m_Wrapper.m_PlayerActionsCallbackInterfaces.Contains(instance)) return;
m_Wrapper.m_PlayerActionsCallbackInterfaces.Add(instance);
@Jump.started += instance.OnJump;
@Jump.performed += instance.OnJump;
@Jump.canceled += instance.OnJump;
@Move.started += instance.OnMove;
@Move.performed += instance.OnMove;
@Move.canceled += instance.OnMove;
@Look.started += instance.OnLook;
@Look.performed += instance.OnLook;
@Look.canceled += instance.OnLook;
@Sprint.started += instance.OnSprint;
@Sprint.performed += instance.OnSprint;
@Sprint.canceled += instance.OnSprint;
@ToggleWalk.started += instance.OnToggleWalk;
@ToggleWalk.performed += instance.OnToggleWalk;
@ToggleWalk.canceled += instance.OnToggleWalk;
@Aim.started += instance.OnAim;
@Aim.performed += instance.OnAim;
@Aim.canceled += instance.OnAim;
@Crouch.started += instance.OnCrouch;
@Crouch.performed += instance.OnCrouch;
@Crouch.canceled += instance.OnCrouch;
@LockOn.started += instance.OnLockOn;
@LockOn.performed += instance.OnLockOn;
@LockOn.canceled += instance.OnLockOn;
}
/// <summary>
/// Removes <see cref="InputAction.started"/>, <see cref="InputAction.performed"/> and <see cref="InputAction.canceled"/> callbacks provided via <param cref="instance" /> on all input actions contained in this map.
/// </summary>
/// <remarks>
/// Calling this method when <paramref name="instance" /> have not previously been registered has no side-effects.
/// </remarks>
/// <seealso cref="PlayerActions" />
private void UnregisterCallbacks(IPlayerActions instance)
{
@Jump.started -= instance.OnJump;
@Jump.performed -= instance.OnJump;
@Jump.canceled -= instance.OnJump;
@Move.started -= instance.OnMove;
@Move.performed -= instance.OnMove;
@Move.canceled -= instance.OnMove;
@Look.started -= instance.OnLook;
@Look.performed -= instance.OnLook;
@Look.canceled -= instance.OnLook;
@Sprint.started -= instance.OnSprint;
@Sprint.performed -= instance.OnSprint;
@Sprint.canceled -= instance.OnSprint;
@ToggleWalk.started -= instance.OnToggleWalk;
@ToggleWalk.performed -= instance.OnToggleWalk;
@ToggleWalk.canceled -= instance.OnToggleWalk;
@Aim.started -= instance.OnAim;
@Aim.performed -= instance.OnAim;
@Aim.canceled -= instance.OnAim;
@Crouch.started -= instance.OnCrouch;
@Crouch.performed -= instance.OnCrouch;
@Crouch.canceled -= instance.OnCrouch;
@LockOn.started -= instance.OnLockOn;
@LockOn.performed -= instance.OnLockOn;
@LockOn.canceled -= instance.OnLockOn;
}
/// <summary>
/// Unregisters <param cref="instance" /> and unregisters all input action callbacks via <see cref="PlayerActions.UnregisterCallbacks(IPlayerActions)" />.
/// </summary>
/// <seealso cref="PlayerActions.UnregisterCallbacks(IPlayerActions)" />
public void RemoveCallbacks(IPlayerActions instance)
{
if (m_Wrapper.m_PlayerActionsCallbackInterfaces.Remove(instance))
UnregisterCallbacks(instance);
}
/// <summary>
/// Replaces all existing callback instances and previously registered input action callbacks associated with them with callbacks provided via <param cref="instance" />.
/// </summary>
/// <remarks>
/// If <paramref name="instance" /> is <c>null</c>, calling this method will only unregister all existing callbacks but not register any new callbacks.
/// </remarks>
/// <seealso cref="PlayerActions.AddCallbacks(IPlayerActions)" />
/// <seealso cref="PlayerActions.RemoveCallbacks(IPlayerActions)" />
/// <seealso cref="PlayerActions.UnregisterCallbacks(IPlayerActions)" />
public void SetCallbacks(IPlayerActions instance)
{
foreach (var item in m_Wrapper.m_PlayerActionsCallbackInterfaces)
UnregisterCallbacks(item);
m_Wrapper.m_PlayerActionsCallbackInterfaces.Clear();
AddCallbacks(instance);
}
}
/// <summary>
/// Provides a new <see cref="PlayerActions" /> instance referencing this action map.
/// </summary>
public PlayerActions @Player => new PlayerActions(this);
private int m_KeyboardandMouseSchemeIndex = -1;
/// <summary>
/// Provides access to the input control scheme.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputControlScheme" />
public InputControlScheme KeyboardandMouseScheme
{
get
{
if (m_KeyboardandMouseSchemeIndex == -1) m_KeyboardandMouseSchemeIndex = asset.FindControlSchemeIndex("Keyboard and Mouse");
return asset.controlSchemes[m_KeyboardandMouseSchemeIndex];
}
}
private int m_GamepadSchemeIndex = -1;
/// <summary>
/// Provides access to the input control scheme.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputControlScheme" />
public InputControlScheme GamepadScheme
{
get
{
if (m_GamepadSchemeIndex == -1) m_GamepadSchemeIndex = asset.FindControlSchemeIndex("Gamepad");
return asset.controlSchemes[m_GamepadSchemeIndex];
}
}
/// <summary>
/// Interface to implement callback methods for all input action callbacks associated with input actions defined by "Player" which allows adding and removing callbacks.
/// </summary>
/// <seealso cref="PlayerActions.AddCallbacks(IPlayerActions)" />
/// <seealso cref="PlayerActions.RemoveCallbacks(IPlayerActions)" />
public interface IPlayerActions
{
/// <summary>
/// Method invoked when associated input action "Jump" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnJump(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Move" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnMove(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Look" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnLook(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Sprint" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnSprint(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "ToggleWalk" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnToggleWalk(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Aim" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnAim(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Crouch" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnCrouch(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "LockOn" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnLockOn(InputAction.CallbackContext context);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6fecbbd7545b2634583b9c95c6a5b77f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,389 @@
{
"name": "Controls",
"maps": [
{
"name": "Player",
"id": "2c49ff3e-ee54-41db-a904-9d6a34278604",
"actions": [
{
"name": "Jump",
"type": "Button",
"id": "9c4baf7e-dd4a-45cb-b8b5-518f23ef2f3f",
"expectedControlType": "Button",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "Move",
"type": "Value",
"id": "105f8ab6-711b-48c9-afe5-81516e9a23b4",
"expectedControlType": "Vector2",
"processors": "",
"interactions": "",
"initialStateCheck": true
},
{
"name": "Look",
"type": "Value",
"id": "c7314668-554f-4d3e-9860-066f89d79485",
"expectedControlType": "Vector2",
"processors": "",
"interactions": "",
"initialStateCheck": true
},
{
"name": "Sprint",
"type": "Button",
"id": "8a1c0259-4ff4-47ce-8b18-87fa6457e43a",
"expectedControlType": "Button",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "ToggleWalk",
"type": "Button",
"id": "81a5840a-1451-4af7-b390-f2f1e3099eb9",
"expectedControlType": "Button",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "Aim",
"type": "Button",
"id": "e440026d-b50a-4df1-ba03-48302673e522",
"expectedControlType": "Button",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "Crouch",
"type": "Button",
"id": "0a2dd0bc-e6ed-4515-b034-169169050ceb",
"expectedControlType": "Button",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "LockOn",
"type": "Button",
"id": "a87fb759-f0bc-4a42-9e92-7f6bdec29e48",
"expectedControlType": "Button",
"processors": "",
"interactions": "",
"initialStateCheck": false
}
],
"bindings": [
{
"name": "",
"id": "4973493d-c628-41b1-8283-30a38a35726a",
"path": "<Keyboard>/space",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "Jump",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "42025cc3-3d37-4b12-a885-8eca8f556f97",
"path": "<Gamepad>/buttonSouth",
"interactions": "",
"processors": "",
"groups": "Gamepad",
"action": "Jump",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "1ab14112-e754-49ce-9d7a-515a9ab24396",
"path": "<Gamepad>/leftStick",
"interactions": "",
"processors": "",
"groups": "Gamepad",
"action": "Move",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "2D Vector WASD",
"id": "d68d1f5f-0e48-4c97-943a-5200d814ba4c",
"path": "2DVector",
"interactions": "",
"processors": "",
"groups": "",
"action": "Move",
"isComposite": true,
"isPartOfComposite": false
},
{
"name": "up",
"id": "4601556f-fe76-459e-833c-8424f28ccfaf",
"path": "<Keyboard>/w",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "Move",
"isComposite": false,
"isPartOfComposite": true
},
{
"name": "down",
"id": "0758e0d3-c53f-4406-b0c5-6b65928f6495",
"path": "<Keyboard>/s",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "Move",
"isComposite": false,
"isPartOfComposite": true
},
{
"name": "left",
"id": "34ab6656-510b-4543-a02c-457d9d87d373",
"path": "<Keyboard>/a",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "Move",
"isComposite": false,
"isPartOfComposite": true
},
{
"name": "right",
"id": "861a3c64-a95a-4fb2-90f1-2f7fc3994ebd",
"path": "<Keyboard>/d",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "Move",
"isComposite": false,
"isPartOfComposite": true
},
{
"name": "2D Vector Arrowkeys",
"id": "cd992d5a-4846-4403-aad0-3c9049a191e5",
"path": "2DVector",
"interactions": "",
"processors": "",
"groups": "",
"action": "Move",
"isComposite": true,
"isPartOfComposite": false
},
{
"name": "up",
"id": "35439dc7-4c62-4730-a600-57bd079992aa",
"path": "<Keyboard>/upArrow",
"interactions": "",
"processors": "",
"groups": "",
"action": "Move",
"isComposite": false,
"isPartOfComposite": true
},
{
"name": "down",
"id": "8a40e7f9-06f6-4fea-82c8-a9bbfa9f3a45",
"path": "<Keyboard>/downArrow",
"interactions": "",
"processors": "",
"groups": "",
"action": "Move",
"isComposite": false,
"isPartOfComposite": true
},
{
"name": "left",
"id": "a529365f-0079-4cdd-ad19-c2176ebc12a7",
"path": "<Keyboard>/leftArrow",
"interactions": "",
"processors": "",
"groups": "",
"action": "Move",
"isComposite": false,
"isPartOfComposite": true
},
{
"name": "right",
"id": "032d5647-9197-4ab1-b0ed-73f9c573abaa",
"path": "<Keyboard>/rightArrow",
"interactions": "",
"processors": "",
"groups": "",
"action": "Move",
"isComposite": false,
"isPartOfComposite": true
},
{
"name": "",
"id": "fd44343a-ca07-4f0a-95d7-29164ac381f0",
"path": "<Mouse>/delta",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "Look",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "8a2bfa46-4ead-4a8f-aac0-c0bc4f585928",
"path": "<Gamepad>/rightStick",
"interactions": "",
"processors": "ScaleVector2(x=4,y=4)",
"groups": "Gamepad",
"action": "Look",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "354b4cd8-944c-4d23-87b4-d26e6403b2a7",
"path": "<Keyboard>/shift",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "Sprint",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "13547036-1d58-45f2-a2d8-c9f0706a8fb9",
"path": "<Gamepad>/rightShoulder",
"interactions": "",
"processors": "",
"groups": "Gamepad",
"action": "Sprint",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "ab91ddfe-c482-4b55-aa59-bf1974a526b3",
"path": "<Keyboard>/capsLock",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "ToggleWalk",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "b5d9ab6f-92ae-4d6a-85ce-20210c1efe16",
"path": "<Gamepad>/leftStickPress",
"interactions": "",
"processors": "",
"groups": "Gamepad",
"action": "ToggleWalk",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "2d594f48-6585-4401-95f6-10f27afb0d84",
"path": "<Mouse>/rightButton",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "Aim",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "9f00b84c-77a0-4264-88a7-aa6ace188e6e",
"path": "<Gamepad>/leftTrigger",
"interactions": "",
"processors": "",
"groups": "Gamepad",
"action": "Aim",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "73eda66d-2118-4a22-9d70-18cc9ea08e74",
"path": "<Keyboard>/ctrl",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "Crouch",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "78facee1-242d-43a5-b71f-75bfdb0ed6e1",
"path": "<Gamepad>/buttonEast",
"interactions": "",
"processors": "",
"groups": "Gamepad",
"action": "Crouch",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "9f68216e-e598-4037-a000-2ca8be91e0ba",
"path": "<Mouse>/middleButton",
"interactions": "",
"processors": "",
"groups": "Keyboard and Mouse",
"action": "LockOn",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "bab278b9-2663-41cb-9167-ffb39759d9a9",
"path": "<Gamepad>/rightStickPress",
"interactions": "",
"processors": "",
"groups": "Gamepad",
"action": "LockOn",
"isComposite": false,
"isPartOfComposite": false
}
]
}
],
"controlSchemes": [
{
"name": "Keyboard and Mouse",
"bindingGroup": "Keyboard and Mouse",
"devices": [
{
"devicePath": "<Keyboard>",
"isOptional": false,
"isOR": false
},
{
"devicePath": "<Mouse>",
"isOptional": false,
"isOR": false
}
]
},
{
"name": "Gamepad",
"bindingGroup": "Gamepad",
"devices": [
{
"devicePath": "<DualShockGamepad>",
"isOptional": true,
"isOR": false
}
]
}
]
}

View File

@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: a7f8d78e4def66b45b53cbfc404ab4b4
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
generateWrapperCode: 1
wrapperCodePath:
wrapperClassName:
wrapperCodeNamespace:

View File

@@ -0,0 +1,169 @@
// Copyright (c) 2024 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// Sample scripts are included only as examples and are not intended as production-ready.
using System;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Serialization;
namespace Synty.AnimationBaseLocomotion.Samples.InputSystem
{
public class InputReader : MonoBehaviour, Controls.IPlayerActions
{
public Vector2 _mouseDelta;
public Vector2 _moveComposite;
public float _movementInputDuration;
public bool _movementInputDetected;
private Controls _controls;
public Action onAimActivated;
public Action onAimDeactivated;
public Action onCrouchActivated;
public Action onCrouchDeactivated;
public Action onJumpPerformed;
public Action onLockOnToggled;
public Action onSprintActivated;
public Action onSprintDeactivated;
public Action onWalkToggled;
/// <inheritdoc cref="OnEnable" />
private void OnEnable()
{
if (_controls == null)
{
_controls = new Controls();
_controls.Player.SetCallbacks(this);
}
_controls.Player.Enable();
}
/// <inheritdoc cref="OnDisable" />
public void OnDisable()
{
_controls.Player.Disable();
}
/// <summary>
/// Defines the action to perform when the OnLook callback is called.
/// </summary>
/// <param name="context">The context of the callback.</param>
public void OnLook(InputAction.CallbackContext context)
{
_mouseDelta = context.ReadValue<Vector2>();
}
/// <summary>
/// Defines the action to perform when the OnMove callback is called.
/// </summary>
/// <param name="context">The context of the callback.</param>
public void OnMove(InputAction.CallbackContext context)
{
_moveComposite = context.ReadValue<Vector2>();
_movementInputDetected = _moveComposite.magnitude > 0;
}
/// <summary>
/// Defines the action to perform when the OnJump callback is called.
/// </summary>
/// <param name="context">The context of the callback.</param>
public void OnJump(InputAction.CallbackContext context)
{
if (!context.performed)
{
return;
}
onJumpPerformed?.Invoke();
}
/// <summary>
/// Defines the action to perform when the OnToggleWalk callback is called.
/// </summary>
/// <param name="context">The context of the callback.</param>
public void OnToggleWalk(InputAction.CallbackContext context)
{
if (!context.performed)
{
return;
}
onWalkToggled?.Invoke();
}
/// <summary>
/// Defines the action to perform when the OnSprint callback is called.
/// </summary>
/// <param name="context">The context of the callback.</param>
public void OnSprint(InputAction.CallbackContext context)
{
if (context.started)
{
onSprintActivated?.Invoke();
}
else if (context.canceled)
{
onSprintDeactivated?.Invoke();
}
}
/// <summary>
/// Defines the action to perform when the OnCrouch callback is called.
/// </summary>
/// <param name="context">The context of the callback.</param>
public void OnCrouch(InputAction.CallbackContext context)
{
if (context.started)
{
onCrouchActivated?.Invoke();
}
else if (context.canceled)
{
onCrouchDeactivated?.Invoke();
}
}
/// <summary>
/// Defines the action to perform when the OnAim callback is called.
/// </summary>
/// <param name="context">The context of the callback.</param>
public void OnAim(InputAction.CallbackContext context)
{
if (context.started)
{
onAimActivated?.Invoke();
}
if (context.canceled)
{
onAimDeactivated?.Invoke();
}
}
/// <summary>
/// Defines the action to perform when the OnLockOn callback is called.
/// </summary>
/// <param name="context">The context of the callback.</param>
public void OnLockOn(InputAction.CallbackContext context)
{
if (!context.performed)
{
return;
}
onLockOnToggled?.Invoke();
onSprintDeactivated?.Invoke();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e00b029906eec204b82c90899d4343a6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,214 @@
// Copyright (c) 2024 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// Sample scripts are included only as examples and are not intended as production-ready.
using Synty.AnimationBaseLocomotion.Samples.InputSystem;
using UnityEngine;
namespace Synty.AnimationBaseLocomotion.Samples
{
public class SampleCameraController : MonoBehaviour
{
private const int _LAG_DELTA_TIME_ADJUSTMENT = 20;
[Tooltip("The character game object")]
[SerializeField]
private GameObject _syntyCharacter;
[Tooltip("Main camera used for player perspective")]
[SerializeField]
private Camera _mainCamera;
[SerializeField]
private Transform _playerTarget;
[SerializeField]
private Transform _lockOnTarget;
[SerializeField]
private bool _invertCamera;
[SerializeField]
private bool _hideCursor;
[SerializeField]
private bool _isLockedOn;
[SerializeField]
private float _mouseSensitivity = 5f;
[SerializeField]
private float _cameraDistance = 5f;
[SerializeField]
private float _cameraHeightOffset;
[SerializeField]
private float _cameraHorizontalOffset;
[SerializeField]
private float _cameraTiltOffset;
[SerializeField]
private Vector2 _cameraTiltBounds = new Vector2(-10f, 45f);
[SerializeField]
private float _positionalCameraLag = 1f;
[SerializeField]
private float _rotationalCameraLag = 1f;
private float _cameraInversion;
private InputReader _inputReader;
private float _lastAngleX;
private float _lastAngleY;
private Vector3 _lastPosition;
private float _newAngleX;
private float _newAngleY;
private Vector3 _newPosition;
private float _rotationX;
private float _rotationY;
private Transform _syntyCamera;
/// <inheritdoc cref="Start" />
private void Start()
{
_syntyCamera = gameObject.transform.GetChild(0);
_inputReader = _syntyCharacter.GetComponent<InputReader>();
_playerTarget = _syntyCharacter.transform.Find("SyntyPlayer_LookAt");
_lockOnTarget = _syntyCharacter.transform.Find("TargetLockOnPos");
if (_hideCursor)
{
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
}
_cameraInversion = _invertCamera ? 1 : -1;
transform.position = _playerTarget.position;
transform.rotation = _playerTarget.rotation;
_lastPosition = transform.position;
_syntyCamera.localPosition = new Vector3(_cameraHorizontalOffset, _cameraHeightOffset, _cameraDistance * -1);
_syntyCamera.localEulerAngles = new Vector3(_cameraTiltOffset, 0f, 0f);
}
/// <inheritdoc cref="Update" />
private void Update()
{
float positionalFollowSpeed = 1 / (_positionalCameraLag / _LAG_DELTA_TIME_ADJUSTMENT);
float rotationalFollowSpeed = 1 / (_rotationalCameraLag / _LAG_DELTA_TIME_ADJUSTMENT);
_rotationX = _inputReader._mouseDelta.y * _cameraInversion * _mouseSensitivity;
_rotationY = _inputReader._mouseDelta.x * _mouseSensitivity;
_newAngleX += _rotationX;
_newAngleX = Mathf.Clamp(_newAngleX, _cameraTiltBounds.x, _cameraTiltBounds.y);
_newAngleX = Mathf.Lerp(_lastAngleX, _newAngleX, rotationalFollowSpeed * Time.deltaTime);
if (_isLockedOn)
{
Vector3 aimVector = _lockOnTarget.position - _playerTarget.position;
Quaternion targetRotation = Quaternion.LookRotation(aimVector);
targetRotation = Quaternion.Lerp(transform.rotation, targetRotation, rotationalFollowSpeed * Time.deltaTime);
_newAngleY = targetRotation.eulerAngles.y;
}
else
{
_newAngleY += _rotationY;
_newAngleY = Mathf.Lerp(_lastAngleY, _newAngleY, rotationalFollowSpeed * Time.deltaTime);
}
_newPosition = _playerTarget.position;
_newPosition = Vector3.Lerp(_lastPosition, _newPosition, positionalFollowSpeed * Time.deltaTime);
transform.position = _newPosition;
transform.eulerAngles = new Vector3(_newAngleX, _newAngleY, 0);
_syntyCamera.localPosition = new Vector3(_cameraHorizontalOffset, _cameraHeightOffset, _cameraDistance * -1);
_syntyCamera.localEulerAngles = new Vector3(_cameraTiltOffset, 0f, 0f);
_lastPosition = _newPosition;
_lastAngleX = _newAngleX;
_lastAngleY = _newAngleY;
}
/// <summary>
/// Locks the camera to aim at a specified target.
/// </summary>
/// <param name="enable">Whether lock on is enabled or not.</param>
/// <param name="newLockOnTarget">The target to lock on to.</param>
public void LockOn(bool enable, Transform newLockOnTarget)
{
_isLockedOn = enable;
if (newLockOnTarget != null)
{
_lockOnTarget = newLockOnTarget;
}
}
/// <summary>
/// Gets the position of the camera.
/// </summary>
/// <returns>The position of the camera.</returns>
public Vector3 GetCameraPosition()
{
return _mainCamera.transform.position;
}
/// <summary>
/// Gets the forward vector of the camera.
/// </summary>
/// <returns>The forward vector of the camera.</returns>
public Vector3 GetCameraForward()
{
return _mainCamera.transform.forward;
}
/// <summary>
/// Gets the forward vector of the camera with the Y value zeroed.
/// </summary>
/// <returns>The forward vector of the camera with the Y value zeroed.</returns>
public Vector3 GetCameraForwardZeroedY()
{
return new Vector3(_mainCamera.transform.forward.x, 0, _mainCamera.transform.forward.z);
}
/// <summary>
/// Gets the normalised forward vector of the camera with the Y value zeroed.
/// </summary>
/// <returns>The normalised forward vector of the camera with the Y value zeroed.</returns>
public Vector3 GetCameraForwardZeroedYNormalised()
{
return GetCameraForwardZeroedY().normalized;
}
/// <summary>
/// Gets the right vector of the camera with the Y value zeroed.
/// </summary>
/// <returns>The right vector of the camera with the Y value zeroed.</returns>
public Vector3 GetCameraRightZeroedY()
{
return new Vector3(_mainCamera.transform.right.x, 0, _mainCamera.transform.right.z);
}
/// <summary>
/// Gets the normalised right vector of the camera with the Y value zeroed.
/// </summary>
/// <returns>The normalised right vector of the camera with the Y value zeroed.</returns>
public Vector3 GetCameraRightZeroedYNormalised()
{
return GetCameraRightZeroedY().normalized;
}
/// <summary>
/// Gets the X value of the camera tilt.
/// </summary>
/// <returns>The X value of the camera tilt.</returns>
public float GetCameraTiltX()
{
return _mainCamera.transform.eulerAngles.x;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f35617dd18fdbac4fb05187bac222064
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,82 @@
// Copyright (c) 2024 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// Sample scripts are included only as examples and are not intended as production-ready.
using UnityEngine;
namespace Synty.AnimationBaseLocomotion.Samples
{
public class SampleObjectLockOn : MonoBehaviour
{
public Material _highlightMat;
public Material _targetMat;
private Transform _highlightOrb;
private MeshRenderer _meshRenderer;
/// <inheritdoc cref="Start" />
private void Start()
{
_highlightOrb = transform.Find("TargetHighlight");
_meshRenderer = _highlightOrb.GetComponent<MeshRenderer>();
if (_meshRenderer == null)
{
Debug.LogError("This script requires a MeshRenderer component on the GameObject.");
}
}
/// <summary>
/// Adds this object as a potential lock on target if the player is within range of the target.
/// </summary>
/// <param name="otherCollider">The collider to check.</param>
private void OnTriggerEnter(Collider otherCollider)
{
SamplePlayerAnimationController playerAnimationController = otherCollider.GetComponent<SamplePlayerAnimationController>();
// Only interested in player collisions if they have the controller script.
if (playerAnimationController != null)
{
playerAnimationController.AddTargetCandidate(gameObject);
}
}
/// <summary>
/// Removes this object as a potential lock on target if the player is within range of the target.
/// </summary>
/// <param name="otherCollider">The collider to check.</param>
private void OnTriggerExit(Collider otherCollider)
{
SamplePlayerAnimationController playerAnimationController = otherCollider.GetComponent<SamplePlayerAnimationController>();
// Only interested in player collisions if they have the controller script.
if (playerAnimationController != null)
{
playerAnimationController.RemoveTarget(gameObject);
Highlight(false, false);
}
}
/// <summary>
/// Sets the highlight status of this object, and which highlight to use.
/// </summary>
/// <param name="enable">Whether the highlight is enabled on this object; or not.</param>
/// <param name="targetLock">Whether this object is locked on to; or not.</param>
public void Highlight(bool enable, bool targetLock)
{
Material currentMaterial = targetLock ? _targetMat : _highlightMat;
if (_highlightOrb != null)
{
_highlightOrb.gameObject.SetActive(enable);
if (enable)
{
_meshRenderer.material = currentMaterial;
}
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 75ec016dd7c8fec49afb4be540ee2566
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 095b8cf16ffa0984f8a9b6237c5e15ad
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: