Unity 框架(一)

当项目需求中,后期可能接入多种输入设备的时候,可以借鉴一下以下代码

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using System;
 5
 6 public abstract class TInputBase : MonoBehaviour{
 7
 8     public event InputSchemeEventHandler InputSchemeEvent;
 9
10     public abstract InputSchemeEventArgs HandleInput();
11
12     public delegate void InputSchemeEventHandler(TInputBase sender, TInputBase.InputSchemeEventArgs inputArgs);
13
14     //Packaging Input data
15     protected InputSchemeEventArgs GetInputData(GameObject currentObject,EnumList.InputResultTypes inputStyle)
16     {
17         return new InputSchemeEventArgs
18         {
19             CurrentGazeObject = currentObject,
20
21             Style = inputStyle,
22         };
23     }
24
25
26     //Notify delegates during the update method
27     protected void NotifyDelegates(InputSchemeEventArgs data)
28     {
29         if (InputSchemeEvent != null)
30         {
31             this.InputSchemeEvent(this, data);
32         }
33     }
34
35
36     void Update()
37     {
38         if (this.HandleInput() != null)
39         {
40             this.NotifyDelegates(this.HandleInput());
41         }
42     }
43
44     //Args (input args)
45     public class InputSchemeEventArgs : EventArgs
46     {
47         public GameObject CurrentGazeObject;
48
49         public EnumList.InputResultTypes Style;
50     }
51 }
 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using System;
 5
 6 public abstract class TInputBase : MonoBehaviour{
 7
 8     public event InputSchemeEventHandler InputSchemeEvent;
 9
10     public abstract InputSchemeEventArgs HandleInput();
11
12     public delegate void InputSchemeEventHandler(TInputBase sender, TInputBase.InputSchemeEventArgs inputArgs);
13
14     //Packaging Input data
15     protected InputSchemeEventArgs GetInputData(GameObject currentObject,EnumList.InputResultTypes inputStyle)
16     {
17         return new InputSchemeEventArgs
18         {
19             CurrentGazeObject = currentObject,
20
21             Style = inputStyle,
22         };
23     }
24
25
26     //Notify delegates during the update method
27     protected void NotifyDelegates(InputSchemeEventArgs data)
28     {
29         if (InputSchemeEvent != null)
30         {
31             this.InputSchemeEvent(this, data);
32         }
33     }
34
35
36     void Update()
37     {
38         if (this.HandleInput() != null)
39         {
40             this.NotifyDelegates(this.HandleInput());
41         }
42     }
43
44     //Args (input args)
45     public class InputSchemeEventArgs : EventArgs
46     {
47         public GameObject CurrentGazeObject;
48
49         public EnumList.InputResultTypes Style;
50     }
51 }
 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4
 5 public class TKeyboardInput : TInputBase {
 6
 7     InputSchemeEventArgs inputNoop;
 8     public GameObject rayLaunchPoint;
 9
10     public override InputSchemeEventArgs HandleInput ()
11     {
12         inputNoop = null;
13         Ray ray = new Ray(rayLaunchPoint.transform.position, rayLaunchPoint.transform.forward);
14         Debug.DrawLine(ray.origin, ray.origin + (ray.direction * 800f), Color.yellow);
15         RaycastHit hit;
16         if (Physics.Raycast(ray,out hit,800f)) {
17
18             if (Input.GetKeyDown(KeyCode.Space)){
19                 inputNoop = base.GetInputData(hit.collider.gameObject,EnumList.InputResultTypes.ClickDown);
20             }
21             if (Input.GetKey(KeyCode.Space)){
22                 inputNoop = base.GetInputData(hit.collider.gameObject,EnumList.InputResultTypes.Clicking);
23             }
24             if (Input.GetKeyUp(KeyCode.Space)){
25                 inputNoop = base.GetInputData(hit.collider.gameObject,EnumList.InputResultTypes.ClickUp);
26             }
27         }
28         return inputNoop;
29     }
30 }
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public abstract class TClickBase : MonoBehaviour {
6
7     public abstract void HandleClick (TInputBase.InputSchemeEventArgs inputArgs);
8 }
 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4
 5 public class TDaydreamInput : TInputBase {
 6
 7     public override InputSchemeEventArgs HandleInput ()
 8     {
 9         //Debug.Log ("Daydream 手柄输入");
10         return null;
11     }
12 }
 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4
 5 public class TestFocusEvents : TClickBase {
 6
 7     public override void HandleClick (TInputBase.InputSchemeEventArgs inputArgs)
 8     {
 9         if (inputArgs.Style.Equals(EnumList.InputResultTypes.ClickDown)) {
10             if (inputArgs.CurrentGazeObject.name=="Cube") {
11                 Debug.Log ("click down cube");
12             }
13         }
14         if (inputArgs.Style.Equals(EnumList.InputResultTypes.Clicking)) {
15             if (inputArgs.CurrentGazeObject.name=="Cube") {
16                 Debug.Log ("clicking cube");
17             }
18         }
19         if (inputArgs.Style.Equals(EnumList.InputResultTypes.ClickUp)) {
20             if (inputArgs.CurrentGazeObject.name=="Cube") {
21                 Debug.Log ("click up cube");
22             }
23         }
24     }
25     void Start()
26     {
27         TController.register = this;
28     }
29 }
时间: 2024-10-06 07:49:27

