- Home /
How to convert to 2D
The script below is one for a 3d Object but I need its functionality, but I'm having trouble converting it so that I can use it in Unity's new 2d platform with the 2d colliders and rigidbodies this script is made for the default rigid bodies and colliders? Can anyone help!
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 = 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 + move);
}
@script RequireComponent(Rigidbody)
Okay so what I did is create an empty gameObject and then attached the required rigid body and collider to the empty gameObject and put my 2d object with the 2d collider and rigid body and it works but it brings the game object to the camera and just stays there it can still move left and right which is what I want but I don't want it to get pulled to the camera? can anyone help?
Is the whole point of the script to allow you to drag objects?
Yes sir it's so that when I click on the object that the script is attached to it moves that object to wherever you the move the mouse and only left and right.
Answer by Spinnernicholas · Dec 19, 2013 at 07:57 PM
To make it 2d, you have to replace the rigidbody and the collider(s) with their 2d counterparts.
Change 3D Vectors used in physics to 2D Voctors
There is no RigidBody2D.useGravity, use Rigidbody2D.gravityScale.
There is no RigidBody2D.freezeRotation, you might be able to set Rigidbody2D.angularDrag to float.Infinity(depends on Unity's Box2D Implementation).
I haven't dived into the camera issue yet, but I'll get back when I can.
Your answer
Follow this Question
Related Questions
How can I make a character bounce? 1 Answer
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Continuously moving rigidbody 2 Answers
How to activate GUI button only if somethings true? 1 Answer
2D Player Movement 1 Answer