Unity Spain

Mesa de ayuda => Unity3D => Scripting => Mensaje iniciado por: Jose Manuel Unity en Enero 30, 2019, 05:30:52 PM

Título: No puedo modificar ThirdPersonCharacter por código
Publicado por: Jose Manuel Unity en Enero 30, 2019, 05:30:52 PM
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
Título: No puedo modificar ThirdPersonCharacter por código
Publicado por: lightbug en Enero 30, 2019, 06:07:27 PM
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
Título: No puedo modificar ThirdPersonCharacter por código
Publicado por: Jose Manuel Unity en Enero 30, 2019, 06:19:45 PM
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.

 
 
 
 
Título: No puedo modificar ThirdPersonCharacter por código
Publicado por: lightbug en Enero 30, 2019, 07:54:25 PM
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);

 
 
Título: No puedo modificar ThirdPersonCharacter por código
Publicado por: Jose Manuel Unity en Enero 30, 2019, 09:10:47 PM
Eres una maquina. Muchas gracias por tu excelente explicación.
 
 
 
saludos
Título: No puedo modificar ThirdPersonCharacter por código
Publicado por: pioj en Febrero 01, 2019, 09:30:30 PM
Si está resuelto, marcadlo como BestAnswer, pls...
Título: No puedo modificar ThirdPersonCharacter por código
Publicado por: Jose Manuel Unity en Febrero 02, 2019, 03:52:33 PM
Cita de: pioj date=1549053030Si está resuelto, marcadlo como BestAnswer, pls...
   


Como se hace??