GithubHelp home page GithubHelp logo

iothua / magicloudsdk Goto Github PK

View Code? Open in Web Editor NEW
13.0 13.0 11.0 110.17 MB

KGUI、继承多种输入端、相关开发功能

License: Other

C# 99.25% ShaderLab 0.73% Batchfile 0.01%
csharp input kgui unity

magicloudsdk's People

Contributors

crazyangseeyou avatar hitzombire avatar iothua avatar moolight avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

magicloudsdk's Issues

框架提供的字体图集

一、使用字体图集
将框架的tff字体库,做成图集,可以采用TextMeshPro,也可以采用其他方式,在KGUI提供KGUI_Text组件,使用默认图集。
二、尽量少用Outline、Shadow组件
因为Outline、Shadow会耗费很大的内存,所以尽量不要使用,如果特殊情况,可使用美术字体来做。
@LiiiiiWr

KGUI添加涂鸦功能

在KGUI新增涂鸦控件
用于涂鸦
在KGUI新增截屏控件
触发某个按钮,对当前屏幕进行截屏,然后可进行图片的放大缩小、以及移动(当图片放大时,可移动里面的图片)。

  • 缩放功能。
    可了解新EventCameraZoom事件,可利用这事件完成缩放。
    两个控件都必须支持本地保存
    @PleaseDownloadLater

输入端优化

整理输入端

  • 手势操作输入端重构:事件、输入端兼容、稳定性、性能等需要优化,以及与平台的手势进行衔接
  • 也需要为以后VR/AR等提供接口

研究高亮

优化高亮功能

  • 高亮需求需要指定物体高亮
  • 高亮表现需要更换优化

工具功能

工具功能
工具功能包含画图、录制、截图。
画图:参照Drawline脚本,里面以及写好了,但是还不够完善,这个功能完善可跟孙翌峰那边沟通。还需要注意的时画图也就是输入端操作模式的Tool模式。
录制:录制视频,并且把麦克风的声音也要录制(可暂时缓一缓,开发完其他的后,在开发这个功能)。
截图:将图片保存到本地(如果时windows,保存到我的电脑-图片-magicloud-产品-实验文件夹下-时间为文件名)。如果时android,则在android的那个文件夹下(看以那个文件夹作为根目录会好一些,同样的格式为根目录-magicloud-产品-实验文件夹下-时间为文件名) @LiiiiiWr

本地网络存在问题

基于现有上传网络脚本进行优化
1、将MCServer融合到本地服务端中
2、本地服务端与客户端进行连接时,会出现偶尔数据传输不准确的情况
3、重构相关消息接收脚本,实现让继承Monbehaviour的方法能方便的接收和发送信息
4、完善实验通知,当本地服务端点击实验的时候,不隐藏此服务端窗口,但是启动客户端,当客户端加载服务端传递的实验信息后,并且发送一个加载完成通知,发送给服务端,此时服务端在隐藏窗口。
5、当设置配置信息时,能真正的设置这些信息,而不是测试Demo。

以上的这些功能,在2019/3/18下班前完成。
@LiiiiiWr

实验工具开发

实验提供公用功能,分为三种模式:操作模式观察模式画图模式
操作模式
1、可对物体进行操作,比如抓取、高亮等等操作
观察模式
观察模式分为旋转与缩放两个功能。
1、当点击旋转按钮时,此时在屏幕上会出现一个短暂的提示,告诉用户,握拳左右旋转可进行旋转整个场景。
2、当点击缩放时,此时屏幕会出现一个提示信息,告诉用户,握拳右移动则放大,左移缩小。根据移动的值进行速度的调整。
画图模式
画图模式有三个功能:画图、保存、清空。
1、当点击画图功能时,握拳可进行划线。
2、当点击保存时,可在此图片保存到本地路径下,默认路径在我的文档中
3、当点击清空时,可清空此图片的所有划线信息。

框架整理优化

  • 在不影响外部使用接口的情况下,进行内部的代码优化。
  • 写一套适合实验开发的UI框架,方便实验开发。
  • 写一套公用功能,便于结合平台的交互。
  • 框架的性能优化,不合理之处尽量进行优化和整理(特别是手势与性能)。

手势与性能是重中之重。

ButtonEvent消息中心重构

ButtonEvent消息中心重构

  • 昨天阮榆浩跟我返回 @LiiiiiWr 消息中心很难用,如果你的表格消息中心是继承在KGUI中的,那么你要重构保证给别人用的东西一定要简单。

