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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/494020.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tensorflow2.0笔记 - 使用compile,fit,evaluate,predict简化流程

本笔记主要用compile, fit, evalutate和predict来简化整体代码&#xff0c;使用这些高层API可以减少很多重复代码。具体内容请自行百度&#xff0c;本笔记基于FashionMnist的训练笔记&#xff0c;原始笔记如下&#xff1a; Tensorflow2.0笔记 - FashionMnist数据集训练-CSDN博…

【旅游景点项目日记 | 第一篇】项目服务架构、数据库表设计

Gitee仓库地址&#xff1a;travel-server&#xff1a;景点旅游项目服务端 文章目录 1.项目服务架构2.数据库设计2.1用户服务—travel_ums2.1.1 ums_user—用户表 2.2景点服务—travel_ams2.2.1 ams_attraction—景点表1.2.2 ams_resource_type—资源类型表 2.3票务服务—trabel…

前端框架的简单介绍

html html-结构 盖房子之前先划三室二厅 &#xff08;超文本标记语言&#xff09;(可以实现一切的文本) css css-样式 在房里添家具 &#xff08;层叠样式单&#xff09;(化妆在脸上叠加) javascript(js) javascript(js)-交互(行为) 我点击你打开 供显示信息的元…

持续集成与版本控制的相关概念

目录 一、持续集成 1.1 持续集成基本概念 1.1.1 持续集成的含义 1.1.1.1 持续集成流程是依赖产品版本迭代和版本分支而产生的 1.1.1.2 持续集成流程中包含的内容 1.1.2 传统打包模式说明 1.1.2.1 传统打包模式概述 1.1.2.2 传统打包模式问题 1.1.3 持续集成模式 1.1.…

GIt的原理和使用(五)

目录 多人协作 多人协作一 准备工作 协作开发 多人协作二 准备工作 额外场景 申请单合并分支 更推荐写法 远程分支删除后&#xff0c;本地git branch -a依然能看到的解决办法 多人协作 多人协作一 目标&#xff1a;在远程master分支下的file.txt文件新增代码“aaa”…

Adobe推出20多个,企业版生成式AI定制、微调服务

3月27日&#xff0c;全球多媒体领导者Adobe在拉斯维加斯召开“Summit 2024”大会&#xff0c;重磅推出了Firefly Services。 Firefly Services提供了20 多个生成式AI和创意API服务&#xff0c;支持企业自有数据对模型进行定制、微调&#xff0c;同时可以与PS、Illustrator、Ex…

压测k8s服务资源不足怎么处理

副本 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Pod是最小的调度单元&#xff0c;而Pod的副本则是指同一个Pod的多个实例。在实际应用中&#xff0c;经常需要创建多个Pod的副本来增加应用的容错性和可伸缩性。 k8s的pod副本的负载均衡 Kubernetes中的Pod副本…

区块链食品溯源案例实现(二)

引言 随着前端界面的完成&#xff0c;我们接下来需要编写后端代码来与区块链网络进行交互。后端将负责处理前端发送的请求&#xff0c;调用智能合约的方法获取食品溯源信息&#xff0c;并将结果返回给前端。 通过前后端的整合&#xff0c;我们可以构建一个食品溯源系统&#xf…

Tensorflow CUPTI could not be loaded 解决

使用conda在指定环境安装cudatoolkit和cudnn后出现 CUPTI could not be loaded问题 conda install cudatoolkit11.0.3 conda install cudnn8.0.5.39 将本机C:\Program Files\NVIDIA Corporation\Nsight Systems xxxx\target-windows-x64 包含cupti的文件均复制到 D:\xxx\cond…

mysql高阶之(视图)

目录 视图概念 视图概念 视图是基于一个或多个表的SQL查询结果的虚拟表。视图并不实际存储数据&#xff0c;而是保存了查询的定义。当你查询视图时&#xff0c;数据库引擎会按照视图的定义执行底层的SQL查询。 &#xff08;一&#xff09;视图作用 视图的主要作用时一张表或多…

如何用Flask中的Blueprints构建大型Web应用

