前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Unity3D NGUI屏幕摇杆

Unity3D NGUI屏幕摇杆

作者头像
立羽
发布于 2023-08-24 05:10:29
发布于 2023-08-24 05:10:29
21800
代码可运行
举报
文章被收录于专栏:Unity3d程序开发Unity3d程序开发
运行总次数:0
代码可运行

NGUI下增加一个Empty对象,重命名为Joystick。在它本身上加载UIAnchor脚本,设置好它的大小。Joystick的子集中增加俩个新的Empty,命名为Background,Thumb。所有设置如下所示。

Thumb上增加box collier,为后期屏幕射线能够打在Background的区域。然后加上NGUIJoystick脚本。拖拽Thumb产生OnDrag,如下代码所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void OnDrag (Vector2 delta) {
		if (enabled && gameObject.activeInHierarchy) {//当前对象被启用且对下在层次视图中处于激活状态
			UICamera.currentTouch.clickNotification = UICamera.ClickNotification.BasedOnDelta;//得到UICamera脚本组件中的BasedDelta变量
			
			Ray ray = UICamera.currentCamera.ScreenPointToRay (UICamera.currentTouch.pos);//得到从UI摄像机发出的到触摸点的一条射线
			float dist = 0f;//定义射线长度变量
			
			if (mPlane.Raycast (ray, out dist)) {//如果射线发生碰撞
				Vector3 currentPos = ray.GetPoint (dist);//得到射线上距离dist远处的一个点
				Vector3 offset = currentPos - mLastPos;//计算当前位置和上一次位置的偏移量
				mLastPos = currentPos;//赋值

				if (offset.x != 0f || offset.y != 0f) {//当偏移量的x或y分量不为零时
					offset = transform.InverseTransformDirection (offset);//对偏移量进行世界坐标系到本地坐标系的转换
					offset.Scale (scale);//对偏移量进行缩放
					offset = transform.TransformDirection (offset);//对偏移量进行本地坐标系到世界坐标系的转换
				}
				
				offset.z = 0;//赋值
				transform.position += offset;//改变对象位置
				
				float length = transform.localPosition.magnitude;//得到当前对象本地位置向量的模
				 
				if (length > radius) {//当长度大于虚拟摇杆的背景半径时
					transform.localPosition = Vector3.ClampMagnitude (transform.localPosition, radius);//计算当前对象的本地位置
				}

				position = new Vector2((transform.localPosition.x-center.x)/radius,(transform.localPosition.y-center.y)/radius);//将二维向量转换成z默认为0的三维向量
			}
		}
	}

主要流程如下所示

下面代码主角控制器调用,得到joystick的位置,计算出移动向量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (Input.GetAxis("Horizontal") == 0 && Input.GetAxis("Vertical") == 0)
        {//当不是用键盘控制时(在手机屏幕上通过触控控制时)
            directionVector = new Vector3(joystick.position.x, 0, joystick.position.y);//计算角色通过虚拟操纵杆来控制时的移动方向
        }
        if (directionVector != Vector3.zero)
        {
            float directionLength = directionVector.magnitude;//计算移动方向向量的长度
            directionVector = directionVector / directionLength;//计算单位向量,这两句相当于directionVector.normalized,但这两句计算单位向量比向量的规格化更快

            directionLength = Mathf.Min(0.4f, directionLength);//确保向量长度不超过1
            //使向量到达边界值更敏感,到达中间值时更迟钝,这样使得使用操纵杆时更容易控制减速
            directionLength = directionLength * directionLength;
            //计算移动方向向量
            directionVector = directionVector * directionLength;
        }
        directionVector.y = 0;
        m_charCon.Move(m_trans.TransformDirection(directionVector));//计算移动方向

源码下载