开发旋转缩放计划

完善摄像机旋转缩放.

  • 基于框架提供的旋转缩放射线,在MCameraManager脚本完善相关功能。
  • 注意脚本命名规范
  • 如果开发有多个脚本,另外脚本应该用一个新的文件夹存放。
    @CrazyangSeeYou

输入端优化

输入端问题:
1、旋转缩放会与抓取物体冲突。
2、当手势放下时,在抬起会出现跳的情形。
3、放下手识别这块,还是存在问题。
4、触摸输入端需要重新设计一套。
5、平台切换时的一些事件处理。
6、整理下各个事件处理。

开发项目启动程序

Unity端
1、比如科学发布时,发布两种类型的文件,一种是项目Exe压缩包(也就是我们发布出来的程序)。第二种是实验相关资源(利用AssetBuild发布出来的)。 这两种文件都是压缩文件并且加密。

** 一定要注意实验之间的资源公用与独自实验预制物体的处理关系,以及项目Exe压缩包的关系。 如何实验最大化减少资源的冗余,你需要给出一套解决方案,我将实施到整个研发。**

本地平台端
2、本地服务端当点击科学按钮中的某个实验时,平台解析科学所在的压缩路径,启动该压缩包的exe程序,当启动过程中,科学Exe调用该实验的资源,并且解析这个资源,从而加载实验,当实验加载完成后,通知平台,此时平台取消loading,显示实验界面。
3、当从Unity端点击返回时,返回到平台端,这是平台端单击同一个项目下的另一个实验,则是平台不加载项目压缩文件,直接通知项目Exe程序,加载实验。实验加载完成后,通知平台加载完成。

以上的需求是开发完网络端后的下一个Demo,所有的东西务必在3月26号前,看到Demo并且测试没问题。 @LiiiiiWr

框架限制抓取出错

描述错误
Features模块中激活限制移动,Y轴限制,只对右手限制有用,对左手没用

image
` GameObject temp = KinectTransfer.GetObjectGrab(0); //只是右手
GameObject temp1 = KinectTransfer.GetObjectGrab(1);//添加左手

                if (temp!=null&&temp==grabObject)
                    OnUpdate();

                if (temp1 != null && temp1 == grabObject)
                    OnUpdate();`

接入语音SDK

语音需求
1、将文字转化为语音,播放出来。
2、将人的语音转化为文字,进行适当的一些操作。
语音SDK选择
1、选择讯飞SDK
2、选择腾讯Gvoice SDK

框架优化整体步骤

一、手势优化

  • 梳理手势相关脚本。
  • 将手势的操作合理规范。

二、输入端优化

  • 根据手势/鼠标,输入端的相互结合。
  • 手势的一些事件、内存等需要合理优化。
  • 手势操作输入端重构:事件、输入端兼容、稳定性、性能等需要优化,以及与平台的手势进行衔接
  • 也需要为以后VR/AR等提供接口

三、各个事件优化

  • 各个事件的触发与相应的UI配合。

四、KGUI优化

  • 保留最基础的空间。
  • 将扩张控件,比如基于某个项目的框架等,移除此文件。

五、动作管理器

  • 相关动作的协作处理不够严谨
  • 动作管理器需要优化

网络端数据传输

设置数据
1、系统分辨率
2、性能(高、中、低)
3、音量
通过在平台内设置这些数据,在实验中相应的要改变这些数据(这个功能已经实现了,可参照物理、化学额设置功能)。
实验数据
1、实验返回命令
2、实验所属项目、所属实验名称、编号等(这个可在后面累加)
3、实验加载完毕通知(当实验加载完毕后,通知平台[平台要进行loading])
实验与平台置顶
1、当打开平台时,平台处于置顶,实验程序不置顶。
2、当实验程序打开时,实验程序置顶,平台置低。
3、当实验返回到平台界面时,平台置顶,实验置低。并且手势识别等操作关闭(手势停止操作这一步我来做)。
4、当平台程序关闭时,实验程序也要关闭。(这一步其实是平台程序实时检测,可查看任务管理器,进行实时监控)。 @LiiiiiWr

功能控制端添加功能

