在PropertyDrawer里面获取数值变化并响应

前面那个Adaptor做好之后,为了练手,又给自己找了个新的需求。我们游戏很多地方都有用到相册一样的四角框,四个相同的sprite,通过scale翻转,然后嵌在大图片的四个角上。因为用到的场合大小不一样,所以每次四个角要调四次位置。于是我决定做成一个通用的prefab,提供一个vector2记录离中心点的偏移值,然后可以像在Unity其他地方一样,拖拽改变偏移值的大小,与此同时,屏幕上的四个角也会跟着移动。

开始我有个土方法,就是在自己的这个类里面加一个[ExecuteInEditMode],然后在update里面更新,结果同事说,没事要少用这个东西,另外发现用了这个之后,就算场景里什么都不动,scene也会一直被改变,刚存了盘马上就又有*了,强迫症伤不起!之前还有个诡异的问题是我自己写的脚本前面那个可以勾掉的小勾不见了,研究了半天,后来才发现是因为没有Start。

于是又回到PropertyDrawer,其实要解决的问题就是当数值改变的时候,如何感应到变化产生了,并根据变化发生逻辑的改变,其实很简单,套路如下:

                                var g = prop.serializedObject.targetObject as XXXX;                       

                               

                                EditorGUI.BeginChangeCheck();

                                var newValue = EditorGUI.Vector2Field( rc, prop.name, prop.vector2Value );

                                if( EditorGUI.EndChangeCheck() )

                                {

                                                prop.vector2Value = newValue;

                                                EditorUtility.SetDirty( g );

                                                g.YYYY();

                                }

原文地址:https://www.cnblogs.com/unionfind/p/3584737.html