- Home /
Need Help With Unity iOS "touch" Code
I am new to unity and cannot figure out the code for simply dragging an object in unity with ios touch. I need to be able to touch and drag a game object in my 2D game. Any code help or tutorial links would be great. Thanks.
Answer by fffMalzbier · Aug 12, 2011 at 09:46 AM
I found this on the net (cant remember the autor) you need to tweak the public values in the inspector but it is working fine.
//content of DragObject.js
var normalCollisionCount = 1;
var moveLimit = .5;
var collisionMoveFactor = .01;
var addHeightWhenClicked = 0.0;
var freezeRotationOnDrag = true;
var cam : Camera;
private var myRigidbody : Rigidbody;
private var myTransform : Transform;
private var canMove = false;
private var yPos : float;
private var gravitySetting : boolean;
private var freezeRotationSetting : boolean;
private var sqrMoveLimit : float;
private var collisionCount = 0;
private var camTransform : Transform;
function Start () {
myRigidbody = rigidbody;
myTransform = transform;
if (!cam) {
cam = Camera.main;
}
if (!cam) {
Debug.LogError("Can't find camera tagged MainCamera");
return;
}
camTransform = cam.transform;
sqrMoveLimit = moveLimit * moveLimit; // Since we're using sqrMagnitude, which is faster than magnitude
}
function OnMouseDown () { canMove = true; myTransform.Translate(Vector3.up*addHeightWhenClicked); gravitySetting = myRigidbody.useGravity; freezeRotationSetting = myRigidbody.freezeRotation; myRigidbody.useGravity = false; myRigidbody.freezeRotation = freezeRotationOnDrag; // yPos = myTransform.position.y; }
function OnMouseUp () {
canMove = false;
myRigidbody.useGravity = gravitySetting;
myRigidbody.freezeRotation = freezeRotationSetting;
if (!myRigidbody.useGravity) {
myTransform.position.y = myTransform.position.y-addHeightWhenClicked; //yPos-addHeightWhenClicked;
}
}
function OnCollisionEnter () {
collisionCount++;
}
function OnCollisionExit () {
collisionCount--;
}
function FixedUpdate () {
if (!canMove) return;
myRigidbody.velocity = Vector3.zero;
myRigidbody.angularVelocity = Vector3.zero;
// myTransform.position.y = yPos;
var mousePos = Input.mousePosition;
var move = cam.ScreenToWorldPoint(Vector3(mousePos.x, mousePos.y, camTransform.position.y - myTransform.position.y))- myTransform.position;
// move.y = 0.0;
if (collisionCount > normalCollisionCount) {
move = move.normalized*collisionMoveFactor;
}
else if (move.sqrMagnitude > sqrMoveLimit) {
move = move.normalized*moveLimit;
}
myRigidbody.MovePosition(myRigidbody.position + new Vector3(move.x,move.y,0));
}
@script RequireComponent(Rigidbody)
FYI, This script will not work on iOS devises once you build your project. You have to use the unity touch commands.
Did you try it? Unity on iOS devices simulates a mouse input on touch so you can use mouse routines. They that whole thing is not optimized for iOS touch input but it will work.
I tried it and it didn't work once I built it. I had to end up shooting a ray at the object when I touched the screen. The mouse commands work when you and playing the game with the unity viewer, but once your build to the ios device, they no longer work. You have to use touch commands.
Jep does not work anymore. (I thought it worked in a prior version, the first touch get treaded like a mouse input)
Your answer

Follow this Question
Related Questions
android touch input 1 Answer
Unity 2D Mobile Game Drawing Mechanic 0 Answers
touch position 2 Answers