Unity之手游UI的点击和方向移动

news2024/11/26 4:47:02

一 Button的点击

1.1 新建UI -> Button

1.2  在Button上面右击添加空物体

1.3  创建脚本挂载到空物体上面

 脚本内容添加点击方法,来控制物体的显示隐藏

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.EventSystems;

public class NewMonoBehaviour : MonoBehaviour
{
   public GameObject player;//获取物体
    private bool isActivity = true;
    private void Awake()
    {
        player = GameObject.Find("Player");
    }

    // Start is called before the first frame update
    void Start()
    {
    }

    void Update()
    {
    }

    // 按钮点击事件
    public void OnMyClick()
    {
        isActivity = !isActivity;
        //显示或者隐藏
        player.SetActive(isActivity);
    }
}

1.4 按钮上On Click的位置关联空物体,并选择空物体的脚本方法OnMyClick()

1.5 运行后就可能控制物体显示隐藏了

二 方向键控制移

2.1 添加四个方向按钮

 2.2 添加一个脚本,同时挂载到四个按钮上面

2.3 编写脚本,通过按钮名字判断是点击的哪个按钮,从而判断往哪个方向移动

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.EventSystems;

public class Controll : MonoBehaviour,IPointerDownHandler, IPointerUpHandler
{
    public Rigidbody2D rbody;//获取刚体

    private void Awake()
    {
 
        rbody = GameObject.Find("Player").GetComponent<Rigidbody2D>();
    }

    void Start()
    {
      
    }

    // Update is called once per frame
    void Update()
    {
        if (isMove) {
            move();
        }        
    }

    public bool isMove = false;//是否移动

    public void OnPointerDown(PointerEventData eventData)
    {
        isMove = true;
        getButton(eventData);
   
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        isMove = false;
    }

    //获取点击的哪个按钮,方向
    private void getButton(PointerEventData eventData) {
        GameObject gameObject = eventData.selectedObject;
        Debug.Log(gameObject.name);
        switch (gameObject.name) {
            case "ButtonUp":
                moveX = 0;
                moveY = 1;
                break;
            case "ButtonLeft":
                moveX = -1;
                moveY = 0;
                break;
            case "ButtonBottom":
                moveX = 0;
                moveY = -1;
                break;
            case "ButtonRight":
                moveX = 1;
                moveY = 0;
                break;
            default:
                moveX = 0;
                moveY = 0;
                break;
        }
    }

    /**
     * 移动
     **/
    public float speed = 10f;//移动速度
    private int moveX;//方向 -1左 1右
    private int moveY;//方向 -1上 1下
    public void move() {
       
        Vector2 position = rbody.position;
        position.x += moveX * speed * Time.deltaTime;
        position.y += moveY * speed * Time.deltaTime;
        //transform.position = position;
        rbody.MovePosition(position);
    }
}

2.4 运行可以看到物体可以往上下左右方法移动

2.5 总结:

  • 脚本实现抬起按下事件的接口MonoBehaviour,IPointerDownHandler, IPointerUpHandler。
  • 通过GameObject.Find("Player").GetComponent<Rigidbody2D>(),获取物体
  • 添加变量是否移动isMove,在Update方法里面判断是否拦截移动
  • OnPointerDown 按下的时候通过eventData.selectedObject,获取点击的哪个按钮,来判断上下左右方向
  • 添加方向判断判断,按钮按下的时候赋值,int moveX;//方向 -1左 1右     int moveY;//方向 -1上 1下
  • OnPointerUp 按键抬起的时候,ivMove变为false,不再更新移动位置

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Keepalived+LVS负载均衡

Keepalived 是一个用于实现高可用性的开源软件&#xff0c;它基于 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;协议&#xff0c;允许多台服务器协同工作&#xff0c;以确保在某个服务器出现故障时服务的连续性。Keepalived 的核心思想是将多台服务器配置成…

剑指offer(C++)-JZ67:把字符串转换成整数atoi(算法-模拟)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 写一个函数 StrToInt&#xff0c;实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。…

8种LED显示屏的安装方式

LED显示屏可以根据不同的应用需求和场地条件采用多种安装方式。 LED显示屏的常见安装方式包括&#xff1a; 立柱式&#xff1a;一般多用于大厦门口、大楼大厅等户外场所&#xff0c;可以抵抗风雨侵蚀&#xff0c;更适用于户外广告牌的使用。安装方式有单立柱安装、双立柱安装和…

联合matlab和Arcgis进行netcdf格式的雪覆盖数据的重新投影栅格

图片摘要 本专栏目的是将netcdf格式的雪覆盖数据进行重新投影&#xff0c;需要使用的工具包括matlab和Arcgis&#xff0c;下面进入正题。 1.数据的下载与读取---matlab 最近我需要读取北半球的冰雪覆盖数据&#xff0c;下载的是MODIS/Terra Snow Cover Monthly L3 Global 0.0…

CPU的各种存储器接口

设计电路时往往绕不开要做一些内存或者外存的接口设计&#xff0c;比如接SDRAM、NAND FLASH等等。这些无非是为了扩展原来CPU的内存或者外存资源&#xff0c;方便运行更大的系统。比较常见的就是一些Linux的核心板。I.MX6这个就是很多产品设计中使用的。 那么&#xff0c;在这些…

uniapp 可输入可选择的........框

安装 uniapp: uni-combox地址 vue页面 <uni-combox :border"false" input"selectname" focus"handleFocus" blur"handleBlur" :candidates"candidates" placeholder"请选择姓名" v-model"name"&g…

基于JAVA+SpringBoot+Vue+协同过滤算法+爬虫的前后端分离的租房系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着城市化进程的加快…

Linux下运行Jmeter压测

一、在Linux服务器先安装SDK 1、先从官网下载jdk1.8.0_131.tar.gz&#xff0c;再从本地上传到Linux服务器 2、解压&#xff1a;tar -xzf jdk1.8.0_131.tar.gz&#xff0c;生成文件夹 jdk1.8.0_131 3、在/usr/目录下创建java文件夹&#xff0c;再将 jdk1.8.0_131目录移动到/u…

2023 Google 开发者大会:Web平台新动向

目录 前言一、Open in WordPress playground二、WebGPU三、新的核心 Web 指标INP四、Webview1、Custom Tabs2、JavaScriptEngine 五、Passkeys六、View Transitions API七、Google Chrome开发者工具优化1、覆盖HTTP的响应标头2、改变stack trance 八、Baseline总结 前言 在前不…

会员管理系统实战开发教程07-会员消费

上一篇我们讲解了会员的充值&#xff0c;会员消费和充值的逻辑类似&#xff0c;也是先记录消费金额&#xff0c;然后给会员卡余额减去消费金额&#xff0c;有个逻辑是如果余额不足需要提示信息。 1 创建消费记录表 我们先需要创建表来保存会员的消费记录信息&#xff0c;打开…

讲座2:神经编码与解码

视频来源&#xff1a; 1、面向类脑视觉的生物视觉编码机制和模型&#xff08;余肇飞&#xff09;https://www.bilibili.com/video/BV1rR4y1K7KW/?spm_id_from333.337.search-card.all.click&vd_source897075bbdd61e45006d749612d05a2ab 2、基于视觉编解码的深度学习类脑机…

7.idea 使用 docker 构建 spring boot 项目

本文目录 step 1&#xff1a;编写 Dockerfile 文件step 2&#xff1a;pom.xml 中添加如下配置step 3&#xff1a;maven仓库 setting.xml <servers> 模块下&#xff0c;添加访问自定义仓库的用户名&#xff0c;密码step 4&#xff1a;使用 maven命令开始 clean、packagest…

蓝牙核心规范(V5.4)10.1-BLE 入门笔记(1)

ble 规范 深入了解蓝牙LE需要熟悉相关的规格。蓝牙LE的架构、程序和协议由一项关键规范完全定义,称为蓝牙核心规范。产品如何使用蓝牙以实现互操作性由两种特殊类型称为配置文件和服务的规范集合所涵盖。图1展示了BLE规范类型及其相互关系。 1.1 蓝牙核心规范 蓝牙核心规范是…

测试行业面临的问题及RunnerGo在工具层面如何解决的

RunnerGo致力于打造成一款企业级全栈测试平台&#xff0c;旨在实现产品生命周期的闭环管理&#xff0c;帮助企业在整个产品生命周期中确保质量、降低风险&#xff0c;并提供卓越的用户体验。采用了较为宽松的Apache-2.0 license开源协议&#xff0c;方便志同道合的朋友一起为开…

VEX —— Noise and Randomness

目录 Noise generators Random number generators Noise generators 噪波生成函数&#xff0c;noise、wnoise、vnoise、onoise、snoise、anoise&#xff1b;每一个函数表示生成噪波的不同算法&#xff1b; 每个噪波相对成本&#xff1a; Perlin noise&#xff08;noise&#…

五十一.DQN原理和实战

值函数近似法 经典强化学习方法的共同点是它们的求解过程都要维持一个值函数表格&#xff0c;策略函数也可以通过一个表格来表示&#xff0c;所以也称这些方法为表格法。表格法要求状态空间和动作空间都是离散的&#xff0c;这类强化学习任务只占所有强化学习任务的很小一部分…

Spring Bean的生命周期和扩展点源码解读

目录 1 Bean的生命周期2 Bean的定义、注册及创建过程3 Bean的注入过程4 Bean的销毁过程5 Bean的生命周期 1 Bean的生命周期 在Spring框架中&#xff0c;Bean对象也有着它的生命周期&#xff0c;然而对于Bean对象的生命周期&#xff0c;我们并不是很清楚&#xff0c;因为Spring帮…

学习pytorch10 神经网络-最大池化的作用

神经网络-最大池化的作用 官方文档参数说明运算演示公式最大池化 代码code 1执行结果code2执行结果 B站小土堆学习视频 https://www.bilibili.com/video/BV1hE411t7RN?p19&spm_id_frompageDriver&vd_source9607a6d9d829b667f8f0ccaaaa142fcb 官方文档 https://pytorch…

UML基础与应用之面向对象

UML&#xff08;Unified Modeling Language&#xff09;是一种用于软件系统建模的标准化语言&#xff0c;它使用图形符号和文本来描述软件系统的结构、行为和交互。在面向对象编程中&#xff0c;UML被广泛应用于软件系统的设计和分析阶段。本文将总结UML基础与应用之面向对象的…

34.KMP算法,拒绝暴力美学

概述 今天我们来聊一聊字符串匹配的问题。 比如有字符串str1 “豫章故那&#xff0c;洪都新府。星分翼轸&#xff0c;地接衡庐。襟三江而带五湖&#xff0c;控蛮荆而引瓯越。”&#xff0c;字符串str2 “襟三江而带五湖”。 现要判断str1是否含有str2&#xff0c;如果有则的…