添加物体旋转功能
为新框架中的FeatureObjectController【物体操作类型】添加“物体旋转”功能,类似现在旧框架一样,只不过这个功能之前是集成在旋转缩放那里,现在抽离出来,做成类似MCCanGrab同级别的。
可在脚本MCObjectRotation下重构。
添加物体按钮功能
类似Button的Click一样,也是在“能抓取”状态那一块,新增“按钮式”状态,当选中这个状态后,物体不能移动,接收的是类似按钮功能,在物体按下释放时,执行某个事件。 @LiiiiiWr
可看MCCanGrab.cs、MOperarte,在处理时注意状态的设置和相关事件的处理。 可参照它写的,内部具体实现应该在自己脚本中实现,MOperate只是方法调用。
MOperate.cs

private IOperateObject HandleGrab(ObjectOperaType type)
        {
            switch (type)
            {
                case ObjectOperaType.:
                    break;
                case ObjectOperaType.能抓取:

                    //调用物体的抓取
                    var canGrab = operaObject.GetComponent<MCCanGrab>();

                    //直接返回
                    if (canGrab.HandStatus != MInputHandStatus.Idle) return null;

                    //不同的操作端具备不同的操作,所以应该让外部调用
                    if (OnGrab != null)
                    {
                        OnGrab(canGrab, InputHand.HandIndex);
                    }

                    return canGrab;
                case ObjectOperaType.物体自身旋转:

                    var rotation = operaObject.GetComponent<MCObjectRatation>();

                    //如果物体不是闲置状态,则直接返回
                    if (rotation.HandStatus != MInputHandStatus.Idle) return null;

                    rotation.OnOpen();

                    return rotation;
                case ObjectOperaType.自定义:

                    var customize = operaObject.GetComponent<MCustomize>();

                    if (customize.HandStatus != MInputHandStatus.Idle) return null;

                    customize.OnOpen(InputHand.HandIndex);

                    return customize;
                default:
                    break;
            }

            return null;
        }

开发瓶盖功能

开发瓶盖功能
1、开发一套公用,适合容器的瓶盖功能

BUG模板

描述错误
对bug的清晰简洁描述。

重现
重现行为的步骤:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. 看见错误

预期的行为
清楚简洁地描述您期望发生的事情。

截图
如果适用,请添加屏幕截图以帮助解释您的问题。

桌面(请填写以下信息):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

智能手机(请填写以下信息):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

附加背景
在此添加有关此问题的任何其他上下文。

emmm..一句话:操作简单,傻瓜式

您的功能请求是否与问题有关? 请描述一下。
简明扼要地描述了问题所在。

描述您想要的解决方案
简明扼要地描述您想要发生的事情。

描述您考虑过的替代方案
对您考虑的任何替代解决方案或功能的简明扼要描述。

附加背景
在此处添加有关功能请求的任何其他上下文或屏幕截图。

开发触摸输入端

因鼠标端与触摸端处理不一致
1、结合鼠标端,开发触摸端
2、触摸端支持旋转、缩放等功能操作

优化注意事项

一、简介
当要重新选择新的实验开发以及重新设计模型等功能时,需要留意以下:

  • 复制现有项目,在新的项目进行开发,项目名为MCSciencePro,你要通知你的团队
  • 美术与程序的小组也需要做如下工作

二、美术
基于新的项目,重新建一个大文件夹、包含美术资源,将新的资源放入到指定文件夹下,旧的资源进行移植,删除等处理,减少资源的冗余,跟美术要谈清楚,资源分布一定要细致,每多一分资源发布的产品就会大一些。这一块一定要沟通清楚,落实到位。

三、程序
基于新的项目,重新建一个大的科学文件夹,新的命名空间等,把脚本都移植到指定文件夹下,如果是用到的公共框架,而可不用管,我之后会慢慢的整理公用的东西,包括力学、光学、宇宙、化学等等。

**以上工作都前期都非常重要,一方面是为了发布减少冗余,另一方面是为了查找 @hitzombire **

Kinect输入端开发

  • Kinect资源单独存放一个文件夹
  • 可以引用框架内的资源,但是不要在框架内添加Kinect的东西,要保证脱离。
    @hitzombire

开发化学仪器

工具

  • 胶头滴管
  • 药匙
  • 镊子

** 开发瓶子**

  • 细口瓶
  • 广口瓶

手势旋转触发Bug

旋转BUG
1、点击按钮时,依然可以旋转
2、背包取物体时,左右手都可抓取,先抓取的手的物体会脱离,后抓取的物体松手后会赋给先抓取的手。
3、抓取一个物体时,总会在某一个特定位置显示一下抓取物体(闪一下),在赋到手的位置

研究虚影

虚影优化

  • 现在虚影显示太模糊,表现太差
  • 研究一种虚影方案,配合新高亮方式。与物体的高亮类似。

网络端Demo开发

一、简介
由于平台是客户端,他会在平台中启动相应的实验(Unity程序),所以需要进行一些数据文件的传输,那么就要用到本地的Socket数据传输,然后平台在与服务器进行网络传输,而你要做的就是先开发本地socket数据传输,以便最后集成到框架中。

  • 需要传输的数据将翌Protobuf文件的形式进行传输,他传输的信息也就是实验的相关信息,以及实验的设置信息等等。
    二、Protobuf了解
    去学习与使用Protobuf,它是Google的数据传输文件,非常火,是开源的。
    三、服务端
    服务端其实是一个本地的C#控制端程序(最终我会将你写的Demo集成到平台中去),它与Unity客户端进行本地socket数据传输,那么本地的socket数据传输,连接等需要你自己开发,然后当涉及到传输时则用protobuf文件的形式进行传输,根据protobuf文件在服务端或客户端进行解析。

四、客户端
客户端则是unity程序,它主要是根据服务端的信息导入指定的实验资源、设置分辨率/性能、手势信息、以及调用公用功能等方式。并且在客户端将实验信息传输到本地服务端。

五、服务端与客户端传输的信息

  • 当本地服务端(平台)启动客户端的时候,需要注意如下要求:
    • 启动客户端的时候,服务端显示loading,当客户端在服务端的窗口后进行启动以及数据的加载(比如启动那个实验资源等),当客户端启动完成后,通知服务端加载完毕,服务端loading消失,客户端要显示在服务端的前面,也就是窗口置顶(可调用c++的相应接口,百度即可)。
    • 然后客户端启动后,会调用框架内的公用功能,一方面是返回到服务端界面。
    • 后续在将你写的Demo集成到平台中,客户端的代码则集成到框架中。
  • 需要注意的是本地socket以及protobuf,要先弄明白,在你写demo的时候,至于传输那些数据则到时候整理清晰后,在进行开发就好。在设计的时候需要注意传输的命令尽量用int、或者byte(十六进制),切不可用字符串。
    @LiiiiiWr

移除框架Sirenix

移除框架的Sirenix
不是在科学项目去做这件事情,而是在框架项目将Sirenix移除掉,并且将一些框架用到此Sirenix开发Editor来实现,尽量保持与sirenix序列化出来的界面一致性。然后为后续倒入MCSciencePro做准备。
@LiiiiiWr

输入端操作优化

一、现在的输入端操作模式
在输入端中,有四种模式(Move、Rotate、Zoom、Tool),它位于MSwitchManager脚本,该脚本就是模式的初始化以及判断处理。然后在各个输入端(MouseController、KinectController)还有Drawline(画图)。则是根据这个枚举值来判断不同的操作捕捉。 比如当为Move值时,握拳抓武器就是移动,为Rotate时,握拳左移动右移动就是旋转、Tool时握拳就是画线。

二、优化后输入端模式
同样还是有Move、Rotate、Zoom、Tool。但是move、rotate、zoom三种模式可能会共存,tool模式开始后,这三个模式则不能进行操作了(比如抓物体、移动、缩放等)。

  • 当选中物体时,物体可以被抓取
  • 当未选中物体时,也没有选中UI,此时握拳移动,则是Rotate。但是需要注意在有一些实验选中物体也许也是旋转(因为这个实验也许并没有移动)
  • 缩放操作则有点特殊:
  1. Kinect
    当平台为Kinect时,两只手握拳进行靠近则是缩小、远离则是放大(之前也有,只不过操作可能没那么好)。
    2.鼠标
    当平台为鼠标时,进行滚轮则是缩放(这个其实之前写过,在未更新前就是这样子的,代码可以找一找之前的)
    3.触摸
    当为触摸时,两个触摸点的远近则是缩放(网上资料很多)。

注意:操作输入端其实功能很好做,但是难的时它们之间的相互识别判断以及处理。如果处理不好,就会出现误判,比如人家只想抓物体,结果触发了旋转动作。在这一块上就需要花点心思了。然后还有就是把旋转缩放这方面的代码,也要优化下(有写过,但是背后有很多无用的代码,以及你看有没有更好的方式去实现)。 @LiiiiiWr

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.