http://download.csdn.net/detail/luoyikun/9047769

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Unity3D中使用Joystick Pack实现摇杆控制
花了几个小时重新根据Unity3D的初学者教程做了一个简单的Demo,做完后确实对新人来说是个比较不错的学习项目,项目中控制人物移动是用的键盘的方向键,就想如果在手机平台的话,实现摇杆控制方向,类似于王者荣耀那样的效果,所以就顺便学习了Joystick Pack组件。今天这篇就是介绍Joystick Pack的简单使用。
Vaccae
2020/10/27
5.7K0
Unity3D中使用Joystick Pack实现摇杆控制
【Unity3D】官方自带人物控制器研究
5.0.0f4版本的官方自带资源包http://pan.baidu.com/s/1o8Ujrxo
恬静的小魔龙
2020/03/10
4.6K0
Unity基础(22)-Navigation导航系统
同时设置为不阻碍行走-Walkable ,即可以在障碍物上行走。
孙寅
2020/06/02
1.3K0
Unity基础(22)-Navigation导航系统
【Unity3D】鼠标拖拽物体实现任意角度自旋转
Unity3d鼠标拖拽物体实现任意角度自旋转 主要涉及函数 Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量 Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量 通过勾股定理获取拖拽长度,长度越长旋转越快 在project setting--Input 可以设置 代码分享 UnityEngine; System.Collections; public void startRoate : MonoBehaviour { private bool
恬静的小魔龙
2020/03/11
4.8K1
【Unity3D】鼠标拖拽物体实现任意角度自旋转
Unity3d:摇杆移动,第三人称镜头控制
两个手指都没按在UI上,取这一帧与上一帧的距离的平方差值,不能取平方根插值,多了性能消耗
立羽
2023/08/24
2680
【Unity3D】CharacterController控制人物的移动
Unity3d使用CharacterController控制行走 ------------------------- 使用Input.GetAxis("Horizontal") 和 "Vertical"得到垂直和水平方向的值 使用CharacterController.SimpleMove(Vector3)参数表示运动的方向和速度 单位可以认为是 m/s 代码如下: private CharacterController cc; public float speed = 4; vo
恬静的小魔龙
2020/03/11
2.5K0
Unity Rigidbody实现爬坡功能
实现人物爬坡功能前,通过获取用户Horizontal和Vertical轴输入形成了一个移动方向Move Direction,该方向平行于地面,驱动Rigidbody沿该方向移动,代码如下:
CoderZ
2022/12/26
1.1K0
Unity Rigidbody实现爬坡功能
Unity 从UI中拖拽对象放置并拖动[通俗易懂]
需求:点击UI,在场景中生成3D对象,对象跟随鼠标移动,放置后可再次拖拽对象,改变其位置。做了一个小Demo,如下图所示:
全栈程序员站长
2022/09/10
2.7K0
Unity 从UI中拖拽对象放置并拖动[通俗易懂]
Unity摄像机基本操作详解:移动、旋转与缩放
在Unity开发中,摄像机(Camera)是至关重要的组件。它不仅决定了玩家视角,还直接影响到游戏的视觉体验。一个流畅且功能丰富的摄像机控制系统,能让玩家更加沉浸于游戏世界。本文将围绕一个示例代码,深入探讨Unity中摄像机的基本操作,包括移动、旋转和缩放。我们将从基本定义出发,详细解析涉及的API,并结合示例代码进行实际演示,帮助开发者构建高效的摄像机控制系统。
Front_Yue
2025/03/13
1820
Unity摄像机基本操作详解:移动、旋转与缩放
Unity3D脚印3——Transfor
Transform组件用于控制物体的位置,旋转和缩放,这里面涉及两个重点,一个是坐标系,这个包括局部坐标系和世界坐标系的关系,另外一个是父子节点,GameObject的父子节点关系是通过Transform组件来维护的。
py3study
2020/01/10
7440
Unity3d+moba+UGUI摇杆
使用UGUI制作摇杆,摇杆的初始位置是可变的,当按下同时改变Bg位置和thumb位置,当松手时Bg,thumb返回初始原位。主要函数:ScreenPointToLocalPointInRectangle,Vector3.Distance。
立羽
2023/08/24
1840
Unity3d+moba+UGUI摇杆
从零开始制作Roll-a-ball tutoria滚动的小游戏(Unity3D)
  大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧。
恬静的小魔龙
2022/08/07
1.6K0
从零开始制作Roll-a-ball tutoria滚动的小游戏(Unity3D)
unity3d:模型跟随鼠标运动,旋转
立羽
2023/08/24
4241
[Unity3d]虚拟3D汽车展示项目
今天完善成了虚拟3D汽车展示项目的部分功能,虽然用的汽车模型有点粗糙,但感觉还不错,下面我就贴下源码供初学者学习!
py3study
2020/01/14
1.1K0
Unity3d开发
JavaScript之前已经又所了解,但是在之前也只是在网页的基础上进行学习在网页上如何使用JavaScript脚本进行编译
用户8447427
2022/08/18
9.2K0
Unity3d开发
Unity3D之Transform
Unity3D的Transform是用于描述游戏对象在场景中的位置、旋转和缩放的组件。它是Unity中最常用的组件之一,可以实现对象的移动、旋转和缩放等操作。
叶茂林
2023/07/30
3920
Unity基础(10)-坐标系统
3D坐标系是3D游戏开发与VR开发中的基础概念。一般而言3D坐标系都是使用的 笛卡尔坐标系来描述物体的坐标信息,笛卡尔坐标系:分为左手坐标系与右手坐标系
孙寅
2020/06/02
5K0
Unity3D学习笔记第一课
第一课程: 1.Unity类名必须与文件名保持一致 2.讲属性设置为public可以在Unity中访问 public float speed; // Use this for initialization void Start () { } // Update is called once per frame void Update () { //获取左右方向键的的值(范围为-1到1) float amtToMove = Input.GetAxis ("Horizontal
hbbliyong
2018/03/06
1K0
网络游戏简单化!PUN插件了解一下?(Unity3D)
Photon Unity Networking (PUN)是一种用于多人游戏的Unity软件包。 灵活的匹配可以让玩家进入房间,可以通过网络同步对象。 快速和可靠的通信是通过专用的Photon 服务器完成的,因此客户端连接不需要1对1。
恬静的小魔龙
2022/08/07
3.1K0
网络游戏简单化!PUN插件了解一下?(Unity3D)
unity3d模拟Scene视图camera控制
中键滚动,camera前进后退 右键拖动,camera原地旋转 中键拖动,camera上下左右平移
立羽
2023/08/24
2590
相关推荐
Unity3D中使用Joystick Pack实现摇杆控制
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文