製作自己的人形時有一個自己訂的規則, 希望「儘量的把功能都分開做」
- 行為實現 object oriented programming (OOP), 地面行走, 跳, 空中位移等分開不同的class 做.
- 不同的功能可以自由的在線 on/off
就這樣可以有以下的好處
- 更好的方便管理不同的動作&功能
- 不同的功能更新的時候更容易的找出接合點.
缺點
- 就是編程是難度高啊.
- 功能之間互相影響的狀態要善用 locking, priority control 等功能.
public class Avatar { private AvatarSubset[] _subsets = null; public AvatarSubset[] subsets { get { if (_subsets == null) // Ensure only run once. _subsets = GetComponentInChildrens<AvatarSubset>(); return _subsets; } } private void Awake() { foreach(AvatarSubset sub in subsets) sub.Init(this); } } // Implement all related class via this type of methods. public abstract class AvatarSubset { protected Avatar avatar; internal Init(Avatar _avatar) => avatar = _avatar; }
人物的主 class `Avatar.cs` 就變為只負責做接合的一個地方.
AvatarSubset.cs 就是負責把 Avatar 裡面的功能帶到其下的 sub-class 中使用.
如此整個的人物操作, 就是一組精確到’幀’的位移佔用權交換.(這部份以後有機會再解釋)