• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
Question by weedzuh · Nov 10, 2011 at 04:07 PM · c#javascriptconvertcs1612

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!

Comment
aldonaletto

People who like this

1 Show 0
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image

Answer by aldonaletto · Nov 10, 2011 at 04:47 PM

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<Rigidbody>() instead of GetComponent(Rigidbody) in javascript. Javascript supports both versions, but C# only accepts the first one.

Comment

People who like this

0 Show 0 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

3 People are following this question.

avatar image avatar image avatar image

Related Questions

help me converting js to c# 1 Answer

C# to UnityScript conversion help. 0 Answers

How to make a JavaScript a C# script 1 Answer

help with creating a static Instance in javascript 2 Answers

java to C# 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges