Unity学习日记 11.单词识别游戏

目录

1.返回鼠标单击对象的名字

2.鼠标拖动移动对象

3.实现鼠标跟随

4.场景准备工作

5.判断图片与框配对

6.根据配对结果放置图片


1.返回鼠标单击对象的名字

步骤:

  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

步骤:

  1. 记录游戏对象

  2. 计算位置偏差值

  3. 松开鼠标后,将游戏对象的位置到鼠标松开的位置

    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.实现鼠标跟随

步骤:

  1. 将 GetMouseButtonUp 改成 按住鼠标持续移动GetMouseButton

  2. 是否点在了游戏对象上的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.场景准备工作

步骤:

  1. 将kuang的图片放入场景中,并为它添加碰撞器 (Trigger),中心稍微小一点

  2. 将其制作为预制体

  3. 将三个框重命名

  4. 创建UI文字放到对应的框下面


5.判断图片与框配对

步骤:

  1. 创建一个Trigger脚本,挂载到框上

  2. 写一个OnTriggerEnter2D

  3. 根据拖动的游戏对象名称框的名称,进行判断

  4. ShowName脚本下定义一个全局变量 public bool dragFlag,记录拖放是否正确

  5. Trigger脚本上,在OnTriggerEnter2D中的判断,将ShowName -> dragFlag设置为true

  6. 图片起始位置赋值

  7. 图片结束位置赋值

代码:

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.根据配对结果放置图片

步骤:

  1. ShowName脚本的鼠标松开时,将放置图片的代码写上

  2. 给三张图片各加上Rigidbody2D,并设置重力为0

  3. 给三张图片的碰撞器全部设为Trigger

  4. Trigger脚本写上OnTriggerExit2D

  5. 给三张图片添加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;
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值