首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之IOS实现平面多点触摸(二)
2012
05-01

Unity3D研究院之IOS实现平面多点触摸(二)

在上一章中已经介绍了Unity for 3D 游戏引擎的构建,从本章以后我将带领大小盆友们一起更进一步的学习Unity游戏引擎。先从Unity平面开始,本章介绍Unity 平面上的多点触摸。

点击File->New Project 创建一个工程,可以使用默认 或者 名称随便起一起即可。点击继续完成创建工程。

 

Unity3D研究院之IOS实现平面多点触摸(二) - 雨松MOMO程序研究院 - 1

 

Scene:游戏场景视图,这里面可以摆放任意场景模型。

Camera Preview:摄像头正对方向屏幕显示内容

MainCamera:创建工程后默认会添加游戏的主摄像头,在场景视图中我们可以看见 MainCamera在三维坐标系中的位置。

 

Unity3D研究院之IOS实现平面多点触摸(二) - 雨松MOMO程序研究院 - 2

 

我们今天的目标实际上就是让摄像头正对一个平面,在这个平面中实现多点触摸。

下面介绍一下脚本的使用,为了让摄像头显示我们须要给主摄像头绑定脚本,如下图所示,点击红框内的Create 出现下拉列表,先创建两个文件夹,Image用来存放图片,Scripts用来存放脚本。 因为iPhone 4 的分辨率是960×640 所以找到一张 960×640的图片做为屏幕背景图,然后在找一张小一点的图片做为触摸后在屏幕中显示的图片。

 

Unity3D研究院之IOS实现平面多点触摸(二) - 雨松MOMO程序研究院 - 3

 

 Unity支持三种的脚本分别是javascript,C# Script,Boo Script, 官方推荐使用javascript来编写,所以我们也就用javascript。但是实际开放中我比较喜欢用C#。

创建一个脚本名称为menu.js,声明了两个变量 imageMenu 与 imageItem 来储存游戏背景显示与游戏触摸显示的纹理图片。

function OnGUI () : 这个方法用来通知屏幕绘制。

DrawTexture: 绘制纹理。

Label:绘制一个文本。

iPhoneInput.touchCount :得到多点触摸的数量。

iPhoneInput.GetTouch(i).position: 得到循环中每一个多点触摸的位置。

iPos.x : 触摸的x坐标

iPos.y : 触摸的y坐标(左上角为00点的Y坐标)

GUI.DrawTexture(Rect(x,960 – y ,120,120),imageItem);

960 – y : 因为取得的y坐标是左上角00点的坐标,而Unity绘制是以左下角为00点的坐标,不处理直接用y的话坐标就是一个反的,所以这里用 iPhone 4的 高度 960  减去 当前触摸的Y 就算出触摸正确的显示坐标。

 

 

脚本已经添加完毕,接下来是绑定变量。

先将menu.js拖拽到Maincamera中,可以看到右下角红框中出现两个没有赋值的变量 ImageMenu 与ImageItem ,因为上面脚本中声明了这两个变量,这里就会出现。在这里须要对这两个变量赋值。然后拖拽图片放入为其赋值。

Unity3D研究院之IOS实现平面多点触摸(二) - 雨松MOMO程序研究院 - 4

 

OK 接下来就是build and run ,具体方法见上一章,这里就不罗嗦了。 我们看看运行在iPhone上的真机效果图。

因为Unity3D for iPhone 只支持 5点触摸,所以我将5根手指头放入iPhone 4中 图中清楚的记录我的5根手指头所在屏幕中的位置,以及正确的贴上了须要显示的图片。

 

Unity3D研究院之IOS实现平面多点触摸(二) - 雨松MOMO程序研究院 - 5

 

哇咔咔~~同样也希望各位技术达人可以和MOMO一起进行交流~~ 一起进步喔~~

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之IOS实现平面多点触摸(二)》有 22 条评论

  1. 不错的网站,很喜欢,期待互访

  2. 为什么我的C#脚本,里面编辑器看不到设置的参数!using UnityEngine;using System.Collections;public class TouchItem : MonoBehaviour {Texture2D imageMenu;Texture2D imageItem;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}void OnGUI(){GUI.DrawTexture(new Rect (0, 0 , 960, 640), imageMenu);int touchCount = Input.touchCount;for (int i = 0; i < touchCount; i ){Vector2 iPos = Input.GetTouch(i).position;float x = iPos.x;float y = iPos.y;GUI.DrawTexture(new Rect(x,960 – y,277,320), imageItem);GUI.Label(new Rect(x,960 – y,277,320), “Touch position is” iPos);}}}

  3. 为什么我的C#脚本,里面编辑器看不到设置的参数!using UnityEngine;using System.Collections;public class TouchItem : MonoBehaviour { Texture2D imageMenu; Texture2D imageItem; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnGUI() { GUI.DrawTexture(new Rect (0, 0 , 960, 640), imageMenu); int touchCount = Input.touchCount; for (int i = 0; i < touchCount; i++) { Vector2 iPos = Input.GetTouch(i).position; float x = iPos.x; float y = iPos.y; GUI.DrawTexture(new Rect(x,960 – y,277,320), imageItem); GUI.Label(new Rect(x,960 – y,277,320), “Touch position is” + iPos); } }}

  4. luckyhome168 说:

    Ok,在Android上成功实现 Unity3D研究院之IOS实现平面多点触摸(二) - 雨松MOMO程序研究院 - 1 ,直接使用的是Input api

  5. 楼主,你好你上面的这些内容在android机器里跑还需要修改什么内容部?

  6. Automated Income App…

    Online Article?…

  7. 小富 说:

    解决了。。谢谢。。继续学习。。。

  8. 小富 说:

    怎么查看不到两个申明的变量??

  9. 灰太郎_ZH 说:

    我的项目里用到了joystick,然后还有button。在按住joystick控制人物移动的时候,button就不响应了。请问这个问题应该怎么解决啊?

  10. 落花无意 说:

    请问将iPhoneInput.touchCount换成AndroidInput.touchCountSecondary,将iPhoneInput.GetTouch(i).position换成AndroidInput.GetSecondaryTouch(i).position,然后放到android下为什么实现不了这功能呢?

  11. 刚刚没有仔细看代码,直接复制的,用android手机实验的。。没想到iphoneInput.touchCount也能用,算出来还是10点触控,好神奇。。不明白咦。

  12. 用android也能实现,哈哈。谢谢楼主的博文,写的真好。

  13. bboxxx 说:

    而且生成的工程巨大无比!!!!有办法优化没?

  14. bboxxx 说:

    你好,我在unity3d看到的物体的位置和ios位置完全不一样。 这要怎么设置呢!

  15. 黄孝强 说:

    非常感谢

  16. 连海 说:

    我的怎么跟你不一样呢。没有看到那两个变量

留下一个回复

你的email不会被公开。