Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - samorente

#1
Scripting / C# Estadísticas del personaje
Junio 01, 2019, 03:04:01 PM
Sí, estoy haciendo un curso online y apenas llevo un mes, lo siento si mis dudas son demasiado básicas, me gustaría saber como lo haría una persona con más experiencia para tomar ejemplo.
#2
Scripting / C# Estadísticas del personaje
Mayo 31, 2019, 06:40:19 PM
Hola a todos, he creado el siguiente código
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LevelScript : MonoBehaviour {
    public int experience;
    public int fuerza;
    public int Level
    {
        get {
            return experience / 750;
        }            
       
        
    }
    void levelUp()
    {
       if (Level = Level ++)
        {
            fuerza = fuerza++;
        }
    }
}

 
La variable experience está "anclada" a este otro script pero creo que para mi duda no es importante, aún así lo pongo por si acaso.
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unit***itor;
 
[CustomEditor(typeof(LevelScript))]
public class LevelScriptEditor : Editor
{
    public override void OnInspectorGUI()
    {
        LevelScript myTarget = (LevelScript)target;
        myTarget.experience = EditorGUILayout.IntField("Experience", myTarget.experience);
        EditorGUILayout.LabelField("Level", myTarget.Level.ToString());
    }
}

 


Mi duda es: quiero que cuando la variable Level se incremente, que también lo haga la variable fuerza.
 
Al poner el primer código me dice que la variable Level es de solo lectura y por lo tanto no me deja añadirla al if
 
¿Existe alguna forma de cambiar los permisos de la variable Level para que tenga permisos de escritura?
 
No se si mi dedución es correcta o si hay alguna otra manera mas óptima de hacer lo mismo (que seguramente la haya)
 
Muchas Gracias.
 
 
#3
Scripting / Acceder a componentes mediante if. C#.
Mayo 31, 2019, 06:28:50 PM
Cita de: lightbug date=1558622081Y como es que sabés que "en teoría" funciona si no te sale nada en consola (en realidad en teoría es poco probable que se cumpla). Yo tenía un amigo que cada vez que poniamos un break en código él quería hacer una variable para comprobar que en realidad X cosa pasara porque por alguna razón u otra sospecha que el lenguaje de programación lo podía estar traicionando , como que era algo maleable y dependía del clima... aca pasa algo similar pero con el Debug.Log, el lenguaje es así y si no ves lo que imprime en memoria pasa una de las dos:
   
   


  1.          No tenés habilitado la impresión o el log de mensajes (que ojo! puede ser, me ha pasado), lo habilitas con el boton dentro de la consola (al lado de los errores)
          

  2.       

  3.          No se  cumple la condición del if (probablemente sea esta).
          

  4.    

      Osea que volviste al punto inicial , Lee de vuelta esto:
   
   
      Estás usando = en vez de == (no se si es así en tu código o pasa acá)  -->  Usar == para float's no es recomendable usá Mathf.Approximately  ---> Aun así verificar igualdad no queda lindo en este caso (aclaro que no se como es que el objeto se mueve), la matemática de punto flotante tiene errores, que un objeto se mueva libremente, tenga la posición <x,y,z> y que vos termines por verificar eso en un if y sea correcto es muy poco pobrable, ah no ser que antes hayas impuesto que ese valor sea <x,y,z> en un momento dado, cosa que no se si estás haciendo.
   
   
      Osea, si querés verificar la posición asegurate que el objeto que vas a mover llegue a la posición (no más o menos, sino que lo haga --> =), para esto podés usar vector3.MoveTowards o verificar si está cerca de la posición con Vector3.Distance (la cercanía la elegís vos).
   
   
      ---> Un error que tuve anteriormente, puse que uses Mathf.Aproximately, para floats está bien, pero para vectores el mismo operador "==" hace uso de esto! (Vector3.Equals no lo hace)... ups!
   
   
      https://docs.unity3d.com/ScriptReference/Vector3-operator_eq.html
   
   
       
   
   
      No cometas el típico error de la soberbia de programación, lo digo porque es extremadamente común si arrancás a programar pensar de la siguiente manera "No importa lo que haga, esto tiene que andar y si no anda el problema no es lo que yo hice, el problema tiene que ser esto otro (Debug.Log en tu caso)". Trata de evitar esos valores super exactos de posición que nunca se van a dar, probá métodos como Vector3.distance, incluso si  desde afuera del script especificas la posición exacta para el objeto en cuestión "Vector3(-114.15f, 2.04f, -95.61f)" intenta reemplazar eso por un transform que haga de posicion objetivo (por supuesto asegurandote que al final al objeto lo movés a esa posición objetivo), el if te quedaría así:
   
   

if (evento.transform.position == objetivo.transform.position )
        {
            Debug.Log("Evento");
        }

   
       
   
   
      Saludos!
   


Hola perdón por la espera xD, ya lo solucioné para que se cumpliera la condición si o si lo que hice fué establecer la posición del objeto con anterioridad. 
 
Pero gracias de todas formas ahora entiendo que si quiero que pase algo (por ejemplo: si el personaje llega a un sitio que salte una cinemática) es mejor seleccionar un rango que poner medidas exactas, lo que no se si es mejor hacerlo como me dijistes con vector3.Distance o que si el personaje entra en contacto con un collider que salte la cinemática.
#4
Scripting / Acceder a componentes mediante if. C#.
Mayo 23, 2019, 03:05:47 PM
Muchas gracias por la respuesta.
 
Esto era solamente de prueba, ya que tuve curiosidad (asi que al no ser un proyecto real no tuve cuidado con el orden). Llegué a la conclusión de que es mejor usar los colliders si quiero que al llegar a un sitio pase algo. Lo que he estado haciendo con el anterior código (el que escribi en el foro) es poner manualmente en Unity los valores x, y, z que especifico en el script.
 
Pero ahora probé otra vez hacerlo con if (evento.transform.position == new Vector3(-114.15f, 2.04f, -95.61f)) especificando otra vez los valores manualmente en Unity y en teoría siempre se cumple la condición pero no imprime el mensaje por la consola, dejo otra vez el código por aquí
 


 
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
    private Transform evento;
    // Use this for initialization.
    void Start()
    {
        objeto();
    }
    // Update is called once per frame
    void Update()
    {
    }
    void objeto()
    {
        evento = GetComponent<Transform>();
 
        if (evento.transform.position == new Vector3(-114.15f, 2.04f, -95.61f))
        {
            Debug.Log("Evento");
        }
    }
}
 

 
 
#5
Scripting / Acceder a componentes mediante if. C#.
Mayo 22, 2019, 08:43:51 PM
Hola a todos, tengo una duda
 
Me gustaría hacer una cosa: cuando un objeto llegue hasta una posicion que suceda algo.
 
Lo he intentado hacer pero tengo error de sintaxis en la siguiente línea:
 

if (evento.position = new Vector3(-114.15f, 2.04f, -95.61f))

 


   
 

private Transform evento;
     void objeto()
        {
            
            evento = GetComponent<Transform>();
            
            if (evento.position = new Vector3(-114.15f, 2.04f, -95.61f))
            {
                Debug.Log("Evento");
            }
        }

 
Muchas Gracias.
#6
Presentaciones / Nuevo en este mundo
Mayo 22, 2019, 08:41:14 PM
Hola a todos, soy un estudiante que está aprendiendo a usar Unity y C# mediante un curso, pero decidí crearme una cuenta aquí para preguntar dudas y aprender de los demás.
 
Estoy muy contento de poder formar parte de esta comunidad.