Пример #1
0
        private void Awake()
        {
            TriggerReceptObject = GameObject.Find("TriggerReceptObject");

            // 1、测试触发器事件,首先要是物体可以移动,这里,给物体添加了一个鼠标拖拽事件,让该物体可以移动;

            gameObject.OnMouseDrag(EventParames.DontDestory | EventParames.DontSetTrue);

            // 2、为该物体添加触发事件,当两物体接触时,将触发事件,并执行客户端定义的函数,下例中将执行客户端自定义的 MyTriggerFunction;

            // 注意该函数的参数表示: 碰撞物体.OnTrigger(被碰撞物体,触发函数,[控制参数设置]); 一般事件中后两个参数都是一样的;

            //gameObject.OnTrigger(TriggerReceptObject,MyTriggerFunction,EventParames.DontDestory);

            // 3、关闭该事件;

            //gameObject.OffTrigger();

            // 4、OnIntersect 判断两物体是否交叉;

            // 将它放在 Update 事件中,可以监听两物体是否交叉,用以模拟触发器效果;

            gameObject.OnUpdate(() =>
            {
                bool is_Trigger = gameObject.OnIntersect(TriggerReceptObject);

                if (is_Trigger)
                {
                    UnityTool.Log(string.Format("{0}物体和{1}物体接触了!", gameObject.name, TriggerReceptObject.name));
                }
            }, EventParames.DontDestory | EventParames.NoOrder);
        }
Пример #2
0
        private void FunctionTest()
        {
            UnityTool.Log("FunctionTest Execute ......");


            RequestExecuteService.ExecuteNextStep();
        }
Пример #3
0
        private void Update()
        {
            // 按键 S 表示 Record (记录) 步骤操作;

            if (Input.GetKeyDown(KeyCode.S))
            {
                UndoRedoService.Record();


                UnityTool.Log("Record");
            }

            // 按键 U 表示 Undo (撤销) 操作;

            if (Input.GetKeyDown(KeyCode.U))
            {
                UndoRedoService.Undo();

                UnityTool.Log("Undo");
            }

            // 按键 R 表示 Redo (重做) 操作;

            if (Input.GetKeyDown(KeyCode.R))
            {
                UndoRedoService.Redo();

                UnityTool.Log("Redo");
            }
        }
Пример #4
0
        // 该函数将被自动调用;
        public override void SceneAwake()
        {
            UnityTool.Log("Scene1 Awake.......");

            // 执行下一步操作;注意: 该操作从当前位置开始,一直执行到 ## 分隔符才结束;

            //RequestExecuteService.ExecuteNextStep();

            // 若要精确按步骤来执行,可以这样:

            // 注意: 在执行的过程中若遇到分隔符 ## ,则自动跳过该分隔符,分隔符 ## 不算做步骤;

            //RequestExecuteService.ExecuteNextStep(10); // 向后执行 10 步;

            // 若要执行指定的步骤,可以这样:

            // 注意: 该步骤的位置是从当前位置开始的,该步骤的位置 等于 要执行步骤的 前一个;

            //RequestExecuteService.ExecuteNextPosition(3); // 通知组件执行从当前步骤开始的第 3 个步骤;

            // 你可以定位到任意操作步骤,如:

            // 下面两句话,现将指针向后移动 5 个步骤,再执行移动步骤后的 前面第 2 个 步骤;

            //RequestExecuteService.MoveToStepPosition(5);

            //RequestExecuteService.ExecuteNextPosition(-2);
        }
        /// <summary>
        ///  重定位指针,该函数将根据当前指针位置按 Step 或 Position 重定位指针;
        ///
        ///  格式为 goto:[step|position],count=(int)数值;
        ///
        ///  注意: 正直是向前定位,负值是向后定位;
        /// </summary>
        /// <param name="count"></param>
        /// <param name="number"></param>
        public void GotoStep(int count, int number)
        {
            UnityTool.Log("...............");

            if (count == 0)
            {
                return;
            }

            if (!RefDict.ContainsKey(index))
            {
                RefDict.Add(index, number);
            }

            if (RefDict[index] >= number)
            {
                MoveIndexToPosition(1); // 移向下一步并返回;
            }
            else
            {
                RefDict[index]++; // 引用计数加一;

                MoveIndexToStep(count);
            }
        }
