目录
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;
}