我的人形開發筆記(二) Subset

製作自己的人形時有一個自己訂的規則, 希望「儘量的把功能都分開做」

  • 行為實現 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 中使用.

如此整個的人物操作, 就是一組精確到’幀’的位移佔用權交換.(這部份以後有機會再解釋)

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料