Пример #6
0
            private void Update()
            {
                // 1、 RayHit 方法将返回指定方向上打到的物体;

                GameObject hit_Object = gameObject.RayHit(Vector3.down);

                if (hit_Object)
                {
                    UnityTool.Log(hit_Object.name);
                }

                // 2、 RayHit 的一个重载方法,判断物体是否击中了一个物体,返回 bool值;

                /*bool is_Hit = gameObject.RayHit(RayCastedObject,Vector3.down);
                 *
                 * if(is_Hit) UnityTool.Log(string.Format("{0}物体发出的射线击中了{1}",gameObject.name,RayCastedObject.name));*/

                // 3、返回从一个物体发出的射线所击中的点;注意:若没有击中任何物体,返回(0,0,0);

                /*Vector3 hit_Point = gameObject.RayHitPoint(Vector3.down);
                 *
                 * UnityTool.Log(hit_Point);*/

                // 4、 判断该物体是否被射线击中;

                /* bool is_Hited = gameObject.RayHit(RayCastedObject, Vector3.down);
                 *
                 * if (is_Hited) UnityTool.Log(RayCastedObject.name + "被击中了。");*/
            }
Пример #7
0
        /// <summary>
        ///  配置文件根据界定符,目前是 ## ; 来将步骤分为粗细两种粒度; Step 是粗粒度的步骤,即以 ## 分割的步骤;
        ///
        ///  Position 是细粒度的步骤,即安配置文件中的头描述定义分割的; 一般情况下是一行;
        /// </summary>
        public override void SceneAwake()
        {
            UnityTool.Log("Scene1 Awake.......");

            // 执行下一步操作;注意: 该操作从当前位置开始,一直执行到 ## 分隔符才结束;

            //RequestExecuteService.ExecuteNextStep();

            // 下面两句话先执行 第 3 个步骤,再执行 第 -2 个(相对位置)步骤;

            // 配置文件中的步骤将先向后执行,在以执行到的位置为起点,向前执行;

            RequestExecuteService.ExecuteNextStep(3);


            RequestExecuteService.ExecuteNextStep(-2);


            // 跳转场景;默认跳到下一个场景;

            // 注意: 当前场景值为0,正值往后跳,负值往前跳;

            // 当前场景不能跳转当前场景,避免发生循环调用;

            RequestExecuteService.GotoScene(4);
        }
Пример #8
0
        /// <summary>
        /// 在这里向组件注册一些通用资源;

        /// 向 DataDriveComService 组件注册类 FunctionLibrary 里的函数;

        /// 可选参数为 true 时,表示不销毁,客户端可以决定次函数的销毁时机(此时,一般不用销毁);

        /// 可选参数为 false 时,组件在先一次收集函数时会销毁所有标记有销毁的函数;

        /// CustomFunctionService.AddScriptDisposeFunc<// Your ClassName , JsonData>(true);

        /// 如果通用的处理函数比较少,不足以写成一个类,可以使用下面这句来替换上面这句,以便提高效率;

        /// 要添加的方法最好是 private 修饰的,以便更好的封装性;
        /// </summary>
        protected override void ComAwake()
        {
            // Todo Your Code ,not necessary!


            UnityTool.Log("Controller Awake......");


            //CustomFunctionService.AddDisposeFunc<JsonData>(Desc);
        }
        private bool MyLoopFunction()
        {
            if (Input.GetMouseButtonDown(0))
            {
                UnityTool.Log("帧监听事件测试");

                return(true);
            }

            return(false);
        }
Пример #10
0
        //  例子: 这里向组件注册一个客户端函数,该函数处理用户的数据;

        //  注意: 如果客户端没有调用该函数,最好将该函数声明成 private 类型;

        // 返回类型是 bool 类型,组件将根据这一返回类型,决定是否将指针指向下一步操作数据;

        // 函数名和配置文件保持一致,名字不区分大小写; 参数类型可以自定义,目前为 Json 数据;

        private bool Desc(JsonData jsonData)
        {
            // Todo Your Code

            // 作为测试, 将获取的数据以绿色字体打印;

            UnityTool.Log(jsonData.ToJson(), Color.green);


            // 若执行成功,则返回 true;

            return(true);
        }
Пример #11
0
        /// <summary>
        ///  记录 JsonData 数据;
        /// </summary>
        /// <param name="strBuilder"></param>
        private void RecordJsonData(StringBuilder strBuilder)
        {
            // 将此次 json 数据写入文件;这里保存在内存里,以便快速操作;

            // WriteGameObjectInfo( strBuilder );

            // 将此次操作加入 List_Indeex 的后面;

            UndoStack.Push(JsonMapper.ToObject(strBuilder.ToString()));

            RedoStack.Clear();
#if UNITY_EDITOR
            if (ConfigurationInfo.ShowStateInfo)
            {
                UnityTool.Log("Record");
            }
#endif
        }
Пример #12
0
        /// <summary>
        ///  重置所有物体; 这里只还原物体的 Transform信息;
        /// </summary>
        public void UndoAllGameObjectsInfo()
        {
            JsonData jsonData = UndoJsonData();

            if (jsonData == null)
            {
                return;
            }

            for (int i = 0; i < jsonData.Count; i++)
            {
                ResetGameObjectInfo(jsonData[i]);
            }
#if UNITY_EDITOR
            if (ConfigurationInfo.ShowStateInfo)
            {
                UnityTool.Log("Undo");
            }
#endif
        }
        private void Awake()
        {
            GameObject = GameObject.Find("Root");

            // UnityTool.Log() 函数可以在控制台打印自定义颜色的字体;

            UnityTool.Log("测试高光效果", Color.green);

            // 给物体添加高光效果, 只需要下面一句话,无需做任何工作,就可以实现高光效果了;

            gameObject.OnFlashing();

            // 设置物体的边缘发光; 这将和上面设置的效果叠加;

            gameObject.OnFlashingConstant(Color.cyan);

            // OnFlashing 的两个重载方法,对应于 HighLigter 里的几个重载方法,可以控制颜色和频率;如下:

            GameObject.OnFlashing(Color.green, Color.yellow, 1);
        }
Пример #14
0
        /// <summary>
        ///  对事件的类型进行设置; T 为无参数的委托;
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="eventType"></param>
        /// <param name="gos"></param>
        /// <param name="function"></param>
        /// <param name="eventsManager"></param>
        public static void SetFunc <T>(EventsType eventType, GameObject[] gos, T function, EventParames eventsManager)
            where T : class
        {
            UnityEvent unityEvent = new UnityEvent();

            if (typeof(T) == typeof(Action))
            {
                unityEvent.action = (Action)(object)function;
            }
            else if (typeof(T) == typeof(Func <bool>))
            {
                unityEvent.func = (Func <bool>)(object) function;
            }
            else if (typeof(T) == typeof(Nullable))
            {
                UnityTool.Log("OK……");
            }
            else
            {
                throw new Exception("事件委托机制不支持该函数类型!");
            }

            SetFunc(unityEvent, eventType, gos, eventsManager);
        }
Пример #15
0
 private void MyFunction()
 {
     UnityTool.Log("UnityEvent 事件发生了!");
 }
Пример #16
0
 private void FunctionTest22()
 {
     UnityTool.Log("FunctionTest Execute ......");
 }
 private void MyUpdateFunction()
 {
     UnityTool.Log("Update 事件测试");
 }
Пример #18
0
 private void MyTriggerFunction()
 {
     UnityTool.Log("触发器事件测试");
 }
Пример #19
0
 private void MyFunction(string str)
 {
     UnityTool.Log(str);
 }