Notifications
Article
Post Processing Stackが含まれているプロジェクトをUnity 2018.3以降で開くと出てくるエラーの対処方法
Updated 3 months ago
1.6 K
0
Unityの公式アセットなど、Post Processing Stackが含まれているプロジェクトをUnity 2018.3以降で開くと、大概とあるエラーに遭遇するはず。その対処方法を解説します。
たとえば、Unity公式アセットの「Corridor Lighting Example」をUnity 2018.3以降でインポートしたとします。すると、こんな感じのエラーメッセージが表示されると思います。
Assets\PostProcessing\Editor\PropertyDrawers\MinDrawer.cs(6,34): error CS0104: 'MinAttribute' is an ambiguous reference between 'UnityEngine.PostProcessing.MinAttribute' and 'UnityEngine.MinAttribute'
これは「Corridor Lighting Example」に含まれているPost Processing Stackのスクリプト・Mindrawer.csのエラーです。エラーメッセージに書かれている通り、スクリプト内に記述されている'MinAttribute'が 'UnityEngine.PostProcessing.MinAttribute' か 'UnityEngine.MinAttribute' のどちらのAPIを参照しているか曖昧で分からない・・・というものです。これはUnity 2018.3より'UnityEngine.MinAttribute'というAPIが追加されたからです。
解決方法はシンプル。Mindrawer.csの3行目を追記して、 'MinAttribute' が 'UnityEngine.PostProcessing.MinAttribute' のほうを参照していることを指定すればOKです。
【2019年8月31日追記】・・・としていたのですが、Unity 2019.3以降はUnityEngine.PostProcessing;を無効にするのが良いっぽい。
using UnityEngine; // 下の行をコメントアウト // using UnityEngine.PostProcessing; namespace UnityEditor.PostProcessing { [CustomPropertyDrawer(typeof(MinAttri-bute))] sealed class MinDrawer : PropertyDrawer { public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { MinAttribute attribute = (MinAttribute)base.attribute; if (property.propertyType == SerializedPropertyType.Integer) { int v = EditorGUI.IntField(position, label, property.intValue); property.intValue = (int)Mathf.Max(v, attribute.min); } else if (property.propertyType == SerializedPropertyType.Float) { float v = EditorGUI.FloatField(position, label, property.floatValue); property.floatValue = Mathf.Max(v, attribute.min); } else { EditorGUI.LabelField(position, label.text, "Use Min with float or int."); } } } }
Tags:
tamtam
Community Evangelist - Marketer
16
Comments