Unity 鼠标事件 GUI GUILayerOut Input Application(截屏,getMouseDown,getKeyCode) 射线

来源:互联网 发布:yum install redis 编辑:程序博客网 时间:2024/05/29 13:46
//前提是被点击的GameObject有包围盒
//鼠标没有点击的时候,直接移动到物体上的时候调用
void OnMouseEnter(){
print ("Enter");
}
//鼠标点击物体的时候调用
void OnMouseDown(){
print ("Down");
}
//鼠标滑动物体的时候调用
void OnMouseDrag(){
print ("Drag");
}
//鼠标抬起的时候调用
void OnMouseUp(){
print ("Up");
}
//鼠标离开物体的时候调用
void OnMouseExit(){
print ("Exit");
}
//当玩家点击一个物体准备拖动物体的时候,会先调用Enter然后是Down然后是一直Drag,当鼠标滑动很快但是物体没有跟上的时候,
//会出现鼠标箭头离开了物体,这个时候只要没有松手,Drag是一直在的,但是Exit调用了,Up没有调用,

//但是如果鼠标滑动的不快,鼠标的箭头一直没有离开过物体的话,那么当松手的时候,会先调用Up然后是Exit


1.

void OnGUI(){
if (GUI.Button (new Rect (0, 0, 100, 100), "1")) {
//点下后只有松手了才会调用,只调用一次
print("1");//普通按钮
}
if (GUI.RepeatButton (new Rect (200, 200, 100, 100), "2")) {
//只要没有松手就会一直调用,会调用很多次
print ("2");//激活按钮
}
}


2.

//////////////////////////TextArea固定高宽的文本框,可以输入文字

public string str1 = "";
void OnGUI(){
//这个是固定高宽的文本框
//这个时候文本框中的内容“abc”是不能添加和修改的,因为每当调用到这行语句的时候都会刷新文本框的内容成“abc”
GUI.TextArea(new Rect (100,100,100,100),"abc");
//文本框返回一个string,如下写就可以修改文本框的内容了

//给定了宽度以后输入的文字很长,会自动换行,也可以回车换行,当文本的高度超过文本框的高度后,会自动截取最下面可见的部分
str1 = GUI.TextArea (new Rect (0, 0, 100, 100), str1);
}

//////////////////////////////////////////PasswordField密码框,可以输入密码

//密码框不能换行,比如宽高均是100,但是输入了200长度的string,这个时候高度只是占据了一行
//可是长度只显示了100,长为200的密码是不能全部显示出来的
str1 = GUI.PasswordField(new Rect (100,100,100,100),str1,'#');


//////////////////////////////////////Toggle复选框checkbox
//这个时候man这个选项是一直选择着的,因为传入的是true;
GUI.Toggle(new Rect (100,100,100,100),true,"man");
//////这样就可以点选了

///这个时候选择“man”的时候,“woman”就没有选,选择“woman”的时候,“man”就没有选,

public bool sex;
sex = GUI.Toggle(new Rect(100,100,100,100),sex,"man");

sex = GUI.Toggle(new Rect (100,200,100,100),!sex,"women");


///////////////////////////////////////GUILayout

private string test = "ab";
//会在用户输入的位置创建一个Button,当点击的时候,test会变化可是按钮的宽高不会变化
if (GUI.Button (new Rect (100, 100, 100, 100), test)) {
test+=test;
}
//会产生两个按钮,两个按钮的x是一样的,可是y是上下接着的,自动布局的,而且点击按钮时,test变化,同时按钮的宽高也会适应test的长短变化而变化
if (GUILayout.Button (test)) {
test+=test;
}
if (GUILayout.Button (test)) {
test+=test;
}


//这些按钮会横向排列,(不要忘了还有EndHorizontal)
GUILayout.BeginHorizontal ();
GUILayout.Button ("fdsa");
GUILayout.Button ("fdsa");
GUILayout.Button ("fdsa");
GUILayout.Button ("fdsa");
GUILayout.EndHorizontal ();


//这些按钮会纵向排列,(不要忘了还有EndVertical)
GUILayout.BeginVertical ();
GUILayout.Button ("fdsa");
GUILayout.Button ("fdsa");
GUILayout.Button ("fdsa");
GUILayout.Button ("fdsa");
GUILayout.EndVertical();

/////////////////////////////////////////////////////////Input  

 Application.CaptureScreenshot

if (Input.GetKeyDown (KeyCode.W)) {

Application.CaptureScreenshot("C:\\Users\\Administrator\\Desktop\\1.png");

//Application.CaptureScreenshot(@"C:\Users\Administrator\Desktop\1.png");//在字符串前面加上“@”就可以只用一个“\”
}

GetMouseButtonDown 

if (Input.GetMouseButtonDown (0)) {
print ("fdsaf");
}

////////////////////////////////////射线

if (Input.GetMouseButtonDown (0)) {
//从摄像机到鼠标点击的位置发射一条射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;//射线的碰撞信息
if(Physics.Raycast(ray,out hitInfo)){
Destroy(hitInfo.collider.gameObject);
}
}

0 0
原创粉丝点击