前提条件:已经创建了2DUI。
需要的组件如下(按层级):
Image
Image
TEXT
Panel
Image添加Mask组件
TEXT
滚动条
傻瓜式步骤如下:
1、建立Imgae-我命名为跟踪点(图片是自己做的)。
2、在上层的下一级创建image作为UI的底板,我命名为Image底板(图片自己做的)
3、底板下创建文本,作为标题(图片自己做的)。
4、与底板同级,创建一个panel用来承载内容,我命名为内容,并使其透明。
5、内容层级下创建一个遮罩和一个滚动条,
先创建image,并在下级创建text
给遮罩添加如下组件
颜色推荐如下
添加一个滚动条并添加一些文本用于观察效果
配置遮罩
配置滚动条
配置好UI之后对模型进行操作。
需要点击显示的模型加上碰撞器。
写一个脚本,如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIPosition : MonoBehaviour
{
//点击模型出现UI,UI跟随指定模型移动,UI自动缩放
//public GameObject Cube;//3D对象
public GameObject Image;//UI对象
public float Aixsx, Aixsy, Aixsz;
public Text objectname;
void Update()
{
Vector3 pos = Camera.main.WorldToScreenPoint(this.gameObject.transform.position);
//XYZ偏移定位,防止遮盖3D对象
Image.transform.position = new Vector3(pos.x + Aixsx, pos.y + Aixsy, pos.z + Aixsz);
//动态设备名称
objectname.text = this.gameObject.name;
if (Input.GetMouseButtonDown(0))
{
//从摄像机发出到点击坐标的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//获取物理碰撞器
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
//打印射线所点击的物体名称
//print(hit.collider.gameObject.name);
//switch (this.gameObject.name) {
// case "RFID(15)":
// Image.gameObject.SetActive(Image.gameObject.activeSelf ? false : true);
// break;
//}
if (hit.collider.gameObject.name == this.gameObject.name)
{
Image.gameObject.SetActive(Image.gameObject.activeSelf ? false : true);
}
}
}
}
}
挂上
挂到带有碰撞体的模型上。
将图像和文本赋值。
运行后点击该模型便会显示
二次点击就会消失。OK。原理不做补充,具体可以留言。