公司的产品有个功能:在主相机之外,另有一个摄像机来渲染不同的3D模型,然后把摄像机的RenderTexture赋值给一个 rawImage.texture,作为2D的UGUI来显示。(应用场景:模型结构展示,模型库管理,商品列表中展示商品模型等等)

现在有了新的需求:

  1,实现鼠标在rawImage上面左键拖拽是旋转模型,中键拖拽是移动模型,滚轮滚动是缩放。

  2,实现鼠标点选模型的不同部分(比如汽车模型的门、窗、轮胎等)。

  需求1的实现思路就是,在渲染相机上挂上鼠标交互控制的脚本,然后在rawImage接收到交互事件(Enter,Exit,BeginDrag,EndDrag)时,打开或关闭相机控制脚本中对应的(移动\缩放\旋转)开关,

因为大家用的框架可能都不一样,具体代码要根据自己项目底层的UI事件处理接口和相机控制接口来编写,这里就不细说了。

  需求2的实现的核心点是:在模型的不同部分上添加碰撞体,然后把鼠标在rawImage上面交互的坐标转换到渲染相机的viewport。

下面是关键代码:

 1 //data是鼠标在rawImage上交互的PointEventData数据
2 //rectTransform是RenderTexture所在的rawImage的RectTransform
3 //rtCamera是渲染3D模型的摄像机
4 //返回的obj就是轮胎,窗、门等物体
5 private GameObject __GetHitObj(PointerEventData data)
6 {
7 GameObject obj = null;
8 var pos = (data.position - (Vector2)rectTransform.position) / rectTransform.lossyScale - rectTransform.rect.position;
9 var rate = pos / rectTransform.rect.size;
10 var ray = rtCamera.ViewportPointToRay(rate);
11 RaycastHit raycastHit;
12 if (Physics.Raycast(ray, out raycastHit))
13 {
14 //Debug.Log(raycastHit.transform.name);
15 obj = raycastHit.transform.gameObject;
16 }
17 return obj;
18 }

Unity鼠标点选RenderTexture里渲染的3D模型的更多相关文章

  1. Unity鼠标点击Collider

    void OnGUI() { if (Event.current != null && Event.current.type == EventType.mouseDown) { )) ...

  2. (转载)Unity UGUI鼠标点击UI不受影响方法IsPointerOverGameObject

    这几天在做捕鱼达人游戏时发现,当鼠标点击UI时,炮台的子弹也会发射子弹,这样会影响用户体验. 然后网上百度了一波,发现在UGUI系统上,EventSystem提供了一些方法.那就是EventSyste ...

  3. 当鼠标点击input框时,想让全选input框的所有内容只需要加“onfocus="this.select();”就可以了

    当鼠标点击input框时,想让全选input框的所有内容只需要加“onfocus="this.select();”就可以了

  4. 鼠标点击input时,placeholder中的提示信息消失

    html代码: <input type="text" placeholder="多个关键词空格隔开"> 鼠标点击input时,placeholder ...

  5. 使用JS或jQuery模拟鼠标点击a标签事件代码

    原文 使用JS或jQuery模拟鼠标点击a标签事件代码 这篇文章主要介绍了使用JS或jQuery模拟鼠标点击a标签事件代码,需要的朋友可以参考下 <a id="alink" ...

  6. Teamviewer 远程控制时 无法正常操作鼠标点击

    其中一种可能: 本机开启了360的64位Intel-VT核晶防护后,用Teamviewer远程到本机,远程电脑无法操作本机的鼠标点击(左右键都不行),查看日志显示拦截了模拟按键.关闭核晶防护就可以正常 ...

  7. 鼠标点击input框后里面的内容就消失

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 基于Unity 5的次世代卡通渲染技术 -- Unite 2017 米哈游总监贺甲分享实录

    在5月12日Unite2017开发者大会上,米哈游技术总监兼美术指导贺甲进行了主题为次世代卡通渲染的演讲.一下为详细分享内容: 大家好,首先自我介绍一下,我叫贺甲,在米哈游担任技术总监和美术指导工作, ...

  9. Unity在UI界面上显示3D模型/物体,控制模型旋转

    Unity3D物体在UI界面的显示 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  10. 【Unity】3.1 利用内置的3D对象创建三维模型

    分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需 ...

随机推荐

  1. 用“餐厅打包”的故事说明白Python里面的自定义函数

    注:博主并非Python专业程序员,年龄12岁,Python龄不到1岁,才疏学浅,如有错误还请大佬指教! 希望能通过本专栏帮助到一些Python小白! 嗨~大家好!上篇博文咱们说了,万一有一些上万行才 ...

  2. verilog Signed与赋值形式

    `timescale 1ns/1ps module test; reg signed[3:0] uu; reg signed[3:0] dd; reg [2:0] extract; reg [4:0] ...

  3. nginx(一) の 入门解析

    OSI 模型的前三层 应用层: 每一个应用程序自定义的协议 表示层: 数据的压缩与解压缩.图片的编码与解码 会话层: 会话管理(session) 和 网络验证 .包括断点续传和服务器验证用户登录等.比 ...

  4. C# const, readonly, static readonly

    转: Const 定义的是静态常在对象初始化的时候赋值.以后不能改变它的值.属于编译时常量.不能用new初始化. Readonly 是只读变量.属于运行时变量.可以在类constructor里改变它的 ...

  5. Android Studio相关配置说明

    介绍:Android Sdutio 是谷歌推出的一个 Android 集成开发工具. 现已将 SDK(software development kit)集成到 Android Studio 中.可以直 ...

  6. Cleanest XMaster绿色解压最新版下载9.6密钥激活码

    cad安装报错换了好几个版本都不行,用这个卸载了一下,确实有用 Cleanest XMaster绿色版cad卸载工具分享下载 地址一(百度网盘) 地址二(直接下载) 9.6.05密钥:[AtrXShX ...

  7. vue-pc项目放到电视tv上适配

    当部署屏幕小于开发屏幕大小的时候,我们通过transform:scale(0.8)对页面进行整体缩放,部署后不生效时,可以找到项目的index.html文件,将viewpoint这一行代码注释掉,或者 ...

  8. 爬qqhentai

    import requestsfrom bs4 import BeautifulSoupimport timeimport reimport osimport randomagentlist = [& ...

  9. 超2T硬盘使用gpt分区及做成lvm

    1.超过2T分区不能用fdisk了,用parted 分区格式化后对新的分区做lvm

  10. awk引用外部变量

    test]# cat tmp.tmp120.4987 12.717858119.801948 13.38588119.424529 14.024871119.337438 15.070484119.2 ...