在PropertyDrawer里面获取数值变化并响应
2014-03-06 16:09
148 查看
前面那个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();
}
开始我有个土方法,就是在自己的这个类里面加一个[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();
}
相关文章推荐
- 12.30 asp.net验证码及怎么获取里面的数值(整合)
- extjs3里面的获取不到store内数值,采用store.on('load', function() {});不执行
- asp.net验证码及怎么获取里面的数值(整合)
- title:EL表达式获取Map里面的数值失败的问题
- iOS8中定位服务的变化(CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示)
- 【iOS】Swift3 Swift2 String转int,从TextField里面获取Int类型的数值
- asp.net验证码及怎么获取里面的数值(整合)
- 技术群里面获取的小知识(一)
- iOS获取基于ASIHTTP的上传数据的变化方法
- 通过文件名来获取R文件里面的对象(在EditText控件中输入文字和图像)
- 获取gridview模板列里面的控件的ID
- PHP获取短链接跳转后的真实地址和响应头信息的方法
- jquery select变化事件获取选择的值
- 动态获取Resources里面的图片列表
- Vue 动态响应数据变化
- vlc-android 获取MediaPlayerEncounteredError,MediaPlayerBuffering等各种事件的响应
- 获取EXCEL里面的数据
- iPhone获取手机里面所有的APP(私有库)+ 通过包名打开应用
- WinAPI: GetSystemMetrics - 获取系统度量等数值信息
- MFC里面的响应对话框里的Edit控件的几种方法