目录
1.返回鼠标单击对象的名字
2.鼠标拖动移动对象
3.实现鼠标跟随
4.场景准备工作
5.判断图片与框配对
6.根据配对结果放置图片
1.返回鼠标单击对象的名字
步骤:
-
创建一个
ShowName
的脚本,并挂载在摄像机上
RaycastHit2D hitInfo;void Update(){if (Input.GetMouseButtonDown(0)){hitInfo = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);if (hitInfo.collider != null){Debug.Log(hitInfo.collider.gameObject.name);}} }
·
2.鼠标拖动移动对象
下载源码 UnityPackage
步骤:
-
记录游戏对象
-
计算位置偏差值
-
松开鼠标后,将游戏对象的位置到鼠标松开的位置
RaycastHit2D hitInfo; // 射线检测到的信息GameObject Tp; // 记录游戏对象的位置Vector3 offset; // 鼠标点击的位置与游戏对象中心坐标位置的偏差值bool flag; // 是否点在了游戏对象上void Update(){if (Input.GetMouseButtonDown(0)){// 鼠标点击屏幕的位置Vector3 mouseClickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);hitInfo = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);if (hitInfo.collider != null){//Debug.Log(hitInfo.collider.gameObject.name);Tp = hitInfo.collider.gameObject;offset = Tp.transform.position - mouseClickPos;flag = true;}}// 鼠标持续按住时if (Input.GetMouseButton(0) && flag){// 鼠标点击屏幕的位置Vector3 mouseClickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);Tp.transform.position = mouseClickPos + offset;}// 鼠标松开时if (Input.GetMouseButtonUp(0)){flag = false;}}
3.实现鼠标跟随
步骤:
-
将 GetMouseButtonUp 改成 按住鼠标持续移动GetMouseButton
-
是否点在了游戏对象上的bool值
RaycastHit2D hitInfo; // 射线检测到的信息GameObject Tp; // 记录游戏对象的位置Vector3 offset; // 鼠标点击的位置与游戏对象中心坐标位置的偏差值bool flag; // 是否点在了游戏对象上void Update(){if (Input.GetMouseButtonDown(0)){// 鼠标点击屏幕的位置Vector3 mouseClickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);hitInfo = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);if (hitInfo.collider != null){//Debug.Log(hitInfo.collider.gameObject.name);Tp = hitInfo.collider.gameObject;offset = Tp.transform.position - mouseClickPos;flag = true;}}// 鼠标持续按住时if (Input.GetMouseButton(0) && flag){// 鼠标点击屏幕的位置Vector3 mouseClickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);Tp.transform.position = mouseClickPos + offset;}// 鼠标松开时if (Input.GetMouseButtonUp(0)){flag = false;}}
4.场景准备工作
步骤:
-
将kuang的图片放入场景中,并为它添加碰撞器 (Trigger),中心稍微小一点
-
将其制作为预制体
-
将三个框重命名
-
创建UI文字放到对应的框下面
5.判断图片与框配对
步骤:
-
创建一个
Trigger
脚本,挂载到框上 -
写一个
OnTriggerEnter2D
-
根据拖动的游戏对象名称与框的名称,进行判断
-
在
ShowName
脚本下定义一个全局变量 public bool dragFlag,记录拖放是否正确 -
在
Trigger
脚本上,在OnTriggerEnter2D
中的判断,将ShowName -> dragFlag
设置为true -
给
图片起始位置赋值
-
给
图片结束位置赋值
代码:
在ShowName
脚本修改如下:
Trigger
代码:
ShowName showName; // ShowName脚本void Start(){showName = GameObject.Find("Main Camera").GetComponent<ShowName>();}void Update(){}private void OnTriggerEnter2D(Collider2D collision){if((collision.gameObject.name == "qiu" && this.gameObject.name == "ballKuang")|| (collision.gameObject.name == "鲜花" && this.gameObject.name == "ballKuang")|| (collision.gameObject.name == "qiu" && this.gameObject.name == "ballKuang")){// 拖放正确showName.dragFlag = true;// 图片的结束坐标showName.TPendPos = this.transform.position;}}
6.根据配对结果放置图片
步骤:
-
在
ShowName
脚本的鼠标松开时,将放置图片的代码写上 -
给三张图片各加上
Rigidbody2D
,并设置重力为0 -
给三张图片的碰撞器全部设为
Trigger
-
Trigger
脚本写上OnTriggerExit2D
-
给三张图片添加
Picture
的标签,并在脚本点击对象时添加上标签的判断
// 鼠标松开时
if (Input.GetMouseButtonUp(0))
{flag = false;// 拖放位置赋值if (dragFlag){Tp.transform.position = TPendPos;}else{Tp.transform.position = TPstartPos;}
}
Trigger
脚本写上
private void OnTriggerExit2D(Collider2D coll)
{showName.dragFlag = false;showName.TPendPos = Vector3.zero;
}
标签判断:
if (hitInfo.collider != null && hitInfo.collider.gameObject.tag == "Picture")// 加上是否点击到游戏对象的判断
if (flag)
{// 拖放位置赋值if (dragFlag){Tp.transform.position = TPendPos;}else{Tp.transform.position = TPstartPos;}dragFlag = false;flag = false;
}