学更好的别人,

做更好的自己。

——《微卡智享》

本文长度为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实现摇杆控制相关推荐

  1. Unity3D中使用Leap Motion进行手势控制

    Leap Motion作为一款手势识别设备,相比于Kniect,优点在于精确度. 在我的毕业设计<场景漫游器>的开发中,Leap Motion的手势控制作为重要的一个环节.以此,谈谈开发中 ...

  2. 【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  3. 【虚拟仿真】Unity3D中实现控制物体的旋转、移动、缩放

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  4. 【工具篇】Joystick Pack摇杆使用Unity多场景使用摇杆

    目录 一:导入插件 二:配置插件 1.编写摇杆控制类 2.设置摇杆参数

  5. Unity3D中需要的单词

    Unity3D下分8个菜单 分别是File(文件)Edit(编辑)Assets(资源) GameObject(游戏对象)  Component(组件)Terrain(地形) Window(窗口) He ...

  6. Unity3D中需要的英文。

    MR.C编制 这本书 主要对 unity3d的所有菜单与参数进行了翻译 并逐个讲解 来帮助大家初步的认识Unity3D的每个命令的作用 Unity3D下分8个菜单栏(翻译的不一定准) 分别是File( ...

  7. 1.0 最详细EasyTouch触摸摇杆 控制物体移动

    一般游戏用的EasyTouch插件的功能 就两三种比较少,把插件全导入占用内存太大,所以本文对摇杆部分进行了提验 其他部分都可以照样提出来用. 1.主相机设置 屏幕分辩 16:9 2 创建一块Plan ...

  8. 摇杆控制方向原理_医用无油空压机的送料作用及工作原理

    医用纯无油空压机可以在不同的场合运用,在化工生产中主要用来进行工艺控制,或把密闭管道中的物料由一个地方输送到另一个地方,下面我们一起了解一下吧. 目前用得较多的医用纯无油空压机主要有:往复医用纯无油空 ...

  9. unity3d中让物体显示和隐藏

    unity3d中让物体显示和隐藏的方法 gameObject.renderer.enabled //是控制一个物体是否在屏幕上渲染或显示  而物体实际还是存在的 仅仅是想当于隐身 而物体本身的碰撞体还 ...

最新文章

  1. 字节跳动内部学习资料泄露!kafka入门教程
  2. win7开机动画_优化win7系统 让系统运行更顺畅
  3. 在spring boot中集成Swagger
  4. c#4.0新特性之一: Dynamic Lookup (1)
  5. react 按照一级路由 分包加载
  6. 在一个div里,列表样式图片进行float,实现水平排序
  7. 离线使用iPhone SDK文档的方法
  8. 系统架构性能优化思路
  9. 狂野飙车9手游服务器维护,狂野飙车9_狂野飙车9公益服_变态版狂野飙车9_狂野飙车9官网_9917游戏...
  10. 剑指Offer 和为S的两个数字
  11. tornado+websocket+mongodb实现在线视屏文字聊天
  12. dp hp oracle 备份软件_HP DP备份软件设置-(38465)
  13. 产品的思维与技术的思维差异
  14. 云南民族大学计算机网络期末试卷,云南民族大学附中2018届高三上学期期末考试物理试卷【附答案】...
  15. 电子招标投标系统 —采购招投标管理一体化系统-
  16. 【20191001】国庆七天长假安排
  17. [Android源码分析]L2CAP的bind分析以及psm和cid的介绍和实现
  18. 从零开始编写一个上位机(串口助手)QT Creator + C++
  19. Zhong__Jenkins安装和使用
  20. 使用 rr 进行debug

热门文章

  1. 3D视觉识别案例:3D无序棒料抓取,阀体圆环上下料,电机定子上料
  2. 【互联网金融】(学习笔记)2、互联网金融概述
  3. 【验证码二】使用验证码
  4. 实现手机root的心路历程之完成Oppo R7s root功能-亲测有用
  5. Vue | 18.本地应用 - 小黑记事本
  6. 360 se html document 广告,意派Epub360丨父亲节借势营销H5,哪一个打动了你?
  7. YII2.0 接口开发步骤
  8. cherrytree怎么导出html,CherryTree一个功能强大的便笺记事本 | MOS86
  9. 基于ssm框架的毕业设计管理系统毕业设计源码211633
  10. 关于SNS社区与行业电子商务结合一些看法