Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Traducir código de Javascript a C# Unity

Iniciado por fulanodetal33, Febrero 19, 2018, 07:10:14 PM

Tema anterior - Siguiente tema
Hola a todo el mundo.
 
Me he descargado la última versión de unity que es el 5, pero desgraciadamente javascript ya no existe en unity ,y yo me acostumbré ha utilizar ese tipo de código.
 
Éste código funciona muy bien para lo que quiero hacer, pero está en java y en unity 5 no funciona, ahora me toca aprender en c# pero necesito una ayuda con este código.
 
¿Alguien podría ayudarme en traducir este script  en C# ?, o decirme aunque sea las cosas que cambian?, por lo menos las variables
 
Se que de Java a C# no cambia mucho el código pero necesito acostumbrarme. Os dejo el código debajo y puede que sea útil para otros usuarios, alomejor no es necesario cambiarlo todo, pero se que 
 
las variables si cambian mucho y no se como ponerlas...¿alguien puede ayudarme aunque sea con las variables?, sería un comienzo GRACIAS
 
 
 

//--------------------VARIABLES---------------------------------------
private var anim : Animator;
private var moveIzquierda : Vector2 = Vector2.zero;
private var moveDerecha : Vector2 = Vector2.zero;
private var moveGravedad : Vector2 = Vector2.zero;
var gravedad : float = 40.0;
var velocidad : float = 3.0;
//---------------------FUNCIONES--------------------------------------
function Start () {
anim = gameObject.GetComponent (Animator);
}
function Update () {
controles();
}
function controles(){
var controller : CharacterController = GetComponent(CharacterController);
if (controller.isGrounded ) {
//---------------------------DERECHA-------------------------------
moveDerecha = Vector3((Input.GetAxis("BotonDerecho")), 0, 0);
moveDerecha = transform.TransformDirection(moveDerecha);
moveDerecha *= velocidad;
if(Input.GetAxis("BotonDerecho")){
anim.SetTrigger("rotari");
anim.SetBool("caminard",true);
}
else if (!Input.GetAxis("BotonDerecho")){
anim.SetBool("caminard",false);
}
if (anim.GetCurrentAnimatorStateInfo (0).IsName("caminar Drcho")){
controller.Move(moveDerecha * Time.deltaTime);
anim.ResetTrigger("rotari");
}
//---------------------------IZQUIERDA-------------------------------
moveIzquierda = Vector3((Input.GetAxis("BotonIzquierdo")), 0, 0);
moveIzquierda =- transform.TransformDirection(moveIzquierda);
moveIzquierda *= velocidad;
if(Input.GetAxis("BotonIzquierdo")){
anim.SetTrigger("rotard");
anim.SetBool("caminari",true);
}
else if (!Input.GetAxis("BotonIzquierdo")){
anim.SetBool("caminari",false);
}
if (anim.GetCurrentAnimatorStateInfo (0).IsName("caminar Izq")){
controller.Move(moveIzquierda * Time.deltaTime);
anim.ResetTrigger("rotard");
}
//-------------------------------------------------------------------
if (anim.GetCurrentAnimatorStateInfo (0).IsName("rotar Izq")){
anim.ResetTrigger("rotard");
}
if (anim.GetCurrentAnimatorStateInfo (0).IsName("rotar Drcho")){
anim.ResetTrigger("rotari");
}
}
//---------------------------aplicar movimiento de gravedad al character controller------------------------------------
moveGravedad.y -= gravedad * Time.deltaTime;
controller.Move(moveGravedad * Time.deltaTime);
}

 
 

Cita de: fulanodetal33 date=1519063814¿Alguien podría ayudarme en traducir este script  en C# ?, o decirme aunque sea las cosas que cambian?, por lo menos las variables
   


Hola, es tan fácil como buscar las sentencias que te interesan en el manual (o google), una vez estés ahí cambia de C# a JS en la parte de arriba a la derecha y fijate como cambia una de otra.
 
Yo de JS no se mucho ni quiero saber, prefiero que lo hayan sacado de una vez por todas, pero bueno aquí un mini ej de funciones:
 

//JS
function Foo(param1 : bool, param2 : int) : bool {
...   
...
return true; //para retornar un bool
}
//C#
bool Foo(bool param1, int param2){
...   
...
return true; //para retornar un bool
}

 
lo que más se ve entre uno y otro es que en JS vos ponés 'nombre' : 'tipo'  (también para definir una variable), cuando en C# lo modificadores van antes:  'tipo' 'nombre' . En JS las funciones se ponen function y al final el tipo de retorno, en C#, otra vez, se pone adelante, en el ej tipo "bool".
 
