之前写过遥杆怎么做,这里依然用的是之前的方法,就不介绍了。

之前玩过《蜡烛人》,发现手游版的《蜡烛人》的遥杆是看不见的,手指直接在屏幕左边滑动人物就可以移动,可能是为了增强沉浸感。最近在写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制作可根据手指位置自动定位的隐形遥杆的更多相关文章

  1. 【转】Unity3D学习日记(一)使用UGUI制作虚拟摇杆

    http://blog.csdn.net/begonia__z/article/details/51170059 如今手机游戏玩法多种多样,尤其使用虚拟摇杆进行格斗类游戏开发或者是MMORPG成为了主 ...

  2. 在Unity中用UGUI制作可输入下拉框

    Unity中UGUI制作可输入下拉框 目录 Unity中UGUI制作可输入下拉框 前言 组件分析 制作流程 总结 前言 在搜索引擎以及一些网页中我们常常可以看见这样一种UI控件,看上去是一个输入框,在 ...

  3. 星际SC地图制作中生成随机位置,也包括所有需要随机的效果

    星际SC地图制作中生成随机位置,也包括所有需要随机的效果 利用单位 kakaru T 开头那个, kakaru是随机变化位置 注意kakaru的放置位置和占用格子大小,kakaru周围放上LOCATI ...

  4. PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例

    前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...

  5. 利用jquery制作滚动到指定位置触发动画

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...

  6. 使用uGUI制作游戏内2D动画

    在3D的游戏中制作2D的效果是一个很常见的需求,我在很早前玩过一个叫做艾尔之光的游戏,里面就大量的使用了这个技术.就像下面图片中的伤害数字,这些数字往往还是有一些动画效果在里面的,比如大小的变化,颜色 ...

  7. ugui制作伸缩菜单

    制作一个类似与这种格式的菜单,可以伸缩滑动的.今天正好项目需要用到类似功能,所以尝试了一下,做出如下的效果 虽然只是一个思路,但是可以扩展.声明一个object物体,为but,通过GetCompone ...

  8. C# 制作屏保(图片位置随机变化)

    最近无所事事,闲着无聊,在网上翻看资料时碰巧看到了屏保制作,根据大神的思路也理解到屏保也不是很难.因此根据我自己的理解,动手谢了一个屏保. 首先,打开VS2010创建一个Windows窗体应用程序,名 ...

  9. 【转】超简单利用UGUI制作圆形小地图

    http://sanwen.net/a/ithhtbo.html 由于UI都是Achor自己用PS做的,比较粗糙,大家见谅,不过丝毫不影响功能的实现,下面我们看看今天的笔记: 首先我们看看需要哪些组件 ...

随机推荐

  1. PHP设计模式系列 - 建造者模式

    什么是建造者模式 建造者模式主要是为了消除其它对象复杂的创建过程. 设计场景 有一个用户的UserInfo类,创建这个类,需要创建用户的姓名,年龄,金钱等信息,才能获得用户具体的信息结果. 创建一个U ...

  2. 1.1 What Is This Book About(这本书是关于什么的)

    CHAPTER 1 Preliminaries(预备知识) 1.1 What Is This Book About?(这本书是关于什么的) 这本书关心的是如何用Python对数据进行处理和清洗等操作. ...

  3. HBase学习之路 (三)HBase集群Shell操作

    进入HBase命令行 在你安装的随意台服务器节点上,执行命令:hbase shell,会进入到你的 hbase shell 客 户端 [hadoop@hadoop1 ~]$ hbase shell S ...

  4. Day18 (一)类的加载器

    一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这个虚拟机实例也就随之消亡. 如果在同一台计算机上同时运行多个Java程序 ...

  5. 1、JVM-走进java

    1.1.概述 Java不仅仅是一门编程语言,还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统.移动终端.企业服务器.大 ...

  6. IPython学习笔记(二)-魔术命令

    .魔术命令:以%为前缀的命令,是ipython的特殊命令,方便完成常见的任务.,常见的魔术命令有:%run,%paste,%cpaste,%timeit,%reset,%hist,%debug,%bo ...

  7. 集合之HashTable

    在java中与有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相 ...

  8. ASP.NET Razor引入命名空间(视图中数据序列化)

    问题描述: 视图有时可以作为保存数据的载体,使用Razor语法给我们带来便捷的同时,也会使我们陷入局限.@可以保存int.bool.string等类型,但却保存不了对象类型,例如Dictionary. ...

  9. gulp合并压缩

    1.文件合并压缩 var concat = require(‘gulp-concat’); //引用 var uglify = require(‘gulp-uglify’);  接下来,只要conca ...

  10. 强连通分量算法·$tarjan$初探

    嗯,今天好不容易把鸽了好久的缩点给弄完了--感觉好像--很简单? 算法的目的,其实就是在有向图上,把一个强连通分量缩成一个点--然后我们再对此搞搞事情,\(over\) 哦对,时间复杂度很显然是\(\ ...