Unity 框架(一)的相关文章

深入理解IOC模式及Unity框架

学习IOC发现如下博客写的很清楚了,故Mark下来以便以后查阅和温习! 1.IoC模式:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html  这篇博客是通过一个播放器的例子来说明什么是依赖,依赖倒置,控制反转(IOC),最后实现依赖注入.通过Unity实现IOC容器.不错的一个例子 2.深入理解DIP.IoC.DI以及IoC容器 这个算是最通俗易懂的,手动实现了IOC容器  由浅入深 3.理解依赖注入(IOC)和学习Unity

[Solution] DI原理解析及Castle、Unity框架使用

DI介绍 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题. 依赖注入(Dependency Injection,英文缩写为DI)是一种设计模式. 其实本质都是指同一件事,强调的内容不一样.IoC强调容器的作用,DI强调注入的作用. 通常IoC和DI可以理解为一个意思,只是指的对象不同. DI基本原理 DI本质上是通过容器来反射创建实例. 1个简单的类 1 2 3 4 5 6 7 class Person {     

Unity框架(代码结构)总结

作为一名开发人员,跟框架打交道是不可避免,比如C#有Ioc,Java有Spring,Hibernate,mybatis,structs2等等,但是Unity到现在却没有一个成熟的框架来供我们使用,所以我们只能最大限度地组织好我们的代码,以便于后期维护 1. 注释,SVN或者Git的log 2. 根据脚本功能写决定脚本模式,脚本的命名一定要通俗易懂 例如独立性功能的脚本(公用),写一个单独的脚本然后挂在对象上 还有一种是全局控制器,用单例模式,例如GameController和InputContr

IOC模式及Unity框架文章收藏

1.IoC模式:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html 通过Unity实现IOC容器. 2.深入理解DIP.IoC.DI以及IoC容器 3.理解依赖注入(IOC)和学习Unity 4.你真的了解Ioc与AOP吗? 5.[调侃]IOC前世今生 6.Unity系列 Unity(一):从ObjectBuilder说起 Unity(二):Unity是什么? Unity(三):快速入门 Unity(四):使用场景Ⅰ:建立类型

[Solution] AOP原理解析及Castle、Autofac、Unity框架使用

AOP介绍 面向切面编程(Aspect Oriented Programming,英文缩写为AOP),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP是OOP的延续,是软件开发中的一个热点. 常用于: Authentication Caching Lazy loading Transactions AOP基本原理 普通类 1 2 3 4 5 6 7 8 9 class Person : MarshalByRefObject {     public string Say(

基于xlua和mvvm的unity框架

1.框架简介 这两天在Github上发现了xlua的作者车雄生前辈开源的一个框架—XUUI,于是下载下来学习了一下.XUUI基于xlua,又借鉴了mvvm的设计概念.xlua是目前很火的unity热更方案,不仅支持纯lua脚本热更,也可以做 C# 代码的bug hotfix,而mvvm框架呢,在前端开发中应用很广,我周围同事在做wpf开发时也用到了mvvm框架,mvvm模式在unity开发中也同样适用,github上可以找到不少开源案例.XUUI主要有两大核心能力:一是支持MVVM的单向.双向绑

Unity框架之状态机

1.vs 注解快捷键? 2.接口 方法.属性.字段? 3.生命周期(awake .enable.start.update.fixedupdate.lateupdate.ongui)? 4.[HideInInspector] 第一步:IState 初步定义 1 using UnityEngine; 2 using System.Collections; 3 4 public interface IState{ 5 //获取状态机状态 6 uint GetStateID(); 7 8 //void

Unity框架:StrangeIOC+ToLua整合笔记(一)

1.整合的缘由?之前用的框架?缺点? 2.StrangeIOC是什么? https://github.com/strangeioc/strangeioc 3.ToLua是什么? https://github.com/topameng/tolua 4.开始整合 https://github.com/jarjin/LuaFramework_UGUI 参考了上面这个框架,我是取其精华,去其糟粕(个人认为). 4.1游戏自然有很多Manager,StrangeIOC中是如何使用的? 继承Monobeha

依赖反转Ioc和unity,autofac,castle框架教程及比较

1.依赖倒置的相关概念 http://www.cnblogs.com/fuchongjundream/p/3873073.html IoC模式(依赖.依赖倒置.依赖注入.控制反转) 2.依赖倒置的方式 http://www.cnblogs.com/muzinian/p/3357741.html 于依赖反转原则.控制反转和依赖注入的抽象的初学者指南 3.主流ioc框架 http://www.cnblogs.com/bchp/articles/1527693.html http://www.cnbl