公司的产品有个功能:在主相机之外,另有一个摄像机来渲染不同的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. Jmeter学习:时间类函数

    一.__time 功能介绍:按指定格式生成当前时间 ${__time(参数 1,参数 2)} 参数 1:时间格式 参数 2:注册变量名称 二.__timeShift 功能介绍:按格式生成时间格式,并计 ...

  2. jieba分词的分词模式比较

    sentence = "我来自中国人民大学" # 默认精确模式 words = jieba.cut(sentence) print("精确模式: %s" % & ...

  3. 14-K8S之helm入门到逃跑

    目录 helm入门 1.helm介绍 2.helm核心术语 3.helm下载和安装 3.1以helm3.6为测试实例 3.2以helm3.7.2为例 helm v2版本在集群上部署Tiller 1.创 ...

  4. django修改认证模型类

    1.我在一个子应用下面创建了一个apps目录,且在apps下又创建了一个子应用users,结构如下图: 2.在users的models.py中 from django.db import models ...

  5. Chrome上谷歌翻译不能使用问题

    # 修改hosts文件(hosts文件位于 C:\Windows\System32\drivers\etc) 142.250.107.90 http://translate.googleapis.co ...

  6. OceanBase使用OBLOADER、OBDUMPER进行导入导出

    需求背景 需要定时给OB进行数据备份,并且在需要时可以全量导入,所以只能通过脚本来减少手动操作的繁琐. 脚本示例 导出脚本 #!/bin/bash # 这一步不能省,如果不设置定时运行时可能会有问题 ...

  7. Go实现KMP和Sunday算法

    KMP 1 func KMP(str, substr string) int { 2 if substr == "" { 3 return 0 4 } 5 strLen := le ...

  8. Visual C++ Redistributable for Visual Studio各版本下载地址

    Visual C++ Redistributable for Visual Studio各版本下载地址飞鹰_天涯于 2021-06-24 09:35:21 发布 5978收藏 8版权Microsoft ...

  9. 如何把高德地图搜索商家电话资料导出成excel里?

    有很多人问我地图商家结果采集怎么做? 怎么样能够快速的把高德地图左边的搜索列表里的商家地图,电话,导出到EXCEL里. 如何快速地将高德地图里的商家电话资料导出EXCEL? 操作步骤: 1. 选择你要 ...

  10. Qt开发环境的建立

    在建立开发环境之前,先来了解一下Qt是什么以及它的历史变迁.Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序, ...