手机重力感应应该对大多数开发者并不陌生,在新一代智能手机Android IOS WP7 很多游戏都是使用手机自带重力感应功能制作的,强大的Unity3D 游戏引擎当然对这个也是完美支持的,今天由MOMO带大家学习3D 世界中的手机重力感应。本章我们的目标是实现一个小球在屏幕中通过摇晃手机重力加速度让小球在屏幕中移动。以前的Android系列开发文章中貌似也写过,其实原理都是一样一样一样的,废话不多说了。哇咔咔~~
先看一看Unity3D 在iPhone上的重力分布图。如下图所示我们可以清晰的看出X Y Z 三个方向的重力分量。Unity3D中重量的取值范围是 -1.0 到 +1.0.
X轴:home按键在下手机面朝天向右旋转90度重力分量为+1.0 向左旋转90度重力分量为-1.0
Y轴:home按键在上手机背朝自己重力分量为+1.0 home按键在下手机面朝自己重力分量为-1.0
Z轴:手机面朝地面重力分量为+1.0 手机面朝天空重力分量为-1.0
OK! 有了这三组重要的数值我们就可以控制手机重力感应啦,紧接着我们看看小球重力感应的这个游戏小例子。
打开Unity3D 我们将给摄像机绑定一个脚本,用来响应用户控制手机来重力感应游戏小球的移动。
在Input 这个重要的类中,Unity3D 帮我们封装了重力加速的方法。
Input.acceleration.x; 重力感应X轴的重力分量
Input.acceleration.y; 重力感应Y轴的重力分量
Input.acceleration.z; 重力感应Z轴的重力分量
new.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
//小球的贴图 var round : Texture2D; //小球在屏幕中显示的X Y坐标 var x = 0; var y = 0; //小球屏幕显示的最大 X Y 范围 var cross_x = 0; var cross_y = 0; function Start(){ //初始化赋值 cross_x = Screen.width - round.width; cross_y = Screen.height - round.height; } function OnGUI () { //整体显示 x y z 重力感应的重力分量 GUI.Label(Rect(0,0,480,100),"position is " + Input.acceleration); //绘制小球 GUI.DrawTexture(Rect(x,y,256,256),round); } function Update(){ //根据重力分量修改小球的位置这里乘以30的意思是让小球移动的快一些 x += Input.acceleration.x * 30; y += -Input.acceleration.y * 30; //避免小球超出屏幕 if(x < 0){ x = 0; }else if(x > cross_x){ x = cross_x; } if(y < 0){ y = 0; }else if(y > cross_y){ y = cross_y; } } |
重力感应的图片不太好截取,我们看看下面的示意图,小球可以根据我的手机的重力而移动。屏幕左上方正常打印手机当前X Y Z 三个方向的重力分量。
说到这里,可能会有盆友问我如何为3D的物体添加重力感应?其实方法是一样的,因为都是一样的道理,比如我可以给一个模型绑定一个这样的脚本,通过Input.acceleration去拿到当前手机的重力感应分量,然后根据这个分量去计算当前模型的位置。细心的盆友你们可以试一试,其实很简单的哇咔咔~~
最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,总的来说这一章还是比较简单的,哇咔咔~~~ 附上Unity3D工程的下载地址,Xcode项目我就不上传了,须要的自己导出。
下载地址:http://download.csdn.net/detail/xys289187120/3794307
- 本文固定链接: https://www.xuanyusong.com/archives/537
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
雨凇大神 我想问一下 unity怎么去控制windows平板的重力感应
unity有API可以访问陀螺仪
Input.gyro
MOMO你有没有解决过陀螺仪的漂移问题,和重力有关
MOMO,你的重力坐标示例图是不是画错了啊?下面摘自官网API文字:If you hold the device upright (with the home button at the bottom) in front of you, the X axis is positive along the right, the Y axis is positive directly up, and the Z axis is positive pointing toward you.X正轴方向朝右边,Y轴正方向朝上,Z轴正方向指向自己
碰撞的话可以使用 void OnCollisionEnter(Collision collision) 或者 void OnTriggerEnter(Collider other) 系列的方法 , 处理人物旋转可以使用 四元数。
還有就是 要怎樣那人物跟著一個會動的物體移動 就是我有一個物體本身是會自己漂的 然後我希望人物站上去是 會跟著那個物體飄動
還有就是 要怎樣那人物跟著一個會動的物體移動 就是我有一個物體本身是會自己漂的 然後我希望人物站上去是 會跟著那個物體飄動
unity支持 父子绑定关系, 你可以把人在层次视图中 挂给某个游戏对象子类 然后 移动父类游戏对象 子类也会跟着移动。
那可以在講一下 我要怎麼那兩個人可以相遇到嗎? 還有就是畫面的部分 我要怎麼當手機轉時 就轉到我要的那個方向 就是假設我現在操作的事黑色世界的人 當我轉手機 當就變成白色世界的方向 並且我操作的人變成白色世界的人 我想用UNITY去寫他 嗯…可以大概說一下可以怎麼做嗎? 我有點不懂..就是要怎麼把原本是倒下的人 轉一下手機 就變成朝上的人 就有點像人物跟影子的那樣 就我轉一下 影子就便在上方
那可以在講一下 我要怎麼那兩個人可以相遇到嗎? 還有就是畫面的部分 我要怎麼當手機轉時 就轉到我要的那個方向 就是假設我現在操作的事黑色世界的人 當我轉手機 當就變成白色世界的方向 並且我操作的人變成白色世界的人 我想用UNITY去寫他 嗯…可以大概說一下可以怎麼做嗎? 我有點不懂..就是要怎麼把原本是倒下的人 轉一下手機 就變成朝上的人 就有點像人物跟影子的那樣 就我轉一下 影子就便在上方
碰撞的话可以使用 void OnCollisionEnter(Collision collision) 或者 void OnTriggerEnter(Collider other) 系列的方法 , 处理人物旋转可以使用 四元数。
那假設我黑的人物只能往左移動 白的往右移動 他們最後是可以相遇到的 那我要怎麼去設計他 還有當我去轉動手機畫面時 我要怎樣去把原本的黑的世界 轉成白的世界 就是它的畫面是要怎麼改變 還有假設我有個會動的物件 當人物站上去時 人物會隨著那個物件飄動 嗯~可以跟我講一下我因該往哪個方向去發想找資料嗎? 還有陀螺儀是和重力傳感器是不同的嗎? 他麼是插在什麼地方 我該去哪找資料參考 謝謝
那假設我黑的人物只能往左移動 白的往右移動 他們最後是可以相遇到的 那我要怎麼去設計他 還有當我去轉動手機畫面時 我要怎樣去把原本的黑的世界 轉成白的世界 就是它的畫面是要怎麼改變 還有假設我有個會動的物件 當人物站上去時 人物會隨著那個物件飄動 嗯~可以跟我講一下我因該往哪個方向去發想找資料嗎? 還有陀螺儀是和重力傳感器是不同的嗎? 他麼是插在什麼地方 我該去哪找資料參考 謝謝
還有想請問我要怎樣樣做像這個遊戲 http://www.miui.com/thread-437240-1-1.html 一樣的效果
我想要像它可以轉動手機人物就可以跟著畫面移動 他怎麼讓畫面改變位置的?
還有想請問我要怎樣樣做像這個遊戲 http://www.miui.com/thread-437240-1-1.html 一樣的效果
我想要像它可以轉動手機人物就可以跟著畫面移動 他怎麼讓畫面改變位置的?
陀螺仪。。。
請問要是想做一個 畫面是水平切割成一半 上面是黑 下面是白 兩個世界都有人物 就像人和影子那樣
假設現在我操作的人物是在黑色的畫面 只要轉動手機 它的畫面就變成白色世界 那就變成操作白色世界
裡的人物 請問可以給點意見 要怎麼做才好 需要用哪種 感應器? 是要用重力還是方向來做
請問要是想做一個 畫面是水平切割成一半 上面是黑 下面是白 兩個世界都有人物 就像人和影子那樣
假設現在我操作的人物是在黑色的畫面 只要轉動手機 它的畫面就變成白色世界 那就變成操作白色世界
裡的人物 請問可以給點意見 要怎麼做才好 需要用哪種 感應器? 是要用重力還是方向來做
肯定是要根据重力的,因为需要根据重力计算手机当前的朝向。
当然你也可以使用 ios源生感应重力的方法 最后通过参数传递给Unity中也行