Converting a Javascript Drag and Drop script to C#

I’m trying to figure out how to correctly convert this piece of Javascript to C#.
I’m still pretty new to programming, I do have some experience though I can’t figure this one out, because I get boatloads of errors I don’t understand, even when trying to find these on google.

Here is the original:

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);
}

I’ve done some translating myself first, and then got some help but we couldnt figure it out together either

Here is the translation:

using UnityEngine;
using System.Collections;

public class Vertaling : MonoBehaviour {
public int normalCollisionCount= 1;

public float moveLimit= 0.5f;
public float collisionMoveFactor= 0.01f;
public float addHeightWhenClicked= 0.0f;
public bool freezeRotationOnDrag= true;
Camera cam;
private Rigidbody myRigidbody;
private Transform myTransform;
private bool canMove= false;
private float yPos;
private bool  gravitySetting;
private bool  freezeRotationSetting;
private float sqrMoveLimit;
private int collisionCount= 0;
private Transform camTransform;

void  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;   
}

void  OnMouseDown (){
    canMove = true;
    myTransform.Translate(Vector3.up*addHeightWhenClicked);
    gravitySetting = myRigidbody.useGravity;
    freezeRotationSetting = myRigidbody.freezeRotation;
    myRigidbody.useGravity = false;
    myRigidbody.freezeRotation = freezeRotationOnDrag;
    yPos = myTransform.position.y;
}

void  OnMouseUp (){
    canMove = false;
    myRigidbody.useGravity = gravitySetting;
    myRigidbody.freezeRotation = freezeRotationSetting;
    if (!myRigidbody.useGravity) {
        myTransform.position.y = yPos-addHeightWhenClicked;
    }
}

void  OnCollisionEnter (){
    collisionCount++;
}

void  OnCollisionExit (){
    collisionCount--;
}

void  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.0f;
    if (collisionCount > normalCollisionCount) {
        move = move.normalized*collisionMoveFactor;
    }
    else if (move.sqrMagnitude > sqrMoveLimit) {
        move = move.normalized*moveLimit;
    }
   
    myRigidbody.MovePosition(myRigidbody.position + move);
}
}

I hope some of you guys have the time and patience to help me. Thanks in advance!

Errors found:

1- You must use a new keyword before a Vector3 constructor (constants like Vector3.up don’t need it);

2- You can read position.y, but not write to it. position is a property of Transform, and C# doesn’t allow writing to individual components of a property - you must copy the property to an auxiliary variable, modify the component and store the variable back in the property.

Javascript takes care of these minor details for us, but C# is more cranky (too cranky for a script language, in my opinion), and its error messages claim for a Rosetta stone to be deciphered. I fixed these errors in the code below:

...
void  OnMouseUp (){
    canMove = false;
    myRigidbody.useGravity = gravitySetting;
    myRigidbody.freezeRotation = freezeRotationSetting;
    if (!myRigidbody.useGravity) {
        // you can't set y alone in the property position:
        Vector3 temp = myTransform.position;
        temp.y = yPos-addHeightWhenClicked;
        myTransform.position = temp;
    }
}

void  OnCollisionEnter (){
    collisionCount++;
}

void  OnCollisionExit (){
    collisionCount--;
}

void  FixedUpdate (){
    if (!canMove) return;

    myRigidbody.velocity = Vector3.zero;
    myRigidbody.angularVelocity = Vector3.zero;
    // the same problem here:
    Vector3 temp = myTransform.position;
    temp.y = yPos;
    myTransform.position = temp;
    var mousePos= Input.mousePosition;
    // you must use new when constructing a Vector3:
    var move= cam.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, camTransform.position.y - myTransform.position.y)) - myTransform.position;
    move.y = 0.0f; // move is a variable, not a property, thus this is ok
    if (collisionCount > normalCollisionCount) {
        move = move.normalized*collisionMoveFactor;
    }
    else if (move.sqrMagnitude > sqrMoveLimit) {
        move = move.normalized*moveLimit;
    }
    myRigidbody.MovePosition(myRigidbody.position + move);
  }
}

Another common problem in C# is GetComponent: you must use GetComponent() instead of GetComponent(Rigidbody) in javascript. Javascript supports both versions, but C# only accepts the first one.