少年修仙传客户端代码仓库
client_Wu Xijin
2019-06-10 a03ea766a54dcbe57472145d6fc556d6ba5cb4f7
Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts
3个文件已修改
14个文件已添加
808 ■■■■■ 已修改文件
Core/GameEngine/Model/Config/VipPrivilegeInfoConfig.cs 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/VipPrivilegeInfoConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/PartialVipPrivilegeInfoConfig.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/PartialVipPrivilegeInfoConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/tagVipPrivilegeConfig.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipPrivilegeBehaviour.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipPrivilegeBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipPrivilegeInfoWin.cs 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipPrivilegeInfoWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipPrivilegeTitleBehaviour.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipPrivilegeTitleBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipPrivilegeWidget.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipPrivilegeWidget.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipWin.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/ScrollRectGroup.cs 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/ScrollRectGroup.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/ConfigInitiator.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/VipPrivilegeInfoConfig.cs
New file
@@ -0,0 +1,223 @@
//--------------------------------------------------------
//    [Author]:           Fish
//    [  Date ]:           Monday, June 10, 2019
//--------------------------------------------------------
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System;
using UnityEngine;
[XLua.LuaCallCSharp]
public partial class VipPrivilegeInfoConfig
{
    public readonly int id;
    public readonly string name;
    public readonly int displayType;
    public readonly string[] label;
    public readonly int dataType;
    public readonly int privilegeId;
    public readonly int[] datas;
    public VipPrivilegeInfoConfig()
    {
    }
    public VipPrivilegeInfoConfig(string input)
    {
        try
        {
            var tables = input.Split('\t');
            int.TryParse(tables[0],out id);
            name = tables[1];
            int.TryParse(tables[2],out displayType);
            label = tables[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            int.TryParse(tables[4],out dataType);
            int.TryParse(tables[5],out privilegeId);
            string[] datasStringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            datas = new int[datasStringArray.Length];
            for (int i=0;i<datasStringArray.Length;i++)
            {
                 int.TryParse(datasStringArray[i],out datas[i]);
            }
        }
        catch (Exception ex)
        {
            DebugEx.Log(ex);
        }
    }
    static Dictionary<string, VipPrivilegeInfoConfig> configs = new Dictionary<string, VipPrivilegeInfoConfig>();
    public static VipPrivilegeInfoConfig Get(string id)
    {
        if (!inited)
        {
            Debug.Log("VipPrivilegeInfoConfig 还未完成初始化。");
            return null;
        }
        if (configs.ContainsKey(id))
        {
            return configs[id];
        }
        VipPrivilegeInfoConfig config = null;
        if (rawDatas.ContainsKey(id))
        {
            config = configs[id] = new VipPrivilegeInfoConfig(rawDatas[id]);
            rawDatas.Remove(id);
        }
        return config;
    }
    public static VipPrivilegeInfoConfig Get(int id)
    {
        return Get(id.ToString());
    }
    public static List<string> GetKeys()
    {
        var keys = new List<string>();
        keys.AddRange(configs.Keys);
        keys.AddRange(rawDatas.Keys);
        return keys;
    }
    public static List<VipPrivilegeInfoConfig> GetValues()
    {
        var values = new List<VipPrivilegeInfoConfig>();
        values.AddRange(configs.Values);
        var keys = new List<string>(rawDatas.Keys);
        foreach (var key in keys)
        {
            values.Add(Get(key));
        }
        return values;
    }
    public static bool Has(string id)
    {
        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
    }
    public static bool Has(int id)
    {
        return Has(id.ToString());
    }
    public static bool inited { get; private set; }
    protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
    public static void Init(bool sync=false)
    {
        inited = false;
        var path = string.Empty;
        if (AssetSource.refdataFromEditor)
        {
            path = ResourcesPath.CONFIG_FODLER +"/VipPrivilegeInfo.txt";
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath("config/VipPrivilegeInfo.txt");
        }
        configs.Clear();
        var tempConfig = new VipPrivilegeInfoConfig();
        var preParse = tempConfig is IConfigPostProcess;
        if (sync)
        {
            var lines = File.ReadAllLines(path);
            if (!preParse)
            {
                rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
            for (int i = 3; i < lines.Length; i++)
            {
                try
                {
                    var line = lines[i];
                    var index = line.IndexOf("\t");
                    if (index == -1)
                    {
                        continue;
                    }
                    var id = line.Substring(0, index);
                    if (preParse)
                    {
                        var config = new VipPrivilegeInfoConfig(line);
                        configs[id] = config;
                        (config as IConfigPostProcess).OnConfigParseCompleted();
                    }
                    else
                    {
                        rawDatas[id] = line;
                    }
                }
                catch (System.Exception ex)
                {
                    Debug.LogError(ex);
                }
            }
            inited = true;
        }
        else
        {
            ThreadPool.QueueUserWorkItem((object _object) =>
            {
                var lines = File.ReadAllLines(path);
                if (!preParse)
                {
                    rawDatas = new Dictionary<string, string>(lines.Length - 3);
                }
                for (int i = 3; i < lines.Length; i++)
                {
                    try
                    {
                       var line = lines[i];
                        var index = line.IndexOf("\t");
                        if (index == -1)
                        {
                            continue;
                        }
                        var id = line.Substring(0, index);
                        if (preParse)
                        {
                            var config = new VipPrivilegeInfoConfig(line);
                            configs[id] = config;
                            (config as IConfigPostProcess).OnConfigParseCompleted();
                        }
                        else
                        {
                            rawDatas[id] = line;
                        }
                    }
                    catch (System.Exception ex)
                    {
                        Debug.LogError(ex);
                    }
                }
                inited = true;
            });
        }
    }
}
Core/GameEngine/Model/Config/VipPrivilegeInfoConfig.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 53554b87ef95b1240a6528d2b10fba27
timeCreated: 1560132767
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/GameEngine/Model/TelPartialConfig/PartialVipPrivilegeInfoConfig.cs
New file
@@ -0,0 +1,45 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public partial class VipPrivilegeInfoConfig : IConfigPostProcess
{
    public void OnConfigParseCompleted()
    {
    }
    public static int GetPrivilegeData(int id, int level)
    {
        var config = Get(id);
        if (config != null)
        {
            if (config.dataType == 1)
            {
                return VipPrivilegeConfig.GetVipPrivilegeData(id, level);
            }
            if (config.datas != null && config.datas.Length > 0)
            {
                var index = level - 1;
                var min = Mathf.Min(index, config.datas.Length - 1);
                return config.datas[min];
            }
        }
        return 0;
    }
    public static string GetPrivilegeLabel(int id, int level)
    {
        var config = Get(id);
        if (config != null)
        {
            if (config.label != null && config.label.Length > 0)
            {
                var index = level - 1;
                var min = Mathf.Min(index, config.label.Length - 1);
                return config.label[min];
            }
        }
        return string.Empty;
    }
}
Core/GameEngine/Model/TelPartialConfig/PartialVipPrivilegeInfoConfig.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f828955cf37b539439655d82c0d05b48
timeCreated: 1560131589
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/GameEngine/Model/TelPartialConfig/tagVipPrivilegeConfig.cs
@@ -4,11 +4,11 @@
public partial class VipPrivilegeConfig : IConfigPostProcess
{
    private static Dictionary<VipPrivilegeType, Dictionary<int, int>> vipPrivilegeDic = new Dictionary<VipPrivilegeType, Dictionary<int, int>>();
    private static Dictionary<int, Dictionary<int, int>> vipPrivilegeDic = new Dictionary<int, Dictionary<int, int>>();
    public void OnConfigParseCompleted()
    {
        if (!vipPrivilegeDic.ContainsKey((VipPrivilegeType)VIPPrivilege))
        if (!vipPrivilegeDic.ContainsKey(VIPPrivilege))
        {
            Dictionary<int, int> dic = new Dictionary<int, int>();
            dic.Add(0, VIP0);
@@ -27,19 +27,24 @@
            dic.Add(13, VIP13);
            dic.Add(14, VIP14);
            dic.Add(15, VIP15);
            vipPrivilegeDic.Add((VipPrivilegeType)VIPPrivilege, dic);
            vipPrivilegeDic.Add(VIPPrivilege, dic);
        }
    }
    public static int GetVipPrivilegeData(VipPrivilegeType type, int vipLv)
    {
        return vipPrivilegeDic[type][vipLv];
        return vipPrivilegeDic[(int)type][vipLv];
    }
    public static int GetVipPrivilegeData(int id, int vipLv)
    {
        return vipPrivilegeDic[id][vipLv];
    }
    public static Dictionary<int, int> GetVipPrivilegeDic(VipPrivilegeType type)
    {
        Dictionary<int, int> dic = null;
        vipPrivilegeDic.TryGetValue(type, out dic);
        vipPrivilegeDic.TryGetValue((int)type, out dic);
        return dic;
    }
}
System/Vip/VipPrivilegeBehaviour.cs
New file
@@ -0,0 +1,44 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class VipPrivilegeBehaviour : MonoBehaviour
    {
        [SerializeField] Image m_Bottom;
        [SerializeField] List<VipPrivilegeWidget> m_VipPrivileges;
        VipModel model { get { return ModelCenter.Instance.GetModel<VipModel>(); } }
        public void Display(int id,bool bottom)
        {
            m_Bottom.gameObject.SetActive(bottom);
            for (int i = 0; i < m_VipPrivileges.Count; i++)
            {
                m_VipPrivileges[i].gameObject.SetActive(i < model.vipMaxLv);
                if (i < model.vipMaxLv)
                {
                    m_VipPrivileges[i].Display(id, i + 1);
                }
            }
        }
        public void CreateElements(int count)
        {
            if (count > m_VipPrivileges.Count)
            {
                var delta = count - m_VipPrivileges.Count;
                for (int i = 0; i < delta; i++)
                {
                    var go = GameObject.Instantiate(m_VipPrivileges[0].gameObject);
                    go.transform.SetParent(transform);
                    go.transform.localScale = Vector3.one;
                    var instance = go.GetComponent<VipPrivilegeWidget>();
                    m_VipPrivileges.Add(instance);
                }
            }
        }
    }
}
System/Vip/VipPrivilegeBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: adc6b483ed1a3294e8aa90462a7fb450
timeCreated: 1559804518
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Vip/VipPrivilegeInfoWin.cs
New file
@@ -0,0 +1,152 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Thursday, June 06, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class VipPrivilegeInfoWin : Window
    {
        [SerializeField] ScrollRectGroup m_ScrollGroup;
        [SerializeField] RectTransform m_ContainerPrivilegeTitles;
        [SerializeField] RectTransform m_ContainerVip;
        [SerializeField] RectTransform m_ContainerPrivileges;
        [SerializeField] List<Text> m_VipLevels;
        [SerializeField] List<VipPrivilegeTitleBehaviour> m_VipPrivilegeTitles;
        [SerializeField] List<VipPrivilegeBehaviour> m_VipPrivileges;
        [SerializeField] Button m_Close;
        VipModel model { get { return ModelCenter.Instance.GetModel<VipModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Close.AddListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
        }
        protected override void OnActived()
        {
            base.OnActived();
            CreateVipElements((int)model.vipMaxLv);
            var configs = VipPrivilegeConfig.GetValues();
            CreatePrivilegeElements(configs.Count);
            m_ScrollGroup.Initialize();
            Display();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        void Display()
        {
            var configs = VipPrivilegeInfoConfig.GetValues();
            for (int i = 0; i < m_VipPrivilegeTitles.Count; i++)
            {
                m_VipPrivilegeTitles[i].gameObject.SetActive(i < configs.Count);
                if (i < configs.Count)
                {
                    m_VipPrivilegeTitles[i].Display(configs[i].name, i % 2 == 1);
                }
            }
            for (int i = 0; i < m_VipPrivileges.Count; i++)
            {
                m_VipPrivileges[i].gameObject.SetActive(i < configs.Count);
                if (i < configs.Count)
                {
                    m_VipPrivileges[i].Display(configs[i].id, i % 2 == 1);
                }
            }
            for (int i = 0; i < m_VipLevels.Count; i++)
            {
                m_VipLevels[i].gameObject.SetActive(i < model.vipMaxLv);
                if (i < model.vipMaxLv)
                {
                    m_VipLevels[i].text = "VIP" + (i + 1);
                }
            }
        }
        void CreateVipElements(int count)
        {
            for (int i = 0; i < m_VipPrivileges.Count; i++)
            {
                m_VipPrivileges[i].CreateElements(count);
            }
            if (count > m_VipLevels.Count)
            {
                var delta = count - m_VipLevels.Count;
                for (int i = 0; i < delta; i++)
                {
                    var go = GameObject.Instantiate(m_VipLevels[0]);
                    go.transform.SetParent(m_ContainerVip);
                    var instance = go.GetComponent<Text>();
                    m_VipLevels.Add(instance);
                }
            }
        }
        void CreatePrivilegeElements(int count)
        {
            if (count > m_VipPrivilegeTitles.Count)
            {
                var delta = count - m_VipPrivilegeTitles.Count;
                for (int i = 0; i < delta; i++)
                {
                    var go = GameObject.Instantiate(m_VipPrivilegeTitles[0]);
                    go.transform.SetParent(m_ContainerPrivilegeTitles);
                    go.transform.localScale = Vector3.one;
                    var instance = go.GetComponent<VipPrivilegeTitleBehaviour>();
                    m_VipPrivilegeTitles.Add(instance);
                }
            }
            if (count > m_VipPrivileges.Count)
            {
                var delta = count - m_VipPrivileges.Count;
                for (int i = 0; i < delta; i++)
                {
                    var go = GameObject.Instantiate(m_VipPrivileges[0]);
                    go.transform.SetParent(m_ContainerPrivileges);
                    go.transform.localScale = Vector3.one;
                    var instance = go.GetComponent<VipPrivilegeBehaviour>();
                    m_VipPrivileges.Add(instance);
                }
            }
        }
    }
}
System/Vip/VipPrivilegeInfoWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: efc8e4b10cd5b144998862c29ba3e887
timeCreated: 1559802425
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Vip/VipPrivilegeTitleBehaviour.cs
New file
@@ -0,0 +1,20 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class VipPrivilegeTitleBehaviour : MonoBehaviour
    {
        [SerializeField] Text m_Title;
        [SerializeField] Image m_Bottom;
        public void Display(string label,bool bottom)
        {
            m_Title.text = label;
            m_Bottom.gameObject.SetActive(bottom);
        }
    }
}
System/Vip/VipPrivilegeTitleBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 8e82b7bd18dd63c44bc22d2c4a4bebba
timeCreated: 1559812931
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Vip/VipPrivilegeWidget.cs
New file
@@ -0,0 +1,70 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class VipPrivilegeWidget : MonoBehaviour
    {
        [SerializeField] Image m_Symbol;
        [SerializeField] Image m_NullSymbol;
        [SerializeField] Text m_Description;
        public void Display(int id, int level)
        {
            var config = VipPrivilegeInfoConfig.Get(id);
            var value = VipPrivilegeInfoConfig.GetPrivilegeData(id, level);
            var label = VipPrivilegeInfoConfig.GetPrivilegeLabel(id, level);
            m_Symbol.gameObject.SetActive(false);
            m_NullSymbol.gameObject.SetActive(false);
            m_Description.gameObject.SetActive(config.displayType > 1);
            switch (config.displayType)
            {
                case 2:
                    if (!string.IsNullOrEmpty(label))
                    {
                        m_Description.text = string.Format(label, value);
                    }
                    else
                    {
                        m_Description.text = value.ToString();
                    }
                    break;
                case 3:
                    if (!string.IsNullOrEmpty(label))
                    {
                        m_Description.text = string.Format(label, value / 100);
                    }
                    else
                    {
                        m_Description.text = (value / 100).ToString();
                    }
                    break;
                case 4:
                    m_Description.text = label;
                    break;
                case 5:
                    m_NullSymbol.gameObject.SetActive(value == 0);
                    m_Description.gameObject.SetActive(value > 0);
                    if (value > 0)
                    {
                        if (!string.IsNullOrEmpty(label))
                        {
                            m_Description.text = string.Format(label, value);
                        }
                        else
                        {
                            m_Description.text = value.ToString();
                        }
                    }
                    break;
                case 1:
                default:
                    m_Symbol.gameObject.SetActive(value > 0);
                    m_NullSymbol.gameObject.SetActive(value == 0);
                    break;
            }
        }
    }
}
System/Vip/VipPrivilegeWidget.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d1879416c67d6d44e9dc2befeb0ccfd9
timeCreated: 1559804552
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Vip/VipWin.cs
@@ -448,8 +448,7 @@
        private void ViewPrivilege()
        {
            VipPrivilegeWin.selectVipLevel = model.presentSelectVip;
            WindowCenter.Instance.Open<VipPrivilegeWin>();
            WindowCenter.Instance.Open<VipPrivilegeInfoWin>();
        }
    }
}
UI/Common/ScrollRectGroup.cs
New file
@@ -0,0 +1,149 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class ScrollRectGroup : MonoBehaviour, IInitializePotentialDragHandler, IBeginDragHandler, IEndDragHandler, IDragHandler
{
    [SerializeField] ScrollRect[] m_ScrollRects;
    [SerializeField] float m_Offset = 100f;
    Dictionary<Direction, ScrollRect> scrollRects = new Dictionary<Direction, ScrollRect>();
    Direction m_Direction = Direction.None;
    Direction direction
    {
        get { return m_Direction; }
        set
        {
            if (value != m_Direction)
            {
                m_Direction = value;
                scrollRects[Direction.Horizontal].horizontal = direction == Direction.Horizontal
                    || direction == Direction.Both;
                scrollRects[Direction.Vertical].vertical = direction == Direction.Vertical
                    || direction == Direction.Both;
                scrollRects[Direction.Both].horizontal = direction == Direction.Horizontal
                    || direction == Direction.Both;
                scrollRects[Direction.Both].vertical = direction == Direction.Vertical
                    || direction == Direction.Both;
            }
        }
    }
    Vector2 m_StartPosition = Vector2.zero;
    private void Awake()
    {
        for (int i = 0; i < m_ScrollRects.Length; i++)
        {
            var scrollRect = m_ScrollRects[i];
            if (scrollRect.horizontal && scrollRect.vertical)
            {
                scrollRects.Add(Direction.Both, scrollRect);
            }
            else if (scrollRect.horizontal)
            {
                scrollRects.Add(Direction.Horizontal, scrollRect);
            }
            else
            {
                scrollRects.Add(Direction.Vertical, scrollRect);
            }
        }
        Initialize();
    }
    public void Initialize()
    {
        direction = Direction.Both;
        scrollRects[Direction.Both].horizontalNormalizedPosition = 0f;
        scrollRects[Direction.Both].verticalNormalizedPosition = 1f;
        scrollRects[Direction.Horizontal].horizontalNormalizedPosition = 0f;
        scrollRects[Direction.Vertical].verticalNormalizedPosition = 1f;
    }
    public void OnBeginDrag(PointerEventData eventData)
    {
        direction = Direction.Both;
        foreach (var scrollRect in m_ScrollRects)
        {
            scrollRect.OnBeginDrag(eventData);
        }
        m_StartPosition = eventData.position;
    }
    public void OnDrag(PointerEventData eventData)
    {
        var position = eventData.position;
        if (direction == Direction.Both)
        {
            var horizontal = Mathf.Abs(position.x - m_StartPosition.x) > m_Offset;
            var vertical = !horizontal && Mathf.Abs(position.y - m_StartPosition.y) > m_Offset;
            if (horizontal || vertical)
            {
                var _direction = horizontal ? Direction.Horizontal : Direction.Vertical;
                if (_direction != direction)
                {
                    direction = _direction;
                    foreach (var scrollRect in m_ScrollRects)
                    {
                        scrollRect.OnBeginDrag(eventData);
                    }
                }
            }
        }
        if (direction != Direction.Both)
        {
            foreach (var scrollRect in m_ScrollRects)
            {
                scrollRect.OnDrag(eventData);
            }
        }
    }
    public void OnEndDrag(PointerEventData eventData)
    {
        foreach (var scrollRect in m_ScrollRects)
        {
            scrollRect.OnEndDrag(eventData);
        }
    }
    public void OnInitializePotentialDrag(PointerEventData eventData)
    {
        foreach (var scrollRect in m_ScrollRects)
        {
            scrollRect.OnInitializePotentialDrag(eventData);
        }
    }
#if UNITY_EDITOR
    [ContextMenu("CloseRayAccepter")]
    void BatchCloseRayAccepter()
    {
        var componenst = transform.GetComponentsInChildren<Graphic>(true);
        for (int i = 0; i < componenst.Length; i++)
        {
            componenst[i].raycastTarget = false;
        }
    }
#endif
    enum Direction
    {
        None,
        Horizontal,
        Vertical,
        Both,
    }
}
UI/Common/ScrollRectGroup.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: a6e59bf3eba4a5b469f728041f8f421e
timeCreated: 1559791936
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Utility/ConfigInitiator.cs
@@ -293,7 +293,8 @@
        normalTasks.Add(new ConfigInitTask("CollectNpcConfig", () => { CollectNpcConfig.Init(); }, () => { return CollectNpcConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("TreasureChapterConfig", () => { TreasureChapterConfig.Init(); }, () => { return TreasureChapterConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("TaskFeedbackConfig", () => { TaskFeedbackConfig.Init(); }, () => { return TaskFeedbackConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("TaskFeedbackFuncConfig", () => { TaskFeedbackFuncConfig.Init(); }, () => { return TaskFeedbackFuncConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("TaskFeedbackFuncConfig", () => { TaskFeedbackFuncConfig.Init(); }, () => { return TaskFeedbackFuncConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("VipPrivilegeInfoConfig", () => { VipPrivilegeInfoConfig.Init(); }, () => { return VipPrivilegeInfoConfig.inited; }));
    }
    static List<ConfigInitTask> doingTasks = new List<ConfigInitTask>();