u3d自带的joystick怎么设置能u3d鼠标控制物体移动方向

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之控制模型移动旋转与碰撞(七)
Unity3D研究院之控制模型移动旋转与碰撞(七)
围观36237次
编辑日期: 字体:
上一章介绍了模型的旋转与平移,本章介绍一些好玩的,通过按钮来控制模型的移动与镜头的跟随,脚本参数的传递。个人觉得Unity3D 这套游戏引擎真的很棒,它可以为开发者节省时间。用更多少的脚本,可以实现更多的功能。先赞一下,哇咔咔~废话不多说了,入正题!
首先在3D世界中创建一个箱子模型,然后添加一个脚本,命名为
js0绑定到这个箱子中。在添加一个脚本,命名为js1 ,同样绑定到这个箱子上,用来实现对象的创建与调用方法参数的传递 ~
这里声明一个控制类的对象,用来进行参数的传递,调用方法。
Getomponent(js1): 得到脚本名称为js1的对象,这里把值赋给Control,就可以使用js1脚本中的方法了,下面的代码中通过这个对象调用模型的移动方法。
Input.GetKey(KeyCode): 这个方法返回一个Bool 判断当前按键是否被按下,当然这里只能运行在PC上才可以感应按钮,因为IOS的设备上没有按键,以后我会介绍在IOS上添加游戏摇杆的功能,本章我们先学习一下PC上的基本按钮响应。
实现按下“W”控制物体向前
实现按下“S”控制物体向后
实现按下“A”控制物体向左平移
实现按下“D”控制物体向右平移
实现按下“Q”控制物体向左旋转
实现按下“E”控制物体向右旋转
js0.js 代码
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
//旋转移动速度var Speed = 50;&//控制对象var Control;&function Update(){&&//得到控制对象&&Control = GetComponent(js1); &&&//判断按键 &&&if(Input.GetKey(KeyCode.W))&&{&& &&&&//前进&&
Control.ForWard();&&&}else if(Input.GetKey(KeyCode.S)) &&{
Control.Back();&&}&&&&&if(Input.GetKey(KeyCode.A))&&{&& &&&&//前左&&
Control.GLeft();&&&}else if(Input.GetKey(KeyCode.D)) &&{
Control.GRight();&&}&&&if(Input.GetKey(KeyCode.Q))&&{&& //左旋转&&&&&Control.leftRotate(Vector3.up *Time.deltaTime * -Speed);&&&}else if(Input.GetKey(KeyCode.E))&&{&&&&//右旋转&& Control.RightRotate(Vector3.up *Time.deltaTime * Speed);&&&}&}
js1.js 代码
参数的传递可以使用obj进行传递,代码中我将旋转的角度做为参数传递到了js1.js中控制模型旋转。
Vector3 标示一个3D的向量单位,它可以标示模型的三个方向,这里根据旋转的角度与移动的向量设置它。
12345678910111213141516171819202122232425262728293031323334353637383940
//前进速度var Speed = 50;&//前进function ForWard() { transform.Translate(Vector3.forward * Time.deltaTime *Speed);}&//后退function Back() {&&&&transform.Translate(Vector3.forward * Time.deltaTime * -Speed);
}&//向左function GLeft() { transform.Translate(Vector3.right * Time.deltaTime *-Speed);}&//向右function GRight() {&&&&transform.Translate(Vector3.right * Time.deltaTime * Speed);
}&//传递参数&//左旋转function leftRotate(obj){ transform.Rotate(obj); }&//右旋转function RightRotate(obj){ transform.Rotate(obj); }
OK点击运行,通过按键我们可以正常的控制模型平移与旋转,但是现在有两个问题 1, 主摄像机不能跟随控制模型, 2
、模型可以横穿过山丘,感觉很假。下面我们解决这两个问题。
在Unity3D标准资源的脚本中系统帮我们写好了跟随脚本.如下图所示,点击Import Package – & Scripts 将系统脚本导入。
选中摄像机 点击Component – & Camera-Control – & Smoot Follow ,给主摄像机添加一个跟随脚本。
跟随脚本添加完以后,须要指定一个跟随的物体,下面红框内将跟随的物体Cube拖动进来,这里Cube就是我们上面控制的模型,那么这样,摄像机将会一直在身后跟随我们控制的模型。下面是一些跟随的参数,设置 跟随的距离 高度等等,盆友们手动的修改一下运行游戏就可以看出来变化,。
控制物体的碰撞可以使用 选中模型, Component – & Physics – & Rigidbody 设置这个模型的重力碰撞。那么这样你控制的模型就不会穿过山丘,而是感应重力碰撞。
点击运行游戏,看看效果,控制箱子行走的同时,我们可以清晰的看出旁边的树木被物理碰撞所干扰,前后,左右,旋转 完全OK .大家快试试吧。哇咔咔~~
明天开始MOMO又要开始处理一部分iPhone 的界面图形化开发,Tomorrow is another day ,加油哇咔咔~ Unity3D 的世界中脚本还可以做很多事情,以后我在慢慢向各位道来~ 欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,哇咔咔~~~
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!u3d中如何用脚本实现用鼠标控制粒子的方向_鼠标吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:276,566贴子:
u3d中如何用脚本实现用鼠标控制粒子的方向收藏
鼠标,正品行货低价促销!货到付款,全国联保,满99元免运费!全场超低价格,货到付款,配送极速,京东给您不一样的购物新体验!
我只是来看看的,这个世界还有太多的帖需要哥。哥祝楼主早日得到解答
听说十五个字可以得经验,我来试试,顺便帮卤煮顶一下,卤煮不用谢
楼主不哭,我帮你顶
有一天,神创造了一头牛。神对牛说:“你要整天在田里替农夫耕田,供应牛奶给人类饮用。你要工作直至日落,而你只能吃草。我给你50年的寿命。”牛抗议道:“我这么辛苦,还只能吃草,我只要20年寿命,余下的还给你。”神答应了。第二天,神创造了猴子。神跟猴子说:“你要娱乐人类,令他们欢笑,你要表演翻斤斗,而你只能吃香蕉。我给你20年的寿命。”猴子抗议:“要引人发笑,表演杂技,还要翻斤斗,这么辛苦,我活10年好了。”神答应了。第三天,神创造了狗。神对狗说:“你要站在门口吠,吃主人吃剩的东西。我给你25年的寿命。”狗抗议道:“整天坐在门口吠,我要15年好了,余下的还给你。”神答应了。第四天,神创造了人。神对人说:“你只需要睡觉、吃东西和玩耍,不用做任何事情,只需要尽情地享受生命,我给你20年的寿命。人抗议道:“这么好的生活只有20年,太短!”神没说话。人对神说:“这样吧。牛还了30年给你,猴子还了10年,狗也还了10年,这些都给我好了,那我就能活到70岁。”神答应了。这就是为什么我们的头20 年只需吃饭、睡觉和玩耍;之后的30年,我们像一条牛整天工作养家;接着的10年,我们退休了,不得不像只猴子表演杂耍来娱乐自己的孙儿;最后的10年,整天留在家里,像一条狗坐在门口看门…经典,太有寓意了,人的苦难,都是人自己找的 求脸熟!求带走!求回复!求粉!!!
有一天,神创造了一头牛。神对牛说:“你要整天在田里替农夫耕田,供应牛奶给人类饮用。你要工作直至日落,而你只能吃草。我给你50年的寿命。”牛抗议道:“我这么辛苦,还只能吃草,我只要20年寿命,余下的还给你。”神答应了。第二天,神创造了猴子。神跟猴子说:“你要娱乐人类,令他们欢笑,你要表演翻斤斗,而你只能吃香蕉。我给你20年的寿命。”猴子抗议:“要引人发笑,表演杂技,还要翻斤斗,这么辛苦,我活10年好了。”神答应了。第三天,神创造了狗。神对狗说:“你要站在门口吠,吃主人吃剩的东西。我给你25年的寿命。”狗抗议道:“整天坐在门口吠,我要15年好了,余下的还给你。”神答应了。第四天,神创造了人。神对人说:“你只需要睡觉、吃东西和玩耍,不用做任何事情,只需要尽情地享受生命,我给你20年的寿命。人抗议道:“这么好的生活只有20年,太短!”神没说话。人对神说:“这样吧。牛还了30年给你,猴子还了10年,狗也还了10年,这些都给我好了,那我就能活到70岁。”神答应了。这就是为什么我们的头20 年只需吃饭、睡觉和玩耍;之后的30年,我们像一条牛整天工作养家;接着的10年,我们退休了,不得不像只猴子表演杂耍来娱乐自己的孙儿;最后的10年,整天留在家里,像一条狗坐在门口看门…经典,太有寓意了,人的苦难,都是人自己找的 求脸熟!求带走!求回复!求粉!!!
酱油党莅临的地方,不仅仅是挽尊,不仅仅是消灭零回复,酱油所过暖意无边
登录百度帐号推荐应用[Unity3D]手机3D游戏开发:关于自定义Joystick的相关设置和脚本源码
我的图书馆
[Unity3D]手机3D游戏开发:关于自定义Joystick的相关设置和脚本源码
学习Unity脚本推荐:
Joystick在手游开发中非常常见,也就是在手机屏幕上的虚拟操纵杆,但是Unity3D自带的Joystick贴图比较原始,所以经常有使用自定义贴图的需求。
下面就来演示一下如何实现自定义JoyStick贴图。
首先导入贴图,注意要把默认的Texture改为GUI要不然尺寸会发生改变:
在Inspector面板中点击Texture选项可以实现简单的贴图切换:
选中后便会发现场景中的Joystick已经发生了改变:
同理,可以对右边的Joystick做同样的修改:
当然很多时候这样简单的修改很难满足我们的需求。
下面来说说对Joystick的常见调整。
首先是坐标的调整,一般把Postition归零而在GUITexture中调整Pixel Inset:
但是这样依旧会出问题,全屏的时候因为采用了绝对坐标所以会出现这种情况:
所以我们还需要在脚本中稍作调整。
先来给Joystick加个背景图片。
创建一个JS脚本JoystickBackgroundGUI:
[javascript] @script&RequireComponent(Joystick)&&@script&ExecuteInEditMode&()&&&&&&var&background&=&new&SwitchGUI();&&var&location&=&new&Location();&&private&var&GUIalpha:float&=&1;&&&&&&private&var&joystick&:&J&&joystick&=&GetComponent&(Joystick);&&&&var&noGuiStyle&:&GUIS&&&&&&function&Update()&{&&&&&&if&(joystick.IsFingerDown())&{&&&&&&&&&&background.up();&&&&&&}&else&{&&&&&&&&&&background.down();&&&&&&}&&&&&&if&(background.texture&!=&null){&&&&&&&&&&location.updateLocation();&&&&&&}&&}&&&&function&OnGUI&()&{&&&&&&GUI.color.a&=&GUI&&&&&&GUI.Box(Rect(location.offset.x&+&background.offset.x&-&background.texture.width/2,location.offset.y&+&background.offset.y&-&background.texture.height/2,background.texture.width,background.texture.height),background.texture,noGuiStyle);&&}&&
joystick是Unity自己封装好的对象,其中有IsFingerDown等函数有需要的同学可以查阅一下Unity官网的说明文档。
脚本中用到了Location和SwitchGUI,这两个函数在另一个脚本&& _GUIClasses&& 中定义:
[javascript] import&System.Collections.G&&&&&&//&TextureGUI&Class:&create&a&basic&class&for&creating&and&placing&GUI&elements&&//&texture&=&the&texture&to&display&&//&offset&=&pixel&offset&from&top&left&corner,&can&be&modified&for&easy&positioning&&&&class&TextureGUI&{&&&&&&var&texture:T&//useful:&texture.width,&texture.height&&&&&&var&offset:Vector2;&//&.x&and&.y&&&&&&private&var&originalOffset:Vector2;&//store&the&original&to&correctly&reset&anchor&point&&&&&&enum&Point&{&TopLeft,&TopRight,&BottomLeft,&BottomRight,&Center}&//what&part&of&texture&to&position&around?&&&&&&&&&&&&var&anchorPoint&=&Point.TopL&//&Unity&default&is&from&top&left&corner&of&texture&&&&&&&&&&&&&&&&function&setAnchor()&{&//&meant&to&be&run&ONCE&at&Start.&&&&&&&&&&originalOffset&=&&&&&&&&&&&if&(texture)&{&//&check&for&null&texture&&&&&&&&&&&&&&switch(anchorPoint)&{&//depending&on&where&we&want&to&center&our&offsets&&&&&&&&&&&&&&&&&&case&anchorPoint.TopLeft:&//&Unity&default,&do&nothing&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&anchorPoint.TopRight:&//&Take&the&offset&and&go&to&the&top&right&corner&&&&&&&&&&&&&&&&&&&&&&offset.x&=&originalOffset.x&-&texture.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&anchorPoint.BottomLeft:&//&bottom&left&corner&of&texture&&&&&&&&&&&&&&&&&&&&&&offset.y&=&originalOffset.y&-&texture.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&anchorPoint.BottomRight:&//bottom&right&corner&of&texture&&&&&&&&&&&&&&&&&&&&&&offset.x&=&originalOffset.x&-&texture.&&&&&&&&&&&&&&&&&&&&&&offset.y&=&originalOffset.y&-&texture.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&anchorPoint.Center:&//and&the&center&of&the&texture&(useful&for&screen&center&textures)&&&&&&&&&&&&&&&&&&&&&&offset.x&=&originalOffset.x&-&texture.width/2;&&&&&&&&&&&&&&&&&&&&&&offset.y&=&originalOffset.y&-&texture.height/2;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&}&&&&&}&&&&//Timer&Class:&&&&&&&&&&&&&&class&TimerGUI&extends&TextureGUI&{&//&Extend&functionality&from&TextureGUI&for&a&depreciating&timer&graphic&&&&&&var&textureLEnd:T&//&left&side&of&full&texture&(non&stretching&part)&&&&&&var&offsetLEnd:Vector2;&//&left&side&of&full&texture&(non&stretching&part)&start&position&&&&&&var&textureCenter:T&//&center&of&timer&(will&be&stretched&across&width)&&&&&&var&offsetCenter:Vector2;&&&&&&&var&textureREnd:T&&&&&&var&offsetREnd:Vector2;&&&&&&var&timerPerct:float&=&1;&//&percentage&(0&to&1)&this&stretches&the&center&&&&&&var&desiredWidth:float&=&403;&//&max&width&of&the&timer&in&pixels&&&&&&&&&&&&function&setTime(newTime:float)&{&&&&&&&&&&timerPerct&=&newT&//&sets&the&percent&based&on&value&&&&&&}&&}&&&&&&//&SwitchGUI&Class:&Extends&the&TextureGUI&to&be&able&to&load&in&multiple&textures&and&switch&between&them&&class&SwitchGUI&extends&TextureGUI&{&&&&&&var&switchableTextures&=&new&List.&Texture&();&&&&&&var&currentTexture:int&=&0;&&&&&&function&Start()&{&&&&&&&&&&if&(switchableTextures.Count&&&0)&{&&&&&&&&&&&&&&texture&=&switchableTextures[currentTexture];&&&&&&&&&&}&&&&&&}&&&&&&function&changeTexture(switchTo:int)&{&&&&&&&&&&if&(switchTo&&&switchableTextures.Count&&&&switchTo&&=&0)&{&&&&&&&&&&&&&&texture&=&switchableTextures[switchTo];&&&&&&&&&&&&&&currentTexture&=&switchTo;&&&&&&&&&&}&else&{&&&&&&&&&&&&&&//Debug.Log(&this&+&":&tried&to&call&invalid&part&of&switchTextures&array!");&&&&&&&&&&}&&&&&&}&&&&&&&&&&&&function&up()&{&&&&&&&&&&if&((currentTexture+1)&&&switchableTextures.Count)&{&&&&&&&&&&&&&&++currentT&&&&&&&&&&&&&&texture&=&switchableTextures[currentTexture];&&&&&&&&&&}&else&{&&&&&&&&&&&&&&//Debug.Log(&this&+&":&at&the&top!");&&&&&&&&&&}&&&&&&}&&&&&&&&&&&&function&nextTexture()&{&&&&&&&&&&if&((currentTexture+1)&&&switchableTextures.Count)&{&//&if&we&are&at&the&end&of&the&array&&&&&&&&&&&&&&++currentT&&&&&&&&&&&&&&texture&=&switchableTextures[currentTexture];&&&&&&&&&&}&else&{//&loop&to&the&beginning&&&&&&&&&&&&&&currentTexture&=&0;&&&&&&&&&&&&&&texture&=&switchableTextures[currentTexture];&&&&&&&&&&}&&&&&&}&&&&&&&&&&&&function&down()&{&&&&&&&&&&if&((currentTexture-1)&&=&0)&{&&&&&&&&&&&&&&--currentT&&&&&&&&&&&&&&texture&=&switchableTextures[currentTexture];&&&&&&&&&&}&else&{&&&&&&&&&&&&&&//Debug.Log(&this&+&":&at&the&bottom!");&&&&&&&&&&}&&&&&&}&&&&}&&&&//&Location&class:&&&&&&&class&Location&{&&&&&&enum&Point&{&TopLeft,&TopRight,&BottomLeft,&BottomRight,&Center}&&&&&&&&&&&&var&pointLocation&=&Point.TopL&&&&&&var&offset:Vector2;&&&&&&&&&&&&&&&&&&&&&&function&updateLocation()&{&&&&&&&&&&switch(pointLocation)&{&&&&&&&&&&&&&&case&pointLocation.TopLeft:&&&&&&&&&&&&&&&&&&offset&=&Vector2(0,0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&pointLocation.TopRight:&&&&&&&&&&&&&&&&&&offset&=&Vector2(Screen.width,0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&pointLocation.BottomLeft:&&&&&&&&&&&&&&&&&&offset&=&Vector2(0,Screen.height);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&pointLocation.BottomRight:&&&&&&&&&&&&&&&&&&offset&=&Vector2(Screen.width,Screen.height);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&pointLocation.Center:&&&&&&&&&&&&&&&&&&offset&=&Vector2(Screen.width/2,Screen.height/2);&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&}&&}&&&&class&TextureAnchor&{&&&&&&enum&Point&{&TopLeft,&TopRight,&BottomLeft,&BottomRight,&Center}&&&&&&&&&&&&var&anchorPoint&=&Point.TopL&&&&&&var&offset:Vector2;&&&&&&&&&&&&function&update()&{&&&&&&&&&&switch(anchorPoint)&{&&&&&&&&&&&&&&case&anchorPoint.TopLeft:&&&&&&&&&&&&&&&&&&offset&=&Vector2(0,0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&anchorPoint.TopRight:&&&&&&&&&&&&&&&&&&offset&=&Vector2(Screen.width,0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&anchorPoint.BottomLeft:&&&&&&&&&&&&&&&&&&offset&=&Vector2(0,Screen.height);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&anchorPoint.BottomRight:&&&&&&&&&&&&&&&&&&offset&=&Vector2(Screen.width,Screen.height);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&anchorPoint.Center:&&&&&&&&&&&&&&&&&&offset&=&Vector2(Screen.width/2,Screen.height/2);&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&}&&}&&
将脚本拖拽到Joystick上面并且部署好贴图,运行可见Joystick的背景贴图,当然坐标还有点问题:
我们在脚本中将其设置为BottomLeft,并且设置好SwitchTexture:
配置好了之后点击运行,会发现Joystick 的贴图出现在了左下角:
通过脚本中的Pixel设置可以调整两个纹理贴图的坐标并使他们趋于一致:
调整之后的结果如图:
同时将Joystick的脚本换成下面的脚本,可以实现隐藏操纵杆而只在碰到摇杆区域才显示Joystick的效果:
[javascript] //////////////////////////////////////////////////////////////&&//&Joystick.js&&//&Penelope&iPhone&Tutorial&&//&&//&Joystick&creates&a&movable&joystick&(via&GUITexture)&that&&&//&handles&touch&input,&taps,&and&phases.&Dead&zones&can&control&&//&where&the&joystick&input&gets&picked&up&and&can&be&normalized.&&//&&//&Optionally,&you&can&enable&the&touchPad&property&from&the&editor&&//&to&treat&this&Joystick&as&a&TouchPad.&A&TouchPad&allows&the&finger&&//&to&touch&down&at&any&point&and&it&tracks&the&movement&relatively&&&//&without&moving&the&graphic&&//////////////////////////////////////////////////////////////&&&#pragma&strict&&&&@script&RequireComponent(&GUITexture&)&&&&//&A&simple&class&for&bounding&how&far&the&GUITexture&will&move&&class&Boundary&&&{&&&&&&var&min&:&Vector2&=&Vector2.&&&&&&var&max&:&Vector2&=&Vector2.&&}&&&&static&private&var&joysticks&:&Joystick[];&&&&&&&&&&&&&&&&&&//&A&static&collection&of&all&joysticks&&static&private&var&enumeratedJoysticks&:&boolean&=&&&static&private&var&tapTimeDelta&:&float&=&0.3;&&&&&&&&&&&&&&//&Time&allowed&between&taps&&&&var&touchPad&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Is&this&a&TouchPad?&&var&touchZone&:&R&&var&deadZone&:&Vector2&=&Vector2.&&&&&&&&&&&&&&&&&&&&&&//&Control&when&position&is&output&&var&normalize&:&boolean&=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Normalize&output&after&the&dead-zone?&&var&position&:&Vector2;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&[-1,&1]&in&x,y&&var&tapCount&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Current&tap&count&&&&private&var&lastFingerId&=&-1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Finger&last&used&for&this&joystick&&private&var&tapTimeWindow&:&&&&&&&&&&&&&&&&&&&&&&&&&&&//&How&much&time&there&is&left&for&a&tap&to&occur&&private&var&fingerDownPos&:&Vector2;&&private&var&fingerDownTime&:&&&private&var&firstDeltaTime&:&float&=&0.5;&&&&private&var&gui&:&GUIT&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Joystick&graphic&&private&var&defaultRect&:&R&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Default&position&/&extents&of&the&joystick&graphic&&private&var&guiBoundary&:&Boundary&=&Boundary();&&&&&&&&&&&&//&Boundary&for&joystick&graphic&&private&var&guiTouchOffset&:&Vector2;&&&&&&&&&&&&&&&&&&&&&&&//&Offset&to&apply&to&touch&input&&private&var&guiCenter&:&Vector2;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Center&of&joystick&&&&private&var&alphaOff:float&=&0.0;&&&&function&Start()&&{&&&&&&//&Cache&this&component&at&startup&instead&of&looking&up&every&frame&&&&&&&&&&gui&=&GetComponent(&GUITexture&);&&&&&&&&&&&&//&Store&the&default&rect&for&the&gui,&so&we&can&snap&back&to&it&&&&&&defaultRect&=&gui.pixelI&&&&&&&&&&&&gui.color.a&=&alphaO&&&&&&&&&&&&defaultRect.x&+=&transform.position.x&*&Screen.&//&+&gui.pixelInset.x;&//&-&&Screen.width&*&0.5;&&&&&&defaultRect.y&+=&transform.position.y&*&Screen.&//+&gui.pixelInset.y;&//&-&Screen.height&*&0.5;&&&&&&&&&&&&transform.position.x&=&0.0;&&&&&&transform.position.y&=&0.0;&&&&&&&&&&&&&&&&if&(&touchPad&)&&&&&&{&&&&&&&&&&//&If&a&texture&has&been&assigned,&then&use&the&rect&ferom&the&gui&as&our&touchZone&&&&&&&&&&if&(&gui.texture&)&&&&&&&&&&&&&&touchZone&=&defaultR&&&&&&}&&&&&&else&&&&&&{&&&&&&&&&&//&This&is&an&offset&for&touch&input&to&match&with&the&top&left&&&&&&&&&&//&corner&of&the&GUI&&&&&&&&&&guiTouchOffset.x&=&defaultRect.width&*&0.5;&&&&&&&&&&guiTouchOffset.y&=&defaultRect.height&*&0.5;&&&&&&&&&&&&&&&&&&&&//&Cache&the&center&of&the&GUI,&since&it&doesn't&change&&&&&&&&&&guiCenter.x&=&defaultRect.x&+&guiTouchOffset.x;&&&&&&&&&&guiCenter.y&=&defaultRect.y&+&guiTouchOffset.y;&&&&&&&&&&&&&&&&&&&&//&Let's&build&the&GUI&boundary,&so&we&can&clamp&joystick&movement&&&&&&&&&&guiBoundary.min.x&=&defaultRect.x&-&guiTouchOffset.x;&&&&&&&&&&guiBoundary.max.x&=&defaultRect.x&+&guiTouchOffset.x;&&&&&&&&&&guiBoundary.min.y&=&defaultRect.y&-&guiTouchOffset.y;&&&&&&&&&&guiBoundary.max.y&=&defaultRect.y&+&guiTouchOffset.y;&&&&&&}&&&&&&&&}&&&&&&&&&&&&&&function&Disable()&&{&&&&&&gameObject.active&=&&&&&&&enumeratedJoysticks&=&&&}&&&&&&function&ResetJoystick()&&{&&&&&&//&Release&the&finger&control&and&set&the&joystick&back&to&the&default&position&&&&&&gui.pixelInset&=&defaultR&&&&&&lastFingerId&=&-1;&&&&&&position&=&Vector2.&&&&&&fingerDownPos&=&Vector2.&&&&&&gui.color.a&=&alphaO&&&}&&&&function&IsFingerDown()&:&boolean&&{&&&&&&return&(lastFingerId&!=&-1);&&}&&&&&&&&function&LatchedFinger(&fingerId&:&int&)&&{&&&&&&//&If&another&joystick&has&latched&this&finger,&then&we&must&release&it&&&&&&if&(&lastFingerId&==&fingerId&)&&&&&&&&&&ResetJoystick();&&}&&&&function&Update()&&{&&&&&&&&&&&&&if&(&!enumeratedJoysticks&)&&&&&&&&&&{&&&&&&&&&&&&&&//&Collect&all&joysticks&in&the&game,&so&we&can&relay&finger&latching&messages&&&&&&&&&&&&&&joysticks&=&FindObjectsOfType(Joystick)&as&Joystick[];&&&&&&&&&&&&&&enumeratedJoysticks&=&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&var&count&=&Input.touchC&&&&&&&&&&&&&&&&&&&&//&Adjust&the&tap&time&window&while&it&still&available&&&&&&&&&&if&(&tapTimeWindow&&&0&)&&&&&&&&&&&&&&tapTimeWindow&-=&Time.deltaT&&&&&&&&&&else&&&&&&&&&&&&&&tapCount&=&0;&&&&&&&&&&&&&&&&&&&&if&(&count&==&0&)&&&&&&&&&&&&&&ResetJoystick();&&&&&&&&&&else&&&&&&&&&&{&&&&&&&&&&&&&&for(var&i&:&int&=&0;i&&&&i++)&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&var&touch&:&Touch&=&Input.GetTouch(i);&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&guiTouchPos&:&Vector2&=&touch.position&-&guiTouchO&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&shouldLatchFinger&=&&&&&&&&&&&&&&&&&&&if&(&touchPad&)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(&touchZone.Contains(&touch.position&)&)&&&&&&&&&&&&&&&&&&&&&&&&&&shouldLatchFinger&=&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&else&if&(&gui.HitTest(&touch.position&)&)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&shouldLatchFinger&=&&&&&&&&&&&&&&&&&&&&&&&gui.color.a&=&.5;&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Latch&the&finger&if&this&is&a&new&touch&&&&&&&&&&&&&&&&&&if&(&shouldLatchFinger&&&&(&lastFingerId&==&-1&||&lastFingerId&!=&touch.fingerId&)&)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(&touchPad&)&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//gui.color.a&=&0.15;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&lastFingerId&=&touch.fingerId;&&&&&&&&&&&&&&&&&&&&&&&&&&fingerDownPos&=&touch.&&&&&&&&&&&&&&&&&&&&&&&&&&fingerDownTime&=&Time.&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&lastFingerId&=&touch.fingerId;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Accumulate&taps&if&it&is&within&the&time&window&&&&&&&&&&&&&&&&&&&&&&if&(&tapTimeWindow&&&0&)&&&&&&&&&&&&&&&&&&&&&&&&&&tapCount++;&&&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&tapCount&=&1;&&&&&&&&&&&&&&&&&&&&&&&&&&tapTimeWindow&=&tapTimeD&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Tell&other&joysticks&we've&latched&this&finger&&&&&&&&&&&&&&&&&&&&&&for&(&var&j&:&Joystick&in&joysticks&)&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&if&(&j&!=&this&)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&j.LatchedFinger(&touch.fingerId&);&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(&lastFingerId&==&touch.fingerId&)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&//&Override&the&tap&count&with&what&the&iPhone&SDK&reports&if&it&is&greater&&&&&&&&&&&&&&&&&&&&&&//&This&is&a&workaround,&since&the&iPhone&SDK&does&not&currently&track&taps&&&&&&&&&&&&&&&&&&&&&&//&for&multiple&touches&&&&&&&&&&&&&&&&&&&&&&if&(&touch.tapCount&&&tapCount&)&&&&&&&&&&&&&&&&&&&&&&&&&&tapCount&=&touch.tapC&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(&touchPad&)&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&For&a&touchpad,&let's&just&set&the&position&directly&based&on&distance&from&initial&touchdown&&&&&&&&&&&&&&&&&&&&&&&&&&position.x&=&Mathf.Clamp(&(&touch.position.x&-&fingerDownPos.x&)&/&(&touchZone.width&/&2&),&-1,&1&);&&&&&&&&&&&&&&&&&&&&&&&&&&position.y&=&Mathf.Clamp(&(&touch.position.y&-&fingerDownPos.y&)&/&(&touchZone.height&/&2&),&-1,&1&);&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Change&the&location&of&the&joystick&graphic&to&match&where&the&touch&is&&&&&&&&&&&&&&&&&&&&&&&&&&gui.pixelInset.x&=&&Mathf.Clamp(&guiTouchPos.x,&guiBoundary.min.x,&guiBoundary.max.x&);&&&&&&&&&&&&&&&&&&&&&&&&&&gui.pixelInset.y&=&&Mathf.Clamp(&guiTouchPos.y,&guiBoundary.min.y,&guiBoundary.max.y&);&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(&touch.phase&==&TouchPhase.Ended&||&touch.phase&==&TouchPhase.Canceled&)&{&&&&&&&&&&&&&&&&&&&&&&&&&&ResetJoystick();&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&if&(&!touchPad&)&&&&&&&&&&{&&&&&&&&&&&&&&//&Get&a&value&between&-1&and&1&based&on&the&joystick&graphic&location&&&&&&&&&&&&&&position.x&=&(&gui.pixelInset.x&+&guiTouchOffset.x&-&guiCenter.x&)&/&guiTouchOffset.x;&&&&&&&&&&&&&&position.y&=&(&gui.pixelInset.y&+&guiTouchOffset.y&-&guiCenter.y&)&/&guiTouchOffset.y;&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&//&Adjust&for&dead&zone&&&&&&&&&&&var&absoluteX&=&Mathf.Abs(&position.x&);&&&&&&&&&&var&absoluteY&=&Mathf.Abs(&position.y&);&&&&&&&&&&&&&&&&&&&&if&(&absoluteX&&&deadZone.x&)&&&&&&&&&&{&&&&&&&&&&&&&&//&Report&the&joystick&as&being&at&the&center&if&it&is&within&the&dead&zone&&&&&&&&&&&&&&position.x&=&0;&&&&&&&&&&}&&&&&&&&&&else&if&(&normalize&)&&&&&&&&&&{&&&&&&&&&&&&&&//&Rescale&the&output&after&taking&the&dead&zone&into&account&&&&&&&&&&&&&&position.x&=&Mathf.Sign(&position.x&)&*&(&absoluteX&-&deadZone.x&)&/&(&1&-&deadZone.x&);&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&if&(&absoluteY&&&deadZone.y&)&&&&&&&&&&{&&&&&&&&&&&&&&//&Report&the&joystick&as&being&at&the&center&if&it&is&within&the&dead&zone&&&&&&&&&&&&&&position.y&=&0;&&&&&&&&&&}&&&&&&&&&&else&if&(&normalize&)&&&&&&&&&&{&&&&&&&&&&&&&&//&Rescale&the&output&after&taking&the&dead&zone&into&account&&&&&&&&&&&&&&position.y&=&Mathf.Sign(&position.y&)&*&(&absoluteY&-&deadZone.y&)&/&(&1&-&deadZone.y&);&&&&&&&&&&}&&}&&
运行以下项目可以发现Joystick不见了:
但是点击屏幕就会出现了:
TA的最新馆藏
喜欢该文的人也喜欢}

我要回帖

更多关于 u3d键盘控制移动脚本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信