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); }
private void FunctionTest() { UnityTool.Log("FunctionTest Execute ......"); RequestExecuteService.ExecuteNextStep(); }
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"); } }
// 该函数将被自动调用; 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); } }
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 + "被击中了。");*/ }
/// <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); }
/// <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); }
// 例子: 这里向组件注册一个客户端函数,该函数处理用户的数据; // 注意: 如果客户端没有调用该函数,最好将该函数声明成 private 类型; // 返回类型是 bool 类型,组件将根据这一返回类型,决定是否将指针指向下一步操作数据; // 函数名和配置文件保持一致,名字不区分大小写; 参数类型可以自定义,目前为 Json 数据; private bool Desc(JsonData jsonData) { // Todo Your Code // 作为测试, 将获取的数据以绿色字体打印; UnityTool.Log(jsonData.ToJson(), Color.green); // 若执行成功,则返回 true; return(true); }
/// <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 }
/// <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); }
/// <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); }
private void MyFunction() { UnityTool.Log("UnityEvent 事件发生了!"); }
private void FunctionTest22() { UnityTool.Log("FunctionTest Execute ......"); }
private void MyUpdateFunction() { UnityTool.Log("Update 事件测试"); }
private void MyTriggerFunction() { UnityTool.Log("触发器事件测试"); }
private void MyFunction(string str) { UnityTool.Log(str); }