/// <summary> /// 通过图片设置数据 /// </summary> /// <param name="texture">Texture.</param> /// <param name="penTexture">Pen texture.</param> /// <param name="brushScale">Brush scale.</param> /// <param name="minAlpha">0-255.</param> public void SetDataByTexture(Texture2D texture, Texture penTexture, float brushScale, byte minAlpha = 10) { int gx = (int)(penTexture.width * brushScale / 4); int gy = (int)(penTexture.height * brushScale / 4); checkData = ScriptableObject.CreateInstance <ScribbleCheckData>(); checkData.checkPoints = new List <Vector2>(); checkData.gridSize = new Vector2(gx, gy); byte[] bytes = texture.GetRawTextureData(); int len = bytes.Length; int row = 0, col = 0; int pixelCount = 0; for (int i = 0; i < len; i += 4) { byte a = bytes[i + 3]; if (a > minAlpha && col % gx == 0 && row % gy == 0) { checkData.checkPoints.Add(new Vector2(col - texture.width / 2, row - texture.height / 2) * 0.01f); } ++col; ++pixelCount; if (pixelCount >= texture.width) { pixelCount = 0; ++row; col = 0; } } Reset(); }
void SaveDataToFile() { //序列化存储 PaintCompleteChecker checker = target as PaintCompleteChecker; if (checker.gridsDic != null) { if (checker.checkData == null) { AssetDatabase.CreateAsset(GetGridData(), "Assets/" + checker.name + "_ScribbleCheckData.asset"); } else { AssetDatabase.Refresh(); ScribbleCheckData checkData = checker.checkData; checkData.checkPoints = new List <Vector2>(); checkData.gridSize = GetGridSize(); foreach (string key in checker.gridsDic.Keys) { if (checker.enablesDic[key]) { Rect r = checker.gridsDic[key]; checkData.checkPoints.Add(r.center); } } EditorUtility.SetDirty(checker.checkData); AssetDatabase.SaveAssets(); } } }
ScribbleCheckData GetGridData() { PaintCompleteChecker checker = target as PaintCompleteChecker; ScribbleCheckData checkData = ScriptableObject.CreateInstance <ScribbleCheckData>(); checkData.checkPoints = new List <Vector2>(); checkData.gridSize = GetGridSize(); foreach (string key in checker.gridsDic.Keys) { if (checker.enablesDic[key]) { Rect r = checker.gridsDic[key]; checkData.checkPoints.Add(r.center); } } return(checkData); }