本文分享自华为云社区《构建大型Web应用Flask中的Blueprints指南》&#xff0c;作者&#xff1a; 柠檬味拥抱。 什么是Blueprints&#xff1f; 什么是Blueprints&#xff1f; Blueprints是Flask中的一种模式&#xff0c;用于将应用程序分解为可重用的模块。每个蓝图实际上是…

AES加密解密算法

一&#xff0c;AES算法概述 AES属于分组加密&#xff0c;算法明文长度固定为128位&#xff08;单位是比特bit&#xff0c;1bit就是1位&#xff0c;128位等于16字节&#xff09; 而密钥长度可以是128、192、256位 当密钥为128位时&#xff0c;需要循环10轮完成加密&#xff0…

鸿蒙雄起!风口就在当下,你如何抉择?

近年来&#xff0c;华为自主研发的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;引起了广泛的关注和讨论。鸿蒙系统不仅标志着华为在软件领域的一次重大突破&#xff0c;也预示着全球智能设备市场格局的潜在变化。本文将深入探讨鸿蒙系统的兴起、其在市场上的表现以及对程序员…

html页面使用@for(){},@if(){},利用jquery 获取当前class在列表中的下标

基于以前的项目进行修改优化&#xff0c;前端代码根据List元素在html里进行遍历显示 原先的代码&#xff1a; 其中&#xff0c;noticeGuide.Id是标识noticeGuide的唯一值&#xff0c;但是不是从0开始的【是数据库自增字段】 但是在页面初始化加载的时候&#xff0c;我们只想…

搜维尔科技:【应急演练】【工业仿真】救援模拟演练可视化仿真项目实施

安全救援综合演练系统是一套面向公共安全事故、预案管理、应急救援模拟演练的虚拟仿真解决方案&#xff0c;它为警察、消防以及专门的应急救援保障部门提供一个综合的应急救援培训和仿真演练平台。平台主要通过设计不同的事故模型和特定的灾难场景&#xff0c;定制不同的应急救…

鸿蒙OS开发实例:【工具类封装-emitter组件间通信】

import Emitter from ohos.events.emitter; import pasteboard from ohos.pasteboard; MyEmitterUtil 是一个针对 HarmonyOS 的事件驱动编程封装类&#xff0c;主要用于组件间的通信和数据传递。 使用要求&#xff1a; DevEco Studio 3.1.1 Release 或更高版本API 版本&…

苍穹外卖02(新增员工,重复内容异常处理器,绑定当前用户ThreadLocal,日期格式问题,分页查询,启用禁用,编辑员工)

目录 一、员工管理-新增员工 1.需求分析和设计 2.代码开发 3 功能测试 接口文档测试 前后端联调测试 4 代码完善一&#xff1a;增加异常处理器 5 代码完善二&#xff1a;绑定当前用户名 (1) 准备ThreadLocal工具类 (2) 修改拦截器代码 (3) Service里获取当前用户 小…

servlet开发详解

一、什么是servlet&#xff0c;干什么用的&#xff1f;&#xff1f;&#xff1f; tomcat作为一个web服务器&#xff0c;也称作servlet容器。servlet只有放在web服务器中才能运行&#xff0c;不能独立运行。tomcat这个容器要做三件事&#xff1a;接收请求、处理请求和响应请求。…

图形界面开发-framebuffer技术

https://www.linuxidc.com/Linux/2012-05/61024.htm 1、framebuffer 帧缓冲 帧缓冲&#xff08;framebuffer&#xff09;是Linux 系统为显示设备提供的一个接口&#xff0c;它将显示缓冲区抽象&#xff0c;屏蔽图像硬件的底层差异&#xff0c;允许上层应用程序在图形模式下直接…

SPU赋能PSI:探秘隐私集合求交核心技术与高级调度架构实践

1.SPU实现的PSI介绍 1.PSI的定义和种类 隐私集合求交&#xff08;Private Set Intersection, PSI&#xff09;是一种在密码学和安全多方计算&#xff08;MPC&#xff09;领域中的关键技术&#xff0c;允许两个或多个参与者在不泄露各自输入集合中非交集部分的前提下&#xff…