本文实例为大家分享了unity实现手游虚拟摇杆的具体代码,供大家参考,具体内容如下
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 绑定到摇杆上的摇杆类,参考半径50 /// </summary> public class Rocker : MonoBehaviour { Vector2 m_offet;//偏移向量 Vector2 m_originalPos;//摇杆原始屏幕坐标 Touch[] touches;//屏幕上触控点数组 int touch_Id = -1;//触控点数组下标 bool isMove = false;//是否移动 float m_ScreenScale; /// <summary> /// 给外部调用的偏移向量,告知摇杆参数 /// </summary> public Vector3 Offet { get { return m_offet; } } // Use this for initialization void Start () { m_originalPos = transform.position;//摇杆中心的屏幕坐标位置 m_ScreenScale = Screen.width / 800f; } // Update is called once per frame void Update () { //得到屏幕触控数组 touches = Input.touches; if (touches.Length > 0)//如果触点开启 { //得到离摇杆中心最近的触点下标 touch_Id; if (touches.Length == 1)//只有一个触点时 { touch_Id = 0; } else if (touches.Length > 1)//触点大于1个时 { touch_Id = 0;//先假设下标为0 for (int i = 1; i < touches.Length; i++)//遍历触点数组 { if (Vector2.SqrMagnitude(touches[i].position - m_originalPos) < Vector2.SqrMagnitude(touches[touch_Id].position - m_originalPos))//第i个点比假设的点近 { touch_Id = i;//假设的点改为第i个点 } } } //如果得到的触点不是取消或抬起 if (Input.GetTouch(touch_Id).phase != TouchPhase.Canceled && Input.GetTouch(touch_Id).phase != TouchPhase.Ended) { //触点在摇杆范围内 if(Vector2.SqrMagnitude(touches[touch_Id].position - m_originalPos) <= 50*50 * m_ScreenScale * m_ScreenScale)//50为背景半径 { isMove = true;//开启遥控 //摇杆开始控制,计算偏移量 SetOffetIn(); } else if(isMove)//触点在摇杆范围外,但是遥控已经开启 { SetOffetOut(); } } else// 手指抬起,摇杆回归原始位置 { transform.position = m_originalPos; m_offet = Vector2.zero; isMove = false; touch_Id = -1; } } } /// <summary> /// 触点在操作盘内时 /// 摇杆控制方法 /// </summary> void SetOffetIn() { //距离过小视为不偏移摇杆位置不变 if(Vector2.SqrMagnitude(touches[touch_Id].position - m_originalPos) < 5 * m_ScreenScale) { GetComponent<Image>().rectTransform.position = m_originalPos;//摇杆定位在原始位置 m_offet = Vector3.zero; } else { //摇杆位置追踪 GetComponent<Image>().rectTransform.position = touches[touch_Id].position; m_offet = touches[touch_Id].position - m_originalPos;//赋值偏移值 m_offet = m_offet.normalized;//归一化 } } /// <summary> /// 触点在操作盘外时 /// 摇杆控制方法 /// </summary> void SetOffetOut() { Vector2 tempDir;//临时偏移向量 tempDir = touches[touch_Id].position - m_originalPos; //更新摇杆位置:距离原始位置127各单位 GetComponent<Image>().rectTransform.position = m_originalPos + (tempDir.normalized) * 25*m_ScreenScale; //偏移量 m_offet = tempDir.normalized;//归一化 } private void OnGUI() { GUIStyle style = new GUIStyle(); //实例化一个新的GUIStyle,名称为style ,后期使用 style.fontSize = 50; //字体的大小设置数值越大,字越大,默认颜色为黑色 style.normal.textColor = new Color(1, 1, 1); //设置文本的颜色为 新的颜色(0,0,0)修改值-代表不同的颜色,值为整数 我个人觉得有点像RGB的感觉 GUI.Label(new Rect(20, 30, 300, 60), "原始位置:" + m_originalPos.ToString(),style); GUI.Label(new Rect(20, 100, 300, 60), "摇杆位置:" + GetComponent<Image>().rectTransform.position.ToString(), style); GUI.Label(new Rect(20, 170, 300, 60), "触点位置:" + touches[touch_Id].position.ToString(), style); GUI.Label(new Rect(20, 240, 300, 60), "屏幕分辨率:" + Screen.currentResolution, style); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Unity实现虚拟摇杆,包括了Unity实现虚拟摇杆的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Unity实现虚拟摇杆的具体代码,供大家参考,具体内容如下 面板上设置一些属性,比如摇杆拖拽的距离,是否始终可视,是否限制虚拟摇杆位置(我是把虚拟摇杆限制在了屏幕的左下区域)。 使用GetDirAndLength()方法去获得移动的方向和长度即可 以上就是本文的全部内容,
本文向大家介绍Unity实现简单虚拟摇杆,包括了Unity实现简单虚拟摇杆的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Unity虚拟摇杆的简单实现代码,供大家参考,具体内容如下 简单的Unity虚拟摇杆实现,有详细注释。 Game界面 Inspector界面 摇杆脚本 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Unity实现游戏存档框架,包括了Unity实现游戏存档框架的使用技巧和注意事项,需要的朋友参考一下 最近重构了一下我的存档框架。我在这里对实现方法进行简单的解析。注意这里主要演示算法,所以,效率上并不是最佳。一个游戏中,可能有成百上千个物体需要存储,而且有几十种类型,接下来就用一个简单的例子来解释。一个很简单的例子,有一个Unit(单位)类型,有一个Inventory(背包)类型,
本文向大家介绍Unity Shader实现2D游戏迷雾,包括了Unity Shader实现2D游戏迷雾的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Unity Shader实现2D游戏迷雾的具体代码,供大家参考,具体内容如下 先看效果吧。 我使用的是屏幕后处理效果,首先先去Photoshop做一张图片如下,用画笔点一个点就可以了,使用它来对摄像机截取的图片进行处理。 在摄像机上添加
本文向大家介绍Unity实现简单手势识别,包括了Unity实现简单手势识别的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Unity实现手势识别的具体代码,供大家参考,具体内容如下 代码很简单没有难度,都有注解,随便 看一看 就会了。 CallEvent () 方法需要自己搭载使用。 Unity代码 其实代码还可进行补充,比如左上、左下、右上、右下、叠加等等吧,如有问题就 Call
本文向大家介绍Unity实现苹果手机Taptic震动,包括了Unity实现苹果手机Taptic震动的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Unity苹果手机Taptic震动的具体代码,供大家参考,具体内容如下 文件:ios震动.zip 将上方文件解压之后将MultiHaptic.mm的文件放到Assets/Plugins/iOS目录下,MultiHaptic.cs文件不用挂载