Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • 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
1
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
Add comment
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
0

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
Add comment · 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.

Follow this Question

Answers Answers and Comments

3 People are following this question.

avatar image avatar image avatar image

Related Questions

convert c# to JavaScript Problem 0 Answers

this script in Javascript?? 0 Answers

Distribute terrain in zones 3 Answers

java to C# 2 Answers

Convert c# to Js? 1 Answer


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