From 3dd89f9417bd589f5fe02f596766ab819a98922b Mon Sep 17 00:00:00 2001 From: Kohei-Yanagida Date: Mon, 25 Nov 2019 17:56:04 +0900 Subject: [PATCH 1/4] suppress to call string.ToUpper() --- .../Scripts/BlendShape/BlendShapeKey.cs | 51 +++++++++++++++---- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs b/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs index 7ef55541e..4e7f43d27 100644 --- a/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs +++ b/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace VRM @@ -6,11 +7,20 @@ namespace VRM [Serializable] public struct BlendShapeKey : IEquatable, IComparable { - public string Name; + // Enum.ToString() のGC回避用キャッシュ + private static readonly Dictionary m_presetNameDictionary = + new Dictionary(); + + private string m_name; + public string Name + { + get { return m_name.ToUpper(); } + } + public BlendShapePreset Preset; string m_id; - string ID + private string ID { get { @@ -18,13 +28,22 @@ namespace VRM { if (Preset != BlendShapePreset.Unknown) { - m_id = Preset.ToString().ToUpper(); + if (m_presetNameDictionary.ContainsKey(Preset)) + { + m_id = m_presetNameDictionary[Preset]; + } + else + { + m_presetNameDictionary.Add(Preset, Preset.ToString()); + m_id = m_presetNameDictionary[Preset]; + } } else { - m_id = Name; + m_id = m_name; } } + return m_id; } } @@ -39,33 +58,42 @@ namespace VRM public BlendShapeKey(string name, BlendShapePreset preset) { - Name = name.ToUpper(); + m_name = name; Preset = preset; + if (Preset != BlendShapePreset.Unknown) { - m_id = Preset.ToString().ToUpper(); + if (m_presetNameDictionary.ContainsKey((Preset))) + { + m_id = m_presetNameDictionary[Preset]; + } + else + { + m_presetNameDictionary.Add(Preset, Preset.ToString()); + m_id = m_presetNameDictionary[Preset]; + } } else { - m_id = Name; + m_id = m_name; } } public override string ToString() { - return ID; + return ID.ToUpper(); } public bool Equals(BlendShapeKey other) { - return ID == other.ID; + return String.Compare(ID, other.ID, StringComparison.OrdinalIgnoreCase) == 0; } public override bool Equals(object obj) { if (obj is BlendShapeKey) { - return Equals((BlendShapeKey)obj); + return Equals((BlendShapeKey) obj); } else { @@ -84,6 +112,7 @@ namespace VRM { return default(BlendShapeKey); } + return new BlendShapeKey(clip.BlendShapeName, clip.Preset); } @@ -102,4 +131,4 @@ namespace VRM return 0; } } -} +} \ No newline at end of file From 3828091869a88823bcbf5157efec979a0d5b14e4 Mon Sep 17 00:00:00 2001 From: Kohei-Yanagida Date: Tue, 26 Nov 2019 13:16:52 +0900 Subject: [PATCH 2/4] add unknown preset prefix --- .../VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs b/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs index 4e7f43d27..704c8cd05 100644 --- a/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs +++ b/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; namespace VRM @@ -12,6 +13,9 @@ namespace VRM new Dictionary(); private string m_name; + + private const string UnknownPresetPrefix = "Unknown_"; + public string Name { get { return m_name.ToUpper(); } @@ -19,8 +23,8 @@ namespace VRM public BlendShapePreset Preset; - string m_id; - private string ID + public string m_id; + public string ID { get { @@ -40,7 +44,7 @@ namespace VRM } else { - m_id = m_name; + m_id = UnknownPresetPrefix + m_name; } } @@ -75,7 +79,7 @@ namespace VRM } else { - m_id = m_name; + m_id = UnknownPresetPrefix + m_name; } } From 928aa4f918694cb848121fc5471b96271018be00 Mon Sep 17 00:00:00 2001 From: Kohei-Yanagida Date: Tue, 26 Nov 2019 19:11:51 +0900 Subject: [PATCH 3/4] fix BlendShapeKeyTest --- .../Editor/Tests/VRMBlendShapeKeyTest.cs | 23 +++++++++++++++---- .../Scripts/BlendShape/BlendShapeKey.cs | 20 +++++++--------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Assets/VRM/UniVRM/Editor/Tests/VRMBlendShapeKeyTest.cs b/Assets/VRM/UniVRM/Editor/Tests/VRMBlendShapeKeyTest.cs index e24e2c215..8262333cc 100644 --- a/Assets/VRM/UniVRM/Editor/Tests/VRMBlendShapeKeyTest.cs +++ b/Assets/VRM/UniVRM/Editor/Tests/VRMBlendShapeKeyTest.cs @@ -12,16 +12,31 @@ namespace VRM { var key = new BlendShapeKey("Blink", BlendShapePreset.Blink); - Assert.AreEqual(key, new BlendShapeKey("blink")); + Assert.AreEqual(key, new BlendShapeKey("Blink", BlendShapePreset.Blink)); Assert.AreEqual(key, new BlendShapeKey(BlendShapePreset.Blink)); Assert.AreEqual(key, new BlendShapeKey("xxx", BlendShapePreset.Blink)); var dict = new Dictionary(); - dict[new BlendShapeKey("xxx", BlendShapePreset.Blink)] = 1.0f; + dict[key] = 1.0f; - Assert.IsTrue(dict.ContainsKey(new BlendShapeKey("blink"))); + Assert.IsTrue(dict.ContainsKey(new BlendShapeKey("Blink",BlendShapePreset.Blink))); Assert.IsTrue(dict.ContainsKey(new BlendShapeKey(BlendShapePreset.Blink))); Assert.IsTrue(dict.ContainsKey(new BlendShapeKey("xxx", BlendShapePreset.Blink))); + + dict.Clear(); + + var key2 = new BlendShapeKey("Blink"); // name: Blink, Preset: Unknown + dict[key2] = 1.0f; + + Assert.AreEqual( key2, new BlendShapeKey("Blink", BlendShapePreset.Unknown)); + Assert.AreNotEqual(key2, new BlendShapeKey("blink")); + Assert.AreNotEqual(key2, new BlendShapeKey("Blink", BlendShapePreset.Blink)); + Assert.AreNotEqual(key2, new BlendShapeKey(BlendShapePreset.Blink)); + + Assert.IsFalse(dict.ContainsKey(new BlendShapeKey("blink"))); + Assert.IsFalse(dict.ContainsKey(new BlendShapeKey("Blink",BlendShapePreset.Blink))); + Assert.IsFalse(dict.ContainsKey(new BlendShapeKey(BlendShapePreset.Blink))); + } } -} +} \ No newline at end of file diff --git a/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs b/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs index 704c8cd05..330734afc 100644 --- a/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs +++ b/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs @@ -12,10 +12,10 @@ namespace VRM private static readonly Dictionary m_presetNameDictionary = new Dictionary(); + private static readonly string UnknownPresetPrefix = "Unknown_"; + private string m_name; - private const string UnknownPresetPrefix = "Unknown_"; - public string Name { get { return m_name.ToUpper(); } @@ -23,8 +23,8 @@ namespace VRM public BlendShapePreset Preset; - public string m_id; - public string ID + string m_id; + string ID { get { @@ -52,15 +52,11 @@ namespace VRM } } - public BlendShapeKey(string name) : this(name, BlendShapePreset.Unknown) + public BlendShapeKey(BlendShapePreset preset) : this(preset.ToString(), preset) { } - public BlendShapeKey(BlendShapePreset preset) : this(preset.ToString(), BlendShapePreset.Unknown) - { - } - - public BlendShapeKey(string name, BlendShapePreset preset) + public BlendShapeKey(string name, BlendShapePreset preset = BlendShapePreset.Unknown) { m_name = name; Preset = preset; @@ -85,12 +81,12 @@ namespace VRM public override string ToString() { - return ID.ToUpper(); + return ID.Replace(UnknownPresetPrefix,"").ToUpper(); } public bool Equals(BlendShapeKey other) { - return String.Compare(ID, other.ID, StringComparison.OrdinalIgnoreCase) == 0; + return this.ID == other.ID; } public override bool Equals(object obj) From 93c688eec31357456856178739ab5c1ea7f866f2 Mon Sep 17 00:00:00 2001 From: Kohei-Yanagida Date: Tue, 26 Nov 2019 21:06:10 +0900 Subject: [PATCH 4/4] add comment --- .../Scripts/BlendShape/BlendShapeKey.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs b/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs index 330734afc..7a2f63a75 100644 --- a/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs +++ b/Assets/VRM/UniVRM/Scripts/BlendShape/BlendShapeKey.cs @@ -1,19 +1,23 @@ using System; using System.Collections.Generic; -using System.Diagnostics; - namespace VRM { [Serializable] public struct BlendShapeKey : IEquatable, IComparable { - // Enum.ToString() のGC回避用キャッシュ + /// + /// Enum.ToString() のGC回避用キャッシュ + /// private static readonly Dictionary m_presetNameDictionary = new Dictionary(); + + /// + /// BlendShapePresetと同名の名前を持つ独自に追加したBlendShapeを区別するためのprefix + /// private static readonly string UnknownPresetPrefix = "Unknown_"; - + private string m_name; public string Name @@ -24,6 +28,7 @@ namespace VRM public BlendShapePreset Preset; string m_id; + string ID { get @@ -81,12 +86,12 @@ namespace VRM public override string ToString() { - return ID.Replace(UnknownPresetPrefix,"").ToUpper(); + return ID.Replace(UnknownPresetPrefix, "").ToUpper(); } public bool Equals(BlendShapeKey other) { - return this.ID == other.ID; + return ID == other.ID; } public override bool Equals(object obj) @@ -131,4 +136,4 @@ namespace VRM return 0; } } -} \ No newline at end of file +}