Envoyé par
Harsyx
Y'a 2-3 jeux indé récemment qui m'ont remotivé à faire des petits jeux amateur
J'avais une problématique à l'époque, c'était comment gérer le partage de données entre plusieurs entités/gameobjects dans une même session.
J'utilisais des ScriptableObject, et c'était assez ambigu car j'en créais également pour leur objectif premier : persister de la configuration/données plutôt que de les harcoder.
Donc je pouvais avoir un SO qui pouvait avoir les deux : par exemple "baseHeroHP" qui lui était figé (et n'était voué à être modifié qu'en mode édition Unity), et un "currentHeroHP" qui lui était changeant en mode exécution (mais à chaque fois reset lors qu'une nouvelle exécution).
Vous avez d'autres techniques ?
Je ne vois pas le problème de mettre des données statiques et dynamiques dans un même Scriptable Object, c'est exactement ce que je fais pour le jeu que je développe actuellement. Pour exemple, voilà le script d'un SO qui stocke les HP de mon Player (c'est juste un int) :
Code:
using UnityEngine;
[System.Serializable]
[CreateAssetMenu(menuName = "ScriptableObjects/RangedInt")]
public class RangedInt : ScriptableObject
{
[SerializeField] private int _value;
[SerializeField] private int _defaultValue;
[SerializeField] private int _minValue;
[SerializeField] private int _maxValue;
#region Public properties
public int Value
{
get => _value;
set => _value = Mathf.Clamp(value, _minValue, _maxValue);
}
public int DefaultValue
{
get => _defaultValue;
}
public int MinValue
{
get => _minValue;
}
public int MaxValue
{
get => _maxValue;
}
public float Normalized
{
get => _value / (float)_maxValue;
}
#endregion
#region Public Methods
public void AddToValue(int value)
{
Value += value;
}
public void SusbstractToValue(int value)
{
Value -= value;
}
#endregion
}
T'as les "defaultValue", "minValue" et "maxValue" qui ne bougent pas et seule "Value" change selon ce qui se passe dans le jeu.