protected override IEnumerator CoUpdateLipSync() { while (IsPlaying) { string pattern = AvatarData.ToPatternName(Avator.AvatarPattern.GetPatternName(LipTag)); if (string.IsNullOrEmpty(pattern)) { break; } foreach (var data in AnimationData.DataList) { Avator.ChangePattern(LipTag, data.ComvertName(pattern)); yield return(TimeUtil.WaitForSeconds(UnscaledTime, data.Duration)); while (IsPausing) { yield return(null); } } Avator.ChangePattern(LipTag, pattern); if (!IsPlaying) { break; } yield return(TimeUtil.WaitForSeconds(UnscaledTime, Interval)); while (IsPausing) { yield return(null); } } coLypSync = null; yield break; }
//すべてのパターン名を取得 public HashSet <string> GetAllPatternNames() { HashSet <string> set = new HashSet <string>(); this.Sprites.ForEach(x => set.Add(AvatarData.ToPatternName(x))); return(set); }
public List <Sprite> MakeSortedSprites(AvatarPattern pattern) { List <Sprite> sprites = new List <Sprite>(); foreach (var category in categories) { if (category.Tag != optionTag) { //アクセサリなどのオプションではないので //パターンデータに一致するスプライトを追加していく foreach (var data in pattern.DataList) { //カテゴリタグがあうものを取得 if (category.Tag != data.tag) { continue; } //パタ―ン名が一致する一つだけを取得 sprites.Add(category.GetSprite(data.patternName)); } } else { //アクセサリなどのオプションの場合は、パターン名に一致するものはすべて取得 foreach (var optionPattern in pattern.OptionPatternNameList) { sprites.AddRange(category.Sprites.FindAll(x => AvatarData.ToPatternName(x) == optionPattern)); } } } return(sprites); }
bool CheckPatternError(AvatarPattern pattern, AvatarPattern.PartternData patternData) { if (string.IsNullOrEmpty(patternData.patternName)) { return(false); } foreach (var category in categories) { if (category.Tag != optionTag) { if (category.Tag != patternData.tag) { continue; } if (category.GetSprite(patternData.patternName) != null) { return(false); } } else { foreach (var optionPattern in pattern.OptionPatternNameList) { if (category.Sprites.Exists(x => AvatarData.ToPatternName(x) == optionPattern)) { return(false); } } } } return(true); }
protected override void OnStopLipSync() { base.OnStopLipSync(); string pattern = AvatarData.ToPatternName(Avator.AvatarPattern.GetPatternName(LipTag)); if (string.IsNullOrEmpty(pattern)) { return; } Avator.ChangePattern(LipTag, pattern); }
//パターン名からスプライトを取得 public Sprite GetSprite(string pattern) { //パタ―ン名が一致する一つだけを取得 Sprite sprite = Sprites.Find(x => AvatarData.ToPatternName(x) == pattern); if (sprite == null) { //パターン名で一致しない場合は、直接スプライト名を検索 sprite = Sprites.Find(x => x != null && x.name == pattern); } if (sprite == null) { //それでも一致しない場合は、パターン名のほうが正規化されてない可能性があるので sprite = Sprites.Find(x => x != null && x.name == AvatarData.ToPatternName(pattern)); } return(sprite); }
protected override IEnumerator CoEyeBlink(Action onComplete) { string pattern = AvatarData.ToPatternName(Avator.AvatarPattern.GetPatternName(EyeTag)); if (string.IsNullOrEmpty(pattern)) { if (onComplete != null) { onComplete(); } yield break; } foreach (var data in AnimationData.DataList) { Avator.ChangePattern(EyeTag, data.ComvertName(pattern)); yield return(new WaitForSeconds(data.Duration)); } Avator.ChangePattern(EyeTag, pattern); if (onComplete != null) { onComplete(); } yield break; }