Unity笔记(13):Android Movement of Characters[2D]

news2024/12/23 10:46:37

目录

1、搭建一个测试场景

2、建立画布设置移动按钮

3、编写脚本绑定按钮

AxisTouchButton :
ButtonHandler :

4、编写脚本绑定角色

原来的按键移动

修改为触摸按钮

5、导出为APK文件,手机下载进行测试


 

1、搭建一个测试场景

2、建立画布设置移动按钮

 

 

3、编写脚本绑定按钮

脚本资源来自:

 因为资源已经弃用了,资源商店搜是搜不到的。但是我之前下载过,所以有些还能用。

本次学习只需要以下代码即可:

左右移动按钮挂载同一个脚本:

AxisTouchButton :

using System;
using UnityEngine;
using UnityEngine.EventSystems;

namespace UnityStandardAssets.CrossPlatformInput
{
	public class AxisTouchButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
	{
		// designed to work in a pair with another axis touch button
		// (typically with one having -1 and one having 1 axisValues)
		public string axisName = "Horizontal"; // The name of the axis
		public float axisValue = 1; // The axis that the value has
		public float responseSpeed = 3; // The speed at which the axis touch button responds
		public float returnToCentreSpeed = 3; // The speed at which the button will return to its centre

		AxisTouchButton m_PairedWith; // Which button this one is paired with
		CrossPlatformInputManager.VirtualAxis m_Axis; // A reference to the virtual axis as it is in the cross platform input

		void OnEnable()
		{
			if (!CrossPlatformInputManager.AxisExists(axisName))
			{
				// if the axis doesnt exist create a new one in cross platform input
				m_Axis = new CrossPlatformInputManager.VirtualAxis(axisName);
				CrossPlatformInputManager.RegisterVirtualAxis(m_Axis);
			}
			else
			{
				m_Axis = CrossPlatformInputManager.VirtualAxisReference(axisName);
			}
			FindPairedButton();
		}

		void FindPairedButton()
		{
			// find the other button witch which this button should be paired
			// (it should have the same axisName)
			var otherAxisButtons = FindObjectsOfType(typeof(AxisTouchButton)) as AxisTouchButton[];

			if (otherAxisButtons != null)
			{
				for (int i = 0; i < otherAxisButtons.Length; i++)
				{
					if (otherAxisButtons[i].axisName == axisName && otherAxisButtons[i] != this)
					{
						m_PairedWith = otherAxisButtons[i];
					}
				}
			}
		}

		void OnDisable()
		{
			// The object is disabled so remove it from the cross platform input system
			m_Axis.Remove();
		}


		public void OnPointerDown(PointerEventData data)
		{
			if (m_PairedWith == null)
			{
				FindPairedButton();
			}
			// update the axis and record that the button has been pressed this frame
			m_Axis.Update(Mathf.MoveTowards(m_Axis.GetValue, axisValue, responseSpeed * Time.deltaTime));
		}


		public void OnPointerUp(PointerEventData data)
		{
			m_Axis.Update(Mathf.MoveTowards(m_Axis.GetValue, 0, responseSpeed * Time.deltaTime));
		}
	}
}

左边设置

右边设置

 

 

 跳跃按钮挂载这个脚本:

ButtonHandler :

using System;
using UnityEngine;

namespace UnityStandardAssets.CrossPlatformInput
{
    public class ButtonHandler : MonoBehaviour
    {

        public string Name;

        void OnEnable()
        {

        }

        public void SetDownState()
        {
            CrossPlatformInputManager.SetButtonDown(Name);
        }


        public void SetUpState()
        {
            CrossPlatformInputManager.SetButtonUp(Name);
        }


        public void SetAxisPositiveState()
        {
            CrossPlatformInputManager.SetAxisPositive(Name);
        }


        public void SetAxisNeutralState()
        {
            CrossPlatformInputManager.SetAxisZero(Name);
        }


        public void SetAxisNegativeState()
        {
            CrossPlatformInputManager.SetAxisNegative(Name);
        }

        public void Update()
        {

        }
    }
}

跳跃脚本设置

 

4、编写脚本绑定角色

原来的按键移动

using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using UnityEngine;

public class Char : MonoBehaviour
{
    private Rigidbody2D rb;
    private float moveSpeed;
    private float dirX;
    private bool facingRight = true;
    private Vector3 localScale;
    
    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        localScale = transform.localScale;
        moveSpeed = 5f;
    }

    private void Update()
    {
        dirX = Input.GetAxisRaw("Horizontal") * moveSpeed;

        if (Input.GetButtonDown("Jump") && rb.velocity.y == 0)
            rb.AddForce(Vector2.up * 700f);
    }

    private void FixedUpdate()
    {
        rb.velocity = new Vector2(dirX, rb.velocity.y);
    }

    private void LateUpdate()
    {
        if (dirX > 0)
            facingRight = true;
        else if (dirX < 0)
            facingRight = false;

        if (((facingRight) && (localScale.x < 0)) || ((!facingRight) && (localScale.x > 0)))
            localScale.x *= -1;
        transform.localScale = localScale;
    }
}

修改为触摸按钮

using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;

public class Character : MonoBehaviour
{
    private Rigidbody2D rb;
    private float moveSpeed;
    private Animator anim;
    private float dirX;
    private bool facingRight = true;
    private Vector3 localScale;
    
    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
        localScale = transform.localScale;
        moveSpeed = 15f;
    }

    private void Update()
    {
        dirX = CrossPlatformInputManager.GetAxisRaw("Horizontal") * moveSpeed;

        if (CrossPlatformInputManager.GetButton("Jump"))
        {
            // if ( && rb.velocity.y == 0)
            rb.AddForce(Vector2.up * 5f);
            anim.SetBool("isjump", true);
        }
           
        if (rb.velocity.y == 0)
            anim.SetBool("isjump", false);
    }

    private void FixedUpdate()
    {
        rb.velocity = new Vector2(dirX, rb.velocity.y);
    }

    private void LateUpdate()
    {
        if (dirX > 0)
            facingRight = true;
        else if (dirX < 0)
            facingRight = false;

        if (((facingRight) && (localScale.x < 0)) || ((!facingRight) && (localScale.x > 0)))
            localScale.x *= -1;
        transform.localScale = localScale;
    }
}

5、导出为APK文件,手机下载进行测试

 

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

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

相关文章

【正点原子FPGA连载】第二十四章 双路高速DA实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十四章 双路…

【EXCEL拦路虎】解决一些常遇到的excel问题

【问题一】 解决.CSV文件转为excel文件乱码问题 方法二&#xff1a;参考 解决Excel打开CSV文件中文乱码问题 【问题二】 解决内容过长后面的空白表格被前一列的字符填满&#xff0c;&#xff08;内容过长就会覆盖前后的单元格&#xff09;&#xff0c;如下图&#xff1a; 解决…

vue 新增枚举类型栏位

dict-tag 标签新增枚举类型栏位 新增栏位数据字典 新增字典命名规范为coin_表字段名 新增字典枚举数据&#xff0c;key value Value标签格式为 值-key 如 1-成交 分别对应的新增为两张表&#xff1a; Sys_dict_type --字典类型 Sys_dict_data --字典数据 前端栏位 &l…

数据库学习

数据是描述事务的符号记录&#xff0c;包括数字、文字、图像、音频等&#xff0c;以“记录”的形式按统一的格式进行存储&#xff1b;表将不同的记录组织在一起&#xff0c;用来存储具体的数据&#xff1b;数据库是表的集合&#xff0c;是存储数据的仓库&#xff0c;它以一定的…

基于粒子群算法的电力系统无功优化研究(IEEE14节点)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;⛳️⛳️⛳️ ​ 目录 1 概述 2 无功优化数学模型 3 …

剑指 Offer 15. 二进制中1的个数

一、题目描述 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为 汉明重量).&#xff09;。 二、示例 示例 1&#xff1a; 输入&#xff1a;n 11 (控制…

基于SSM的邮箱客户端的设计与实现

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 选题及意义 1 1.2 邮箱发展现状 1 1.2.1开源邮件系统 2 1.2.2国外商业邮件系统 2 1.2.3国内商业邮件系统 2 1.3研究内容 4 第2章 相关技术的理论概述 5 2.1 JSPServlet技术优势 5 2.2Mysql数据库的介绍 6 2.3 tomcat服务器介绍 6 2…

mmdetection3d nuScenes (持续更新)

Mmdetection3d集成了大量3D深度学习算法&#xff0c;其中很大一部分可以在智能驾驶nuScenes数据集上运行。在算法应用nuScenes数据之前&#xff0c;mmdetection3d提供了相应的预处理程序。关于nuScenes的详细介绍请参考本博客之前的文章nuScenes数据集详细介绍_Coding的叶子的博…

react+node.js+mysql 前后端分离项目 宝塔面板 部署到腾讯云服务器

目录一. 前端项目部署1.登录宝塔面板并安装环境依赖2. 打包上传&#xff0c;部署前端项目3.端口放行二. 后端项目部署1.上传后端项目2. PM2中添加项目三. mysql1.宝塔面板 添加数据库2.导入sql文件一. 前端项目部署 1.登录宝塔面板并安装环境依赖 命令行第一行输入刚才复制的内…

你是否还记得有一款游戏叫做“魔塔”?

目录 前言 正文 游戏介绍&#xff1a; 游戏开发制作流程 1.收集素材 2.创建攻击函数 2.1 定义两个对象&#xff08;主角和怪物&#xff09; 2.2 函数输出为【0】表示打不过&#xff0c;胜利输出受损生命值&#xff0c;设置 cancel 可以撤销本次战斗即回到之前状态 2.…

pinia安装使用

pinia中文文档 目录 一.pinia简介 二. pinia安装 三.pinia使用 1.main.js中创建pinia实例 2.创建store状态库 定义state state的读写 state响应式解构 state的修改 Getters的使用 Pinia中Store的互相调用 一.pinia简介 Pinia是vue生态里Vuex的替代者&#xff0c;一个…

MySQL笔记【面试】

MySQL笔记【面试】前言推荐MySQL笔记最后前言 以下内容源自A minor 仅供学习交流使用 推荐 MySQL MySQL笔记 【MySQL】基础使用&#xff08;一&#xff09;&#xff1a;支持的数据类型 【MySQL】基础使用&#xff08;二&#xff09;&#xff1a;常用 SQL 语句大全 【MyS…

推荐系统-概述:基本架构

提纲 过去八九年在广告、生活服务、电商等领域从事大数据及推荐系统相关工作&#xff0c;近来打算对过去的工作做一个系统性的梳理。一方面帮自己查缺补漏、进行更深入的学习&#xff1b;另一方面也希望能通过博客结交同好&#xff0c;增进交流。 这一博客系列以介绍推荐系统为…

Arduino开发实例-旋转编码器RGB-LED调光

旋转编码器RGB-LED调光 在本文中,将使用 Arduino 和旋转编码器进行 RGB LED 颜色控制。 我们将旋转旋转编码器来分配值。 红色、绿色和蓝色将合并以显示基于该值的全新颜色。 在这里,使用具有红色、绿色和蓝色的单 RGB 颜色 LED,也可以使用长 RGB LED 灯条。 此外,还可以使…

「Redis」02 Redis中的数据类型(含Redis6.0:Bitmaps、HyperLogLog、Geospatial)

笔记整理自【尚硅谷】Redis 6 入门到精通 超详细 教程 Redis——Redis中的数据类型 0. 键 (key) 操作 keys *&#xff1a;查看当前库所有 keyexists key&#xff1a;判断某个 key 是否存在type key&#xff1a;查看你的 key 是什么类型del key &#xff1a;删除指定的 key 数…

[附源码]Python计算机毕业设计Django工程施工多层级管理架构

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

VMware的安装、配置及其Linux的安装、简单配置

安装VMware 1、找到下载好的安装包&#xff0c;双击 2、点击下一步 3、勾选 我接受许可协议中的条款 4、选择合适的路径安装 5、取消勾选项&#xff0c;如图所示 6、下一步 7、安装 8、等待&#xff08;等待半分钟左右&#xff09; 8、点击许可证 9、复制下面其中的密码 key…

centos7磁盘扩容(虚拟机Mac m1)

为了安装HDP3.1.4(Ambari2.7.4)弄了三台虚拟机&#xff0c;但安装完mysql和操作完前期准备后&#xff0c;上传ambari&#xff0c;HDP&#xff0c;HDP-UTILS安装包时&#xff0c;磁盘居然不够了&#xff0c;又是一顿折腾...... 第一种在原来磁盘上扩大存储 1.虚拟机磁盘大小设…

借助云的力量,重塑企业的现在和未来——亚马逊云科技re:Invent

在2022亚马逊云科技re:Invent全球大会的第二天&#xff0c;亚马逊云科技首席执行官Adam Selipsky发表了“如何借助云的力量&#xff0c;在未知领域抓住机遇并茁壮成长”的主题演讲。在两个小时的演讲中&#xff0c;Adam重点围绕数据、安全、计算性能和行业应用等4个主题发布了多…

Python基础——分支与循环

Python基础——分支与循环条件表达式if-else1.运算结果2.语法3.举例1.用分支语句实现求绝对值2.多分枝语句4.常用的比较符号5.常用的条件符合符号注意&#xff1a;条件表达式if-else 1.运算结果 布尔型 ture1 false0 2.语法 python 用缩进区分功能块所以缩进是不可一丢掉的…