首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放(八)
2012
05-01

Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放(八)

前几篇文章介绍了很多Unity3D引擎自身的一些问题, 今天我们在回到IOS设备上讨论一些触摸屏幕手势,本章的目标是通过触摸iPhone屏幕手势 实现模型左右的旋转,与模型的缩放。

大家想一想模型的旋转,实际上是镜头的旋转。模型的缩放实际上是镜头Z轴方向的坐标。那么实现本章的内容只需要控制镜头的位置方可实现。

我们在游戏场景中创建一些简单的模型做为参照物,插一句 “大家有谁知道 . FBX 的模型那里可以免费找到,我想在博文中加点游戏模型让场景更好看一些,可是苦于找不到有点郁闷,用公司的模型来写博文有觉得有点不合适”哇咔咔 ,如果有知道的哥们 不妨告诉我喔。啦啦啦。 

我们创建一个简单的游戏平面, 然后平面中放一个箱子做为旋转缩放的参照物。如下图所示,选中摄像机,给摄像机添加一个脚本名称为Move. 脚本中有一个参数 Target,它的作用是设置摄像头旋转移动参照物,这里把一个箱子赋值给了 Target,那么左右滑动屏幕会发现箱子在旋转,两手缩放屏幕会发现箱子在放大与缩小。

Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放(八) - 雨松MOMO程序研究院 - 1

我们看看Move这条脚本,说明一下几个重要的 :

这些方法都是系统自己调用的方法

function Start () : 游戏启动以后只调用一次,可用于脚本的初始化操作,

function Update ():Start()方法调用结束以后每一帧都会调用,可以在这里更新游戏逻辑。

function LateUpdate (): Start()方法调用结束以后每一帧都会调用,但是它是在 Update()调用完后调用。

Move.js完整代码

在Untiy3D 中运行用鼠标手势点击上看不到任何效果的,必需在iPhone真机上才可以触摸感应到效果喔 . 嘻嘻~

OK 接下来将Unity3D 导出成Xcode项目,导出的方法有谁还不会??? 我的第一篇文章有说明噢。哇咔咔~~ 然后运行项目只能在真机上运行哦。。 看看我在iPhone 上的截图。
Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放(八) - 雨松MOMO程序研究院 - 2
触摸iPhone屏幕镜头旋转与缩放以后的效果,这个图确实有点不太好截,我一会把项目的源代码工程下载地址贴上来,方便大家阅读与学习,哇咔咔~~
Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放(八) - 雨松MOMO程序研究院 - 3
镜头任意的旋转与缩放,还不错噢,大家快点来学习Unity3D游戏开发吧,哇咔咔~~


最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,哇咔咔~~~ 附上工程的下载地址,文件名称是zoom.unitypackage,下载完毕的盆友们双击就可以自动在Unity3D 下打开它啦。然后导出成iPhone项目就可以运行了。

今天回家装个windows 7 最近对wp7的游戏开发有点兴趣哦~ 哦也~回家钻研一下~哇咔咔

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放(八)》有 79 条评论

  1. 潘立府 说:

    不知为何 我写好之后,它总是提示代码中有错误,错误如下:“All conmpiler errors have to be fixed before you can enter plsymode”,意思是说 我的代码中 有错误 但是我对Unity中的JS不了解。我自己猜测应该是Unity3D更新后舍弃了部分代码导致出现了错误 ,但是我找不出错误的原因,还希望你能给我一些指示

  2. 您好,就是把这段代码放在AR的camera上,可以对模型进行旋转和缩小,但是模型不能跟着用来被识别的图片的移动而移动?

  3. 家宝de 说:

    请问这个在移动安卓上可以实现吗

  4. 胡良云 说:

    不知道MOMO大大对触摸一体机有没有研究,Windows系统的触摸一体机中的触摸该如何判断呢?

  5. 767514280 说:

    momo.我添加到AR去实现这个缩放与旋转就不行,求指导

  6. 小梁 说:

    你好,Input.GetAxis(“Mouse X”)这里的值很奇怪,如果在pc上测试,转动是很正常的,但是在手机上,取值很大,到时旋转的时候像飞一样,旋转的幅度过大,请问有碰到这样的问题吗?

  7. 为嘛你用Mac版自带的mono编辑器写js脚本可以打出中文的??

  8. 寒冰 说:

    下载的那个文件包打不开,很想问一个问题,第一次好像没有给 oldPosition1,oldPosition2赋值,怎么就调用if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2))?

  9. thw0609 说:

    我想请教个问题:如何测试手机游戏?手机游戏主要是通过触摸来操控的。而且不仅仅是一直手指,有时候是多指触摸。直接在unity里面运行游戏,鼠标操作貌似获取不到Input.GetTouch对象(我debug的时候看不到任何效果)。难道每次修改代码,都需要重新生产xcode项目在测试吗?

  10. thw0609 说:

    为什么我在xcode里面运行没反应

  11. 简单 说:

    var position = rotation * new Vector3(0.0f, 0.0f, -distance) target.position; 能解释这句代码吗?不明白。。。小白,请见谅

  12. 简单 说:

    var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position; 能解释这句代码吗?不明白。。。小白,请见谅

  13. __w-小龙__ 说:

    您好,我最近在看您的教程,但是有一个地方不太明白,需要可以帮忙解答: var position = rotation * Vector3(0.0, 0.0, -distance) target.position;1> 游戏物体新的位置,为什么要 rotation * Vector3(0.0, 0.0, -distance) ?2> 作用是什么?3> 特别是Z轴的值为什么是缩放系数?

  14. __w-小龙__ 说:

    您好,我最近在看您的教程,但是有一个地方不太明白,需要可以帮忙解答: var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;1> 游戏物体新的位置,为什么要 rotation * Vector3(0.0, 0.0, -distance) ?2> 作用是什么?3> 特别是Z轴的值为什么是缩放系数?

  15. 沈彦冰 说:

    x = Input.GetAxis(“Mouse X”) * xSpeed * 0.02; y -= Input.GetAxis(“Mouse Y”) * ySpeed * 0.02; 这里面的Input.GetAxis(“Mouse X”) Debug.log出来的值是0,在运行中也是0所以造成无法运行,我认为是input setting 中没有设置,怎么设置触摸事件呢==比如手指滑动就可以改变数值。

  16. 沈彦冰 说:

    x += Input.GetAxis(“Mouse X”) * xSpeed * 0.02; y -= Input.GetAxis(“Mouse Y”) * ySpeed * 0.02; 这里面的Input.GetAxis(“Mouse X”) Debug.log出来的值是0,在运行中也是0所以造成无法运行,我认为是input setting 中没有设置,怎么设置触摸事件呢==比如手指滑动就可以改变数值。

  17. 一年1半载 说:

    老师,为什么测试的这串代码不能实现旋转摄像机的功能

  18. 要有花草 说:

    老师 请问类似coc的视角如何做?自己尝试了两天感觉效果不好。才开始学u3d。但是项目周期紧,我们都是第一次用u3d 在线等待=。=

  19. Andy 说:

    把var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x) (oP1.y-oP2.y)*(oP1.y-oP2.y)); var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x) (nP1.y-nP2.y)*(nP1.y-nP2.y));改成var leng1 = Vector2.Distance(oP1,oP2);var leng2 = Vector2.Distance(nP1,nP2);会不会好一点呢?

  20. Andy 说:

    把var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y)); var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));改成var leng1 = Vector2.Distance(oP1,oP2);var leng2 = Vector2.Distance(nP1,nP2);会不会好一点呢?

  21. Pingback 引用通告: 腕時計 値段

  22. 小徐 说:

    Momo,你在最后加入了一个360°的判断,我觉得如果我第一次手指滑动后的y值为361,那岂不是相机只会旋转一度了?

  23. Pingback 引用通告: オークリー メガネ

  24. Pingback 引用通告: コーチ アウトレット

  25. 潘杰华 说:

    你好,摄影机的初始位置修改怎么无效呢 镜头角度都是固定的//摄像头的位置 012 var x = 0.0; 013 var y = 0.0;

  26. kfjtgudng 说:

    松哥,这个,摄像机到物体中心的距离,好像不调啊。换个大一点的模型,比如建筑物,缩放到最大,都看不全

  27. Mark 说:

    想找免费fbx的话只要到game798等游戏网站下载max文件,用max10开,导出fbx即可

  28. wsksw 说:

    有个小bug就是两个手指缩放后 抬起来的时候摄像机的角度会发生改变,缩放后如果是a角度,两个手指抬起一个后,镜头就跳到b角度了;或者是一个手指旋转再加入一个手指缩放就跳角度。

  29. CodeFarmer 说:

    属性有了 不过distance需要怎么调整?默认10的话我的模型变得很大

  30. CodeFarmer 说:

    怎么给脚本添加一个属性啊

  31. yx8728 说:

    新手,请假个问题,苹果的magic mouse怎么控制平移呢,没有鼠标中键

  32. earthn2000 说:

    試過,很好用。但是我把maincamera 換成 arcamera 卻只能平移,而且與指撥的方向相反,無法放大縮小,想請教MOMO大大,要如何改,謝謝。

  33. Mr.ider 说:

    看过,已受用。。

  34. 这段代码在android上能顺利运行么?我看都是Input,没有iPhontInput,应该是可以的吧?我现在没有加双点触控的那段,其他的都写了,跑起来木有反应呢?

  35. 乌克兰山羊 说:

    请教一个问题,如何调节放大缩小的速度? 我现在把一个很大房子作为目标物体,放大缩小的速度感觉太慢了, 用什么方法可以实现放大缩小速度的 调节?谢谢你。

  36. 雨松MOMO博客网友 说:

    momo老师,问一下u3d中如何联机调试android程序啊?比如说,触控这一块,在u3d上没法直接调试,如何让u3d像eclipse连接真机调试那样来调试触控这类无法在u3d上调试的android程序呢?

  37. 匿名 说:

    momo老师,问一下u3d中如何联机调试android程序啊?比如说,触控这一块,在u3d上没法直接调试,如何让u3d像eclipse连接真机调试那样来调试触控这类无法在u3d上调试的android程序呢?

  38. 柳-佳 说:

    mo老师,请问如果测试这个功能,必须在mac下发布出来再装到iphone上才能进行测试操作吗?

  39. 雨松MOMO 说:

    一般项目都会禁用上下旋转 这样用户体验不好 如果想加上也很容易的。。呵呵

  40. js_nj_zj 说:

    为啥不出个安卓的

  41. WEI 说:

    雨松老师,请教一下,手指触屏旋转模型,手指滑动后模型按惯性继续旋转一定时间后再停下可以怎么实现?有什么思路么?

  42. WEI 说:

    雨松老师,想问您一个问题,如何可以确定手指在iPhone屏幕上滑动的时间?

    • 雨松MOMO 说:

      这个可以分为两种 一种是判断是GUI中触摸的时间 另一种是判断触摸在3D某个模型中的是时间, 不过原理就是根据触摸后让它的时间一直++知道结束摸出 取到这段时间就可以了

    • 雨松MOMO 说:

      这个可以分为两种 一种是判断是GUI中触摸的时间 另一种是判断触摸在3D某个模型中的是时间, 不过原理就是根据触摸后让它的时间一直 知道结束摸出 取到这段时间就可以了

  43. xiaofeihu 说:

    MOMO,请教一个问题,假如镜头的位置是固定的,那么有没有别的办法实现IOS触摸屏手势控制模型的旋转与缩放?我目前的想法是直接在判断下写旋转和缩放。

  44. Lin 说:

    請問要是想做像顛倒黑白 http://www.2144.cn/html/126/17026/ 這款遊戲 可以按一個按鍵就變成另一邊的人 不過我黑白的世界都是有人的 就像人跟影子那樣 假設我現在是在黑色的世界 那我只能動黑色是借的人 白色世界的人不會跟著動 當我按按鍵 我就變白色世界的人 線在白色世界的人可以動 黑色便不能動
    請問我要怎麼做這樣效果 我有看可以把攝影機分割成兩個是窗 可是我想到要是我架設兩個攝影機 在選轉是那就會穿幫 請問我要怎麼做才會像那個遊戲一樣很自然的選轉過來

留下一个回复

你的email不会被公开。