用UGUI制作可根据手指位置自动定位的隐形遥杆
之前写过遥杆怎么做,这里依然用的是之前的方法,就不介绍了。
之前玩过《蜡烛人》,发现手游版的《蜡烛人》的遥杆是看不见的,手指直接在屏幕左边滑动人物就可以移动,可能是为了增强沉浸感。最近在写2D游戏所以就想来实现一下。
大概思路:
1. 把遥杆UI的GetComponent<Image>().color的透明度改为0;
2.手指落到哪里就修改摇杆的位置在哪里。
显示隐藏摇杆和自动定位的代码(下面的代码挂在摇杆上)如下:
public void Hide()
{
viewport.GetComponent<Image>().color *= new Color(, , , ); // 透明度改为0,用乘法
content.GetComponent<Image>().color *= new Color(, , , );
}
public void Show()
{
viewport.GetComponent<Image>().color += new Color(, , , ); // 透明度改为1,用加法
content.GetComponent<Image>().color += new Color(, , , );
}
public void AutoSetPosition(Vector2 screenPos)
{
if ((!Input.GetMouseButton() || Input.GetMouseButtonDown()) && screenPos.x < Screen.width / ) // 在移动端Input.GetMouseButton(0)表示单指按下
{
transform.GetChild().localPosition = ScreenPosToLocalPos(GetComponent<RectTransform>(), Input.mousePosition); ; // 注意是LocalPosition
} // 如果采用自动定位的方式,就一定要让stick跟随手指
if (Input.mousePosition.x < Screen.width / && Input.GetMouseButton())
content.localPosition = ScreenPosToLocalPos(content.parent.GetComponent<RectTransform>(), Input.mousePosition);
} private Vector2 ScreenPosToLocalPos(RectTransform rt, Vector2 pos)
{
Vector2 localPoint;
RectTransformUtility.ScreenPointToLocalPointInRectangle(rt, pos, null, out localPoint);
return localPoint;
}
遇到的问题:
1. 一开始我发现手放屏幕上后立即拖动不能拖动stick,因为是先放手,摇杆后根据手定位到手的位置的,所以不能触发拖动事件,所以我就加入了在手机按下时让杆跟随手指移动的代码,在上面有体现。
补充:
1.因为摇杆脚本继承了ScrollRect脚本,ScrollRect中有关控制stick的代码位于LateUpdate中,比Update后执行,所以可能会比自己写的控制Stick的代码后执行,所以我们需要对LateUpdate进行覆写,让ScrollRect中控制Stick的代码不执行,不然的话我们写的代码和ScrollRect中的代码都会对stick进行控制,会出BUG的。代码如下:
protected override void LateUpdate()
{
// base.LateUpdate(); 控制stick,比如stick的回弹
if (Input.GetMouseButtonUp())
content.localPosition = Vector2.zero;
if(Input.GetMouseButton())
if (content.localPosition.magnitude > radius)
content.localPosition = content.localPosition.normalized * radius;
stickPos = content.localPosition / radius;
}
用UGUI制作可根据手指位置自动定位的隐形遥杆的更多相关文章
- 【转】Unity3D学习日记(一)使用UGUI制作虚拟摇杆
http://blog.csdn.net/begonia__z/article/details/51170059 如今手机游戏玩法多种多样,尤其使用虚拟摇杆进行格斗类游戏开发或者是MMORPG成为了主 ...
- 在Unity中用UGUI制作可输入下拉框
Unity中UGUI制作可输入下拉框 目录 Unity中UGUI制作可输入下拉框 前言 组件分析 制作流程 总结 前言 在搜索引擎以及一些网页中我们常常可以看见这样一种UI控件,看上去是一个输入框,在 ...
- 星际SC地图制作中生成随机位置,也包括所有需要随机的效果
星际SC地图制作中生成随机位置,也包括所有需要随机的效果 利用单位 kakaru T 开头那个, kakaru是随机变化位置 注意kakaru的放置位置和占用格子大小,kakaru周围放上LOCATI ...
- PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例
前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...
- 利用jquery制作滚动到指定位置触发动画
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...
- 使用uGUI制作游戏内2D动画
在3D的游戏中制作2D的效果是一个很常见的需求,我在很早前玩过一个叫做艾尔之光的游戏,里面就大量的使用了这个技术.就像下面图片中的伤害数字,这些数字往往还是有一些动画效果在里面的,比如大小的变化,颜色 ...
- ugui制作伸缩菜单
制作一个类似与这种格式的菜单,可以伸缩滑动的.今天正好项目需要用到类似功能,所以尝试了一下,做出如下的效果 虽然只是一个思路,但是可以扩展.声明一个object物体,为but,通过GetCompone ...
- C# 制作屏保(图片位置随机变化)
最近无所事事,闲着无聊,在网上翻看资料时碰巧看到了屏保制作,根据大神的思路也理解到屏保也不是很难.因此根据我自己的理解,动手谢了一个屏保. 首先,打开VS2010创建一个Windows窗体应用程序,名 ...
- 【转】超简单利用UGUI制作圆形小地图
http://sanwen.net/a/ithhtbo.html 由于UI都是Achor自己用PS做的,比较粗糙,大家见谅,不过丝毫不影响功能的实现,下面我们看看今天的笔记: 首先我们看看需要哪些组件 ...
随机推荐
- APP分析之海豚睡眠
APP分析之海豚睡眠 产品:海豚睡眠 引文 由于笔者暑假经常晚睡,导致在习惯性失眠.长时间睡眠不足,导致头脑反应迟钝,还整日无精打采,不知所措.一个偶然的机会,在一个燥热的夜晚,眼看又是一个不眠之夜, ...
- 如何在Python中获取当前时间
所属网站分类: python基础 > 模块,库 作者:追梦骚年 链接:http://www.pythonheidong.com/blog/article/68/ 来源:python黑洞网,专注p ...
- luogu P3369 【模板】普通平衡树(splay)
嘟嘟嘟 突然觉得splay挺有意思,唯一不足的是这几天是一天一道,debug到崩溃. 做了几道平衡树基础题后,对这题有莫名的自信,还算愉快的敲完了代码后,发现样例都过不去,然后就陷入了无限的debug ...
- Hadoop学习之路(九)HDFS深入理解
HDFS的优点和缺点 HDFS的优点 1.可构建在廉价机器上 通过多副本提高可靠性,提供了容错和恢复机制 服务器节点的宕机是常态 必须理性对象 2.高容错性 数据自动保存多个副本,副本丢失后,自动 ...
- mysql 二进制日志binary log操作简单命令
show master status \G; #查看当前正在记录的二进制日志 show binary logs; #查看binary log 所有文件列表 show binlog events; #查 ...
- SQLite加密方式 [转]
关于SQLite SQLite是一个轻量的.跨平台的.开源的数据库引擎,它的在读写效率.消耗总量.延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iOS.Android). ...
- linux文件系统初始化过程(2)---挂载rootfs文件系统
一.目的 本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统. rootfs是基于内存的文件系统,所有操作都在内存中完成:也没有实际的存储设备,所以不需要设备驱动程序 ...
- [原创]升级Gerrit的commit-msg,检查git commit时必须填写开发任务编号TaskID
公司使用git+gerrit+jenkins进行持续集成实践,其中gerrit用来进行Code Review.另外我们自己研发了一套敏捷项目管理系统TPM(TeamPlus Management),用 ...
- oracle中的条件语句
oracle中case when then及decode用法 一.case … when … then 语法: – 写法一: case(条件) when 值1 then 返回值1 when 值 ...
- EasyX_无法填充圆颜色的问题
官网:https://www.easyx.cn/ 在线帮助文档:https://docs.easyx.cn/ 目标:生成一个边框为黄色,填充为蓝色的圆 遇到的问题:使用以下代码,只能生成边框为黄色的圆 ...