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

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

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

  • 行為實現 object oriented programming (OOP), 地面行走, 跳, 空中位移等分開不同的class 做.
  • 不同的功能可以自由的在線 on/off

就這樣可以有以下的好處

  • 更好的方便管理不同的動作&功能
  • 不同的功能更新的時候更容易的找出接合點.

缺點

  • 就是編程是難度高啊.
  • 功能之間互相影響的狀態要善用 locking, priority control 等功能.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
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; }
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 如何處理網站訪客的留言資料