Unity中使用RawImage显示3D模型

本文将3D模型显示到rawimage(可以实时操作),效果图附文末(文章第五点)

1.新建一个Render Texture并设置Render Texture

2.新建RawImage并将Texture设置为之前新建的Render Texture

3.新建一个相机专门

此相机专门用来拍摄需要映射到rawimage上的3D模型

设置如下:

其中将Target Texture改为第一步新建好的Render Texture

如果你需要将这个rawimage除了物体之外与你的其他ui背景一样,也就是出模型外透明背景,那么将Clear Flags设置为Solid Color.如果不需要那么默认就好了。

4.新建你的模型

让上一步新建的相机与你的模型放到合适位置即可。

5.效果图

5.1背景不为ui,默认的:

这个就是相机的Clear Flags为默认

5.2背景为ui:

这个就是相机的Clear Flags为Solid Color

结尾:有任何错误请指出,补充请评论,看到会第一时间回复,谢谢。

Unity引擎,如果你想创建一个功能,让用户可以通过键盘操作(Q/W缩放,鼠标拖动,C键保存)来调整多个对象的RectTransform(矩形变换组件),同时能将这些变化保存并在程序运行时恢复,你需要编写一个自定义脚本来处理这类交互。 首先,定义一个脚本,比如`ImageScalerController.cs`,然后在Unity编辑器将其挂载到一个空物体上作为“控制器”,因为你可以从这个空物体获取其子对象并进行操作: ```csharp using UnityEngine; using UnityEngine.UI; public class ImageScalerController : MonoBehaviour { public RectTransform[] targetRects; // 需要控制的RectTransform数组 private float zoomSpeed = 0.1f; private Vector2 dragOffset; void Update() { // 键盘操作 if (Input.GetKeyDown(KeyCode.Q)) { foreach (RectTransform rect in targetRects) { rect.localScale += new Vector3(zoomSpeed * Time.deltaTime, zoomSpeed * Time.deltaTime, zoomSpeed * Time.deltaTime); } } if (Input.GetKeyDown(KeyCode.W)) { foreach (RectTransform rect in targetRects) { rect.localScale -= new Vector3(zoomSpeed * Time.deltaTime, zoomSpeed * Time.deltaTime, zoomSpeed * Time.deltaTime); } } // 鼠标拖动 if (Input.GetMouseButton(0) && Input.GetMouseButtonUp(0)) { dragOffset = Input.mousePosition - Screen.mousePosition; // 获取鼠标按下和抬起时的位置差 } else if (Input.GetMouseButtonDown(0) && !Input.GetMouseButtonUp(0)) { Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); foreach (RectTransform rect in targetRects) { rect.position += dragOffset + mouseWorldPos - rect.position; } } // C键保存位置 if (Input.GetKeyDown(KeyCode.C)) { SaveTransformPositions(); } } private void SaveTransformPositions() { for (int i = 0; i < targetRects.Length; i++) { Debug.Log($"Saving position of {targetRects[i].name}: {targetRects[i].position} and scale: {targetRects[i].localScale}"); // 在这里添加保存位置或缩放的实际代码,例如存储到 PlayerPrefs 或者数据库 } } // 当游戏重新加载时调用此方法恢复数据 public void RestoreTransformPositions() { foreach (var rect in targetRects) { // 从储存位置读取并设置回rect // 假设从 PlayerPrefs 获取 Vector3 storedPosition = PlayerPrefs.GetVector3(rect.name + "_position", Vector3.zero); rect.position = storedPosition; rect.localScale = PlayerPrefs.GetVector3(rect.name + "_scale", Vector3.one); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值