公司的产品有个功能:在主相机之外,另有一个摄像机来渲染不同的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. css3中-webkit是什么意思

    在CSS样式中很多样式名前缀都带有'-webkit-',但在CSS提供的API中查询不到这些样式名. 原因:CSS3中新增了一些属性,针对不同的浏览器,规定其内核名称让它们可以对这些新增属性进行解析. ...

  2. webapi fromurl frombody

    https://blog.csdn.net/QiGary/article/details/113979877 在做后台api接口时,常常涉及到Http方法访问问题,其中最基础也是最核心的就是传参问题. ...

  3. demo code

    using System.Reflection; // 引用这个才能使用Missing字段 namespace hello{    public partial class Form1 : Form  ...

  4. C#中延迟初始化实现原理的一点浅见。

    定义 延迟初始化:一个对象的延迟初始化意味着它的创建被推迟到它第一次使用.(对于本主题,延迟初始化和延迟实例化是同义词.)延迟初始化主要用于提高性能.避免浪费计算和减少程序内存需求. 用法及简单介绍 ...

  5. 2021 icpc 沈阳 I 【分式线性变换的保交比性】

    分式线性变换的保交比性 对于分式线性变换,具有保交比性 应用 在复数域下,存在分式线性变换,给定三个输入和输出,再给定第四个输入,求其在这个分式线性变换下的输出. https://codeforces ...

  6. Keil51单片机解决数字显示不稳的问题

    Keil51单片机解决数字显示不稳的问题 数字显示不稳,就是我们人眼的特点决定的,0.1秒的残留现象,低于这个值人眼发现不了其中变化,大于这个值就会出现同一个数字闪烁的现象.解决的方法就是所有数字,第 ...

  7. SpringBoot(十五)单个以及多个跨域的配置方法

    同源策略是浏览器的一个安全限制,要求域名.协议.端口相同,如果不同则没办法进行数据交互.而跨域配置,则是为了解除这方面的限制.前后端分离的情况下,因为需要分开部署,后台开发基本都需要进行跨域配置了.( ...

  8. git lock fail解决

    本地多个分支,remote .remote tracking.local checkout了2个不同版本分支,发现最后版本却是相同的,然后pull时报git lock fail, 看来发送了冲突了,删 ...

  9. Flink Application Development DataStream API Event Time--Flink应用开发DataStream API事件时间

    目录 概览 事件时间 接下来去哪儿 水印生成 水印策略简介 使用水印策略 处理空闲源 写水印生成代码 写周期WatermarkGenerator代码 写符号形式的WatermarkGenerator代 ...

  10. 淘淘商城项目技术点-9:使用FTPClient及FtpUtil工具类将图片上传至ngnix图片服务器

    package com.taotao.controller; import com.taotao.common.utils.FtpUtil; import org.apache.commons.net ...