找回密码
 立即注册
查看: 4487|回复: 92

[脚本] IOS触摸并移动物体对象

[复制链接]
发表于 2012-12-16 16:02 | 显示全部楼层 |阅读模式
I thought there would be all kinds of examples of how to move an object around in the scene using Touch, but I couldn’t find anything that was simple and straightforward for someone just starting out with Java (like me!).

After digging around in a bunch of different scripts and reading thru a ton a posts on the Unity Forum, I found this post by col000r which had a nice, simple example. I simplified it a little bit so it would work with just 1 attached object.

for(touch in iPhoneInput.touches) {
     if(touch.phase == iPhoneTouchPhase.Moved || touch.phase == iPhoneTouchPhase.Began) {
          transform.position = Camera.main.ScreenToWorldPoint(new Vector3 (touch.position.x, touch.position.y, 10));
     }
}

That script gets a good bit of the job done, but the object will jump to the position of you finger no matter where you touch the screen.  I wanted the object to only move if you touch it directly.  So I added in the raycast code from my previous Unity iPhone Touch Animation Tutorial (which I found in the iPhone-Match example project).
[code=javascript]
function Update () {
     var hit : RaycastHit;
     var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
     if (Physics.Raycast (ray, hit, 100)) {
          //do something here
     }
}[/code]

TouchMove Mini-Tutorial:

You can download the  project before you get started to see the completed tutorial or you can follow along with the steps below. This one is pretty simple, so following the steps won’t take long.

1. Create a cube: Go to Game Object –> Create Other –> Cube

2. Add a Box Collider to the Cube: Go to Add Component –> Physics –> Box Collider (if your cube doesn’t already have one)

3. Create a new script: Go to Assets –> Create –> Javascript.  This will create a new script in your Project panel named NewBehaviourScript.  Double-click the script in your Project panel to open it in Unitron.

Copy the following code, paste it into the file, save, and then switch back in Unity.  Drag-and-drop the script from the Project view onto the cube in either the Hierarchy or Scene panel.

[code=javascript]function Update () {
     var hit : RaycastHit;
     var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
     for(touch in iPhoneInput.touches) {
         if (Physics.Raycast (ray, hit, 100)) {
         if(touch.phase == iPhoneTouchPhase.Moved || touch.phase == iPhoneTouchPhase.Began) {
              transform.position = Camera.main.ScreenToWorldPoint(new Vector3 (touch.position.x, touch.position.y, 10));
         }
    }
     }
}[/code]

4. Be sure to set your iPhone Bundle Identifier: Go to Edit –> Project Settings –> Player and then give it a domain and name.  See Step 16 in the Unity iPhone Touch Animation Tutorail if you need help with this step.

5.  Build and Run: That should do it.

Note that if you have multiple objects with Colliders on them, your cube will move when you click on any of them (bug!).

Feel free to post in the comments improvements to the above script and/or if you have suggestions for how to handle any of the following…

Planned improvements:
– Object should only move if you touch it, not other Mesh Colliders.
– Object should collide with other objects while being moved
– Object should continue to move after you lift your finger, slow over time — like a hockey puck.
– Object should bounce off other objects
– Move multiple objects independently

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2013-2-24 11:32 | 显示全部楼层
楼主太有才了,膜拜中……
发表于 2014-7-11 22:02 | 显示全部楼层
膜拜中……膜拜中……
发表于 2017-3-12 12:59 | 显示全部楼层
顶顶多好
发表于 2017-3-12 13:39 | 显示全部楼层
难得一见的好帖
发表于 2017-3-12 13:15 | 显示全部楼层
说的非常好
发表于 2017-3-12 12:52 | 显示全部楼层
很好哦
发表于 2017-3-12 13:23 | 显示全部楼层
不错不错
发表于 2017-3-24 20:24 | 显示全部楼层
很不错
发表于 2017-3-24 20:16 | 显示全部楼层
楼主是超人
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-13 09:12 , Processed in 0.188284 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表