unity点击一个物体,出现一个按钮,再点击这个按钮,出现一个字幕窗口,最后点击物体,按钮窗口都消失

unity在线急等,悬赏可添加
2024-11-08 04:51:52
推荐回答(3个)
回答1:

简单给你个思路吧:
首先处理点击了对象(obj):
1) 首先obj需要用到一个碰撞器,此处用Box Collider,一个自定义组件Controller.cs,用来检测鼠标是否点击。
2) 在obj中添加Box Collider组件,可以不用设置isTrigger,根据自己需求而定。
3) 在obj中添加Controller组件。
4) 设置obj的标签Tag为自定义标签,此处设置为”myCube”。
5) Controller组件代码如下:
void Update()
{
if(Input.GetButtonDown("Fire1"))
{

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if(Physics.Raycast(ray,out hitInfo))
{
GameObject gameObj = hitInfo.transform.gameObject;
if(gameObj.transform.tag == "myCube")
{
//最好在这里吧对象坐标也获取到,存到变量待用;

//这里需要标识以下,实现隐藏和显示

if(!m_isShowBtn)//如果没有按钮弹出

{

m_isShowBtn=true;
}
else

{

m_isShowBtn=false;
}
}
}
}
}
注:上面是引用别人的,但原理没问题。
其次我们来处理弹出按钮和字幕,
1.首先你需要知道对象坐标,

2.然后在OnGUI函数中加入以下代码:

void OnGUI{
if(m_isShowBtn)
{

if (GUI.Button(new Rect(x, y, w,h ),"字母框"))
{
//这里获取字母框,可以加个标示,比如:

m_isShowText=true;

}
if(m_isShowText)

{
//字体大小
GUI.skin.label.fontSize = 32;
//居中

GUI.skin.label.alignment = TextAnchor.MiddleCenter;
GUI.Label(new Rect(x,y, w, h), "这里是字母内容:");
}
}
}
解释一下,这是动态生成UI按钮,其中,x,y为按钮或文本的起始坐标,w,h为宽高,这些参数大小可以根据获取到的物体坐标来定义,或者用其他方法获取都行,自己研究一下;
自己思路随便写了以下,有BUG的话自己调一下

回答2:

using UnityEngine;

using System.Collections;

public class Click : MonoBehaviour

{

public GameObject btn;

public GameObject kuang;

void Awake()

{

btn.SetActive(false);

kuang.SetActive(false);

}

void Update()

{

if (Input.GetMouseButtonDown(0))

{

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit hitInfo;

if (Physics.Raycast(ray, out hitInfo))

{

if (hitInfo.collider.name == "Cube")

{

btn.SetActive(true);

if (kuang.activeSelf && btn.activeSelf)

{

btn.SetActive(false);

kuang.SetActive(false);

}

}

}

}

if (btn == null)

{

return;

}

else {

UIEventListener.Get(btn.gameObject).onClick = MyClick;

}

}

void MyClick(GameObject o)

{

kuang.SetActive(true);

}

}

按钮和对话框直接拖进去就OK ,脚本挂载Cube上

回答3:

首先放两个按钮,一个字幕窗口,开始的时候把第二个按钮和字幕窗口都隐藏掉。
点击第一个按钮,第二个按钮出现,然后再点击第二个按钮,字幕出现。
这代码太简单。。。。。。。