Mucho de lo de adentro de las funciones que pusiste va igual, puede que me haya perdido de algunas cosas, fijate que cuando tenés un Vector3(...) en C# tenés que especificar que no forma parte de alguna definición de la misma estructura de Vector3 (como vector3.zero o Vector3.one) sino que forma parte de una nueva estructura vector3, entonces va en new Vector3(...)
 

//JS
moveDerecha = Vector3((Input.GetAxis("BotonDerecho")), 0, 0);
//C#
moveDerecha = new Vector3((Input.GetAxis("BotonDerecho")), 0, 0);

 
Esto es lo poco que se de JS, es muy parecido a C#. Lo de las clases si que no tengo ni idea como se maneja JS.

Febrero 19, 2018, 11:55:46 PM #2 Ultima modificación: Febrero 20, 2018, 11:01:12 AM por pioj
Gracias por contestar lightbug
 
Entonces si yo tengo en Js :
 



   
      var gravedad : float = 40.0;
   

[/quote]
 
En C# seria así.....?
 



   
      float  gravedad = 40.0;
   

[/quote]
 
este puede que este bien porque es el mas fácil, pero con este otro cambia porque no tengo ni idea..
 
JS :
 



   
      private var moveDerecha : Vector2 = Vector2.zero;
   

[/quote]
 
C# seria asi ?
 



   
      private Vector2 moveDerecha = Vector2.zero;
   

[/quote]
 
 
 
¿alguien podría traducirme a C# estas tres variables? solo seria para entenderlo
 

private var anim : Animator;
private var moveDerecha : Vector2 = Vector2.zero;
var velocidad : float = 3.0;

 
 

Febrero 20, 2018, 12:44:30 AM #3 Ultima modificación: Febrero 20, 2018, 12:45:25 AM por brok

private Animator anim;
private Vector2 moveDerecha = Vector2.zero;
public float velocidad = 3.0f;

 
 
 
A si de simple.

En primer lugar quisiera corregirte y decirte que Java no es lo mismo que JavaScript y puede dar lugar a que te den codigo escrito en Java que nada tiene que ver con JavaScript, y luego vienen los errores, y el "no funciona". Y ahora vamos al meollo de la cuestion. Te pongo varios ejemplos escritos en 3 codigos para que vayas encontrando la relacion.

 
 

// Ejemplo en Java
public class MiClase{
private float _numero;
public boolean boleano = false;
public double numeroLargo;
public string cadenaTexto;

public MiClase(){} // contructor de la clase sin parametros
public MiClase(float pNumero){ //constructor de la clase con parametro
   this._numero = pNumero;
}
public void MiMetodo(){ // ejemplo de un metodo
   System.out.println("Esto lo pinto en consola");
}
public float getNumero(){ // ejemplo de una funcion
   return this._numero;
}
public static void Main(string args[]){
   // esta funcion es la que se ejecuta para lanzar la aplicacion
}
}


// ejemplo en JavaScript
function MiObjeto(){ // construccion de un objeto en JavaScript
this.initialize.apply(this, arguments);
};
MiObjeto.prototype.initialize = function(){ // constructor del objeto
this._param1 = 1;
this._param2 = "texto";
     this._param3 = true;
};
Object.defineProperties(MiObjeto.prototype, { // getters de las propiedades del objeto
    param1: { get: function() { return this._param1; }, configurable: true },
    param2: { get: function() { return this._param2; }, configurable: true }
});
MiObjeto.prototype.miMetodo = function(valor){ // metodo del objeto con parametros
this._param2 = valor;
};
MiObjeto.prototype.miFuncion = function(){ // funcion del objeto
return this._param3;
}


//ejemplo en C#
public class MiClase{
private float _numero1;
private int _numero2;
private string _texto;
private bool _boleano;
public int numeroPublico = 10;
public MiClase(float n1, float n2, string txt, bool bol){ // constructor de la clase con parametros
   _numero1 = n1;
   _numero2 = n2;
   _texto = txt;
   _boleano = bol;
}
public void MiMetodo(){ // metodo de la clase
   Debug.Log("Esto lo pinta por consola");
}
public bool IsActive(){ // funcion de la clase
   return _boleano;
}
}

 
Como podras comprobar existe una diferencia abismal entre Java y JavaScript, y ahi radica la importancia de diferenciar estos dos lenguajes. Otra cuestion es que el lenguaje JavaScript que usa unity no es el JavaScript como realmente seria, sino que es una adaptacion del lenguaje para que el interprete interno de unity pueda entenderlo. Y seguramente que el codigo que te he puesto como explicacion unity no seria capaz de interpretarlo y tiraria errores por todas partes.

 
 
No se me ocurren ejemplos mas extensos para que puedas ir captando la idea del cambio que existe en usar el lenguaje interpretado en JavaScript con el lenguaje C# usados en unity.
 
Un saludo.

pues muchas gracias, iré aprendiendo ahora en c# 
 
GRACIAS!

Cita de: fulanodetal33 date=1519080946Entonces si yo tengo en Js :
   
   

var gravedad : float = 40.0;

   
      En C# seria así.....?
   
   
      float  gravedad = 40.0;
   


Claro, puede que me haya olvidado del var? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/var
 
de paso, si querés aprender C# ese link es ideal y tenés todo lo que vas a necesitar (fijate en las lista de la izq).

Cita de: lightbug date=1519096851Claro, puede que me haya olvidado del var? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/var
   
   
      de paso, si querés aprender C# ese link es ideal y tenés todo lo que vas a necesitar (fijate en las lista de la izq).
   


En javaScript cuando no pones nada si es privada o publica  o lo que sea es publica y en c# si no ponesnada es privada y la f de float si vas a ponerle el punto.
 

var gravedad : float = 40.0;
public float gravedad = 40.0f;

 
 

Pues ya lo he traducido todo a C# y ha funcionado bien.Por lo general no hay un cambio muy drástico de java a C# en unity, y he tenido suerte con eso.
 
Sólo necesitaba entender como cambiaban las variables y algunas cosas, pero lo he conseguido.
 
Lo malo es que tenia un montón de cosas hechas en java y ahora me toca volver a empezar de cero con todos los códigos que tenia
 
GRACIAS a todos! me habéis sido de gran ayuda!

Buenas, para tu información javascript sigue en unity, si lo quitasen habría miles de quejas porque como tu y como yo somos millones de usuarios que preferimos java, sólo tienes que crear el fichero desde el propio visualstudio, vas a archivos,nuevo fichero y te saldrá javascript ;) 

Cita de: ecko date=1519382959Buenas, para tu información javascript sigue en unity, si lo quitasen habría miles de quejas porque como tu y como yo somos millones de usuarios que preferimos java, sólo tienes que crear el fichero desde el propio visualstudio, vas a archivos,nuevo fichero y te saldrá javascript ;) 
   


Igual no te pongas happy happy https://blogs.unity3d.com/es/2017/08/11/unityscripts-long-ride-off-into-the-sunset/
 
en la parte de "How will it happen?" dice:
 


  1.    empiezan a quitar soporte desde el mismo asset store a todo paquete hecho en JS o Unityscript,


  2.    (lo que mencionas) : " All we have done at this point is remove the menu item; all the support is still there " es decir que solo quitaron el create menu asset Unity Script,


  3.    Están haciendo un "C# automatic conversion tool", es basicamente vaselina


Está muy bien que prefieras esto o aquello no hay problema desde tu punto de vista, pero Unity hoy en día es como el software más inclusivo y solidario de todos los engines (uno de los grandes por así decirlo), y le pasa que no tiene nada en claro... mirá Unreal, usando UnrealScript desde sus comienzos, en UE4 pasó a C++, así nomás, querés usar Unreal? cambia de lenguaje, ni paso a paso ni nada, de un tirón, obviamente sigue siendo un exito igual o mejor que antes, simplemente por que sabían que era lo mejor y lo hicieron, es gente más seria por supuesto. Unity tiene todas y cada una de las razones para hacer lo mismo con JS, pero tienen/tuvieron... miedo? Encima UnityScirpt funciona encima de Boo (lo cual no tenia idea):
 
" The Boo compiler itself has stuck around, though, because UnityScript is actually a layer on top of Boo – it uses the Boo runtime libraries, and the UnityScript compiler is written in Boo. This has allowed you to continue using .boo files in your projects, even if there's nothing in Unity that mentions it any more. "
 
... y sí boo asusta y mucho... ba dum   piissst!!
 
 

Etiquetas: