Noticias

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

Temas recientes

No puedo modificar ThirdPersonCharacter por código

Iniciado por Jose Manuel Unity, Enero 30, 2019, 05:30:52 PM

Tema anterior - Siguiente tema
Enero 30, 2019, 05:30:52 PM Ultima modificación: Enero 31, 2019, 03:37:03 PM por Bamf
utilizo este código
 

var hg = gameObject.GetComponent<ThirdPersonCharacter>();
        hg.m_MoveSpeedMultiplier = 0.5f;

 
y me da este error
 
 'ThirdPersonCharacter' does not contain a definition for 'm_MoveSpeedMultiplier' and no accessible extension method 'm_MoveSpeedMultiplier' accepting a first argument of type 'ThirdPersonCharacter' could be found (are you missing a using directive or an assembly reference?)
 
A ver si alguien me puede alumbrar

Cita de: Jose Manuel Unity date=1548865852utilizo este código
   
   
      var hg = gameObject.GetComponent<ThirdPersonCharacter>();
        hg.m_MoveSpeedMultiplier = 0.5f;

   
   
      y me da este error
   
   
       'ThirdPersonCharacter' does not contain a definition for 'm_MoveSpeedMultiplier' and no accessible extension method 'm_MoveSpeedMultiplier' accepting a first argument of type 'ThirdPersonCharacter' could be found (are you missing a using directive or an assembly reference?)
   
   
      A ver si alguien me puede alumbrar
   


Metete en el script, fijate si tiene ese miembro. Si lo tiene fijate que tan accesible es (viendo el mensaje se puede ver que no es public, por lo menos el "m_MoveSpee...."), quizás sea un getter, por ejemplo:
 

float m_moveSpeedMultiplier;
public float MovespeedMultiplier
{
get
{
   return m_moveSpeedMultiplier;
}
}

 
 y no puedas modificarlo, solo obtenerlo ... no creo, no tendría mucho sentido.
 
O quizás esté en la forma de getter/setter (seguramente) y puedas modificarlo tocando "MoveSpeedMultiplier" en vez de "m_MoveSpeedMultiplier".
 

float m_moveSpeedMultiplier;
public float MovespeedMultiplier
{
get
{
   return m_moveSpeedMultiplier;
}
set
{
   m_moveSpeedMultiplier = value;
}
}

 
 
 
Saludos

Enero 30, 2019, 06:19:45 PM #2 Ultima modificación: Enero 31, 2019, 03:36:55 PM por Bamf
Muchas gracias  lightbug por tu pronta respuesta. Esta asi:
 
 
 


[SerializeField] float m_MoveSpeedMultiplier = 1f;
entiendo que es una variable pública. Lo que no se es si se puede modificar.

 
 
 
 

Cita de: Jose Manuel Unity date=1548868785entiendo que es una variable pública
   


No, no es publica es privada pero está serializada por el editor, es decir que aparece en el inspector, las variables publicas también aparecen en el inspector.
 
Eso está así porque está pensado para que la modifiques cuando estás en la escena editando cosas, no en runtime.
 
Podés aagregarle justo abajo lo que te puse arriba o directamente hacer esto:
 

[SerializeField] float m_MoveSpeedMultiplier = 1f;
public void SetMoveSpeedMultiplier(float multiplier)
{
m_MoveSpeedMultiplier = multiplier;
m_MoveSpeedMultiplier = Mathf.Clamp( m_MoveSpeedMultiplier , 0 , Mathf.Infinity );
}

 
y desde afuera usas:
 

var thirdPersonController = gameObject.GetComponent<ThirdPersonCharacter>();
thirdPersonController.SetMoveSpeedMultiplier(0.5f);

 
 

Eres una maquina. Muchas gracias por tu excelente explicación.
 
 
 
saludos

Si está resuelto, marcadlo como BestAnswer, pls...

Cita de: pioj date=1549053030Si está resuelto, marcadlo como BestAnswer, pls...
   


Como se hace??
 
 

Etiquetas: