Unity3D中使用Joystick Pack实现摇杆控制
学更好的别人,
做更好的自己。
——《微卡智享》
本文长度为2342字,预计阅读6分钟
前言
花了几个小时重新根据Unity3D的初学者教程做了一个简单的Demo,做完后确实对新人来说是个比较不错的学习项目,项目中控制人物移动是用的键盘的方向键,就想如果在手机平台的话,实现摇杆控制方向,类似于王者荣耀那样的效果,所以就顺便学习了Joystick Pack组件。今天这篇就是介绍Joystick Pack的简单使用。
实现效果
上面的视频就是用了Joystick Pack后实现的移动效果,键盘和摇杆可以同时操作,逻辑是一样的。
Joystick Pack
微卡智享
Joystick Pack虚拟操纵杆在Unity的资源商店中可以直接获取,是完全的免费资源,可以直接在Unity3D资源商店中直接获取。
游戏项目
微卡智享
视频中的游戏项目就是在Unity Hub学习目录下的John Lemon`s Haunted Jaunt:3D Beginner。
在Learn.unity.com中找到这个项目后,跟着教程一步一步的创建和操作完成的。
建议初学者都可以都用这个试一下,做完后对整个项目会有一个简单的了解。接下来就是我们这篇的重点了,主要讲Joystick Pack的使用。
Joystick Pack使用
微卡智享
01
Joystick Pack导入
首先要在文章开始的Unity3d的资源商店中把Joystick Pack已经添加到我的资源中。
然后在项目的窗口---包管理器--My Assiets中找到Joystick Pack,把这个包下载并导入。
导入后Assets中就会出现Joystick Pack的文件夹了。
02
布局设置
在我们的Canvas的2D面板中创建一个空物体,改名为Operator(代表控制),然后将右边Joystick Pack--Prefabs--Variable Joystick的预制件拖入到Operator下,另一个btnFinish是一个操作按钮,用于运行中点击退出游戏用的,所以这里可以忽略。
然后点击Variable Joystick在右边的检查器中调整位置及布局,这个可以自己设置位置和大小。
到这里,布局就完成了,接下来就是怎么实现摇杆控制人物移动。
03
代码控制
点击人物后,可以看到右边的检查器中绑定的Player Movement的脚本,这个脚本就是控制人物移动的,双击这个脚本后我们开始进行代码编辑。
增加一个VariableJoystick,属性的public,这样可以外部赋值。
然后在FixedUpdate()的方法里,添加上面的两行代码,这里说明一下,horizontal是水平移动的值,vertical是垂直移动的值,原代码中通过Input.GetAxis的方法获取到键盘移动的值,我们这里的原理是:
当判断horizontal和vertical的值为0时,说明没有按键盘的方向键,这时我们再获取Variable Joystick对应的horizontal和vertical的值。这样就可以保证键盘和摇杆都可以操作,当然键盘的优先级更后,当按下键盘方向时,同时操作摇杆是不起作用的。
PlayerMovement的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerMovement : MonoBehaviour
{public float turnSpeed = 20f;public VariableJoystick variableJoystick;Vector3 m_Movement;Quaternion m_Rotation = Quaternion.identity;Animator m_Animator;Rigidbody m_Rigidbody;AudioSource m_AudioSource;// Start is called before the first frame updatevoid Start(){m_Animator = GetComponent<Animator>();m_Rigidbody = GetComponent<Rigidbody>();m_AudioSource = GetComponent<AudioSource>();}void FixedUpdate(){float horizontal = Input.GetAxis("Horizontal");float vertical = Input.GetAxis("Vertical");//判断如果没有输入再获取摇杆的值horizontal = horizontal == 0 ? variableJoystick.Horizontal : horizontal;vertical = vertical == 0 ? variableJoystick.Vertical : vertical;m_Movement.Set(horizontal, 0f, vertical);m_Movement.Normalize();//方法接受两个 float 参数,并返回布尔值;//如果两个 float 数值大致相等,则返回 true,//否则返回 false。bool hasHorizontalInput = !Mathf.Approximately(horizontal, 0f);bool hasVerticalINput = !Mathf.Approximately(vertical, 0f);//根据水平和垂直数值,如果有一个移动就代表着行走bool isWalking = hasHorizontalInput || hasVerticalINput;m_Animator.SetBool("IsWalking", isWalking);if (isWalking){if (!m_AudioSource.isPlaying){m_AudioSource.Play();}}else{m_AudioSource.Stop();}//RotateTowards 接受四个参数:前两个是 Vector3,分别是旋转时背离和朝向的矢量。//接下来的两个参数是起始矢量和目标矢量之间的变化量:首先是角度变化(以弧度为单位),然后是大小变化。Vector3 desiredForward = Vector3.RotateTowards(transform.forward,m_Movement, turnSpeed * Time.deltaTime, 0f);m_Rotation = Quaternion.LookRotation(desiredForward);}void OnAnimatorMove(){//Animator 的 deltaPosition 是由于可以应用于此帧的根运动而导致的位置变化m_Rigidbody.MovePosition(m_Rigidbody.position + m_Movement * m_Animator.deltaPosition.magnitude);m_Rigidbody.MoveRotation(m_Rotation);}
}
04
绑定Joystick Pack
完成上面的代码后,我们把脚本保存,这样上面创建的Variable Joystick就会显示在PlayerMovement的检查器中了。
将Variable Joystick的组件拖到右下角Player Movement中定义的Variable Joystick中就实现绑定。
完成上面的步骤后,Joystick Pack摇杆控制就简单的实现了。
上面的是视频中的动图效果
完
扫描二维码
获取更多精彩
微卡智享
「 往期文章 」
Unity3D网络通讯(六)-- UnityWebRequest实现WebService通讯
Unity3D网络通讯(五)--Socket通讯之Udp通讯
Unity3D网络通讯(四)--Socket通讯之Tcp通讯
Unity3D中使用Joystick Pack实现摇杆控制相关推荐
- Unity3D中使用Leap Motion进行手势控制
Leap Motion作为一款手势识别设备,相比于Kniect,优点在于精确度. 在我的毕业设计<场景漫游器>的开发中,Leap Motion的手势控制作为重要的一个环节.以此,谈谈开发中 ...
- 【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...
- 【虚拟仿真】Unity3D中实现控制物体的旋转、移动、缩放
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...
- 【工具篇】Joystick Pack摇杆使用Unity多场景使用摇杆
目录 一:导入插件 二:配置插件 1.编写摇杆控制类 2.设置摇杆参数
- Unity3D中需要的单词
Unity3D下分8个菜单 分别是File(文件)Edit(编辑)Assets(资源) GameObject(游戏对象) Component(组件)Terrain(地形) Window(窗口) He ...
- Unity3D中需要的英文。
MR.C编制 这本书 主要对 unity3d的所有菜单与参数进行了翻译 并逐个讲解 来帮助大家初步的认识Unity3D的每个命令的作用 Unity3D下分8个菜单栏(翻译的不一定准) 分别是File( ...
- 1.0 最详细EasyTouch触摸摇杆 控制物体移动
一般游戏用的EasyTouch插件的功能 就两三种比较少,把插件全导入占用内存太大,所以本文对摇杆部分进行了提验 其他部分都可以照样提出来用. 1.主相机设置 屏幕分辩 16:9 2 创建一块Plan ...
- 摇杆控制方向原理_医用无油空压机的送料作用及工作原理
医用纯无油空压机可以在不同的场合运用,在化工生产中主要用来进行工艺控制,或把密闭管道中的物料由一个地方输送到另一个地方,下面我们一起了解一下吧. 目前用得较多的医用纯无油空压机主要有:往复医用纯无油空 ...
- unity3d中让物体显示和隐藏
unity3d中让物体显示和隐藏的方法 gameObject.renderer.enabled //是控制一个物体是否在屏幕上渲染或显示 而物体实际还是存在的 仅仅是想当于隐身 而物体本身的碰撞体还 ...
最新文章
- 字节跳动内部学习资料泄露!kafka入门教程
- win7开机动画_优化win7系统 让系统运行更顺畅
- 在spring boot中集成Swagger
- c#4.0新特性之一: Dynamic Lookup (1)
- react 按照一级路由 分包加载
- 在一个div里,列表样式图片进行float,实现水平排序
- 离线使用iPhone SDK文档的方法
- 系统架构性能优化思路
- 狂野飙车9手游服务器维护,狂野飙车9_狂野飙车9公益服_变态版狂野飙车9_狂野飙车9官网_9917游戏...
- 剑指Offer 和为S的两个数字
- tornado+websocket+mongodb实现在线视屏文字聊天
- dp hp oracle 备份软件_HP DP备份软件设置-(38465)
- 产品的思维与技术的思维差异
- 云南民族大学计算机网络期末试卷,云南民族大学附中2018届高三上学期期末考试物理试卷【附答案】...
- 电子招标投标系统 —采购招投标管理一体化系统-
- 【20191001】国庆七天长假安排
- [Android源码分析]L2CAP的bind分析以及psm和cid的介绍和实现
- 从零开始编写一个上位机(串口助手)QT Creator + C++
- Zhong__Jenkins安装和使用
- 使用 rr 进行debug
热门文章
- 3D视觉识别案例:3D无序棒料抓取,阀体圆环上下料,电机定子上料
- 【互联网金融】(学习笔记)2、互联网金融概述
- 【验证码二】使用验证码
- 实现手机root的心路历程之完成Oppo R7s root功能-亲测有用
- Vue | 18.本地应用 - 小黑记事本
- 360 se html document 广告,意派Epub360丨父亲节借势营销H5,哪一个打动了你?
- YII2.0 接口开发步骤
- cherrytree怎么导出html,CherryTree一个功能强大的便笺记事本 | MOS86
- 基于ssm框架的毕业设计管理系统毕业设计源码211633
- 关于SNS社区与行业电子商务结合一些看法