Ao principio, engade un novo guión ao teu personaxe. Nomea o guión PlayerMovement. Primeiro necesitamos unha referencia do guión do movemento do xogador ao controlador de caracteres. O guión dille que mova o personaxe.
Ao principio creamos unha variable:
controlador público CharacterController2D;
Despois tes a opción de arrastrar o controlador de personaxes a un espazo libre.
Para o movemento hai que definir a dirección e a velocidade do movemento. Para iso precisa a entrada do reprodutor:
Tecla de frecha esquerda ou A = 1
Tecla de frecha cara á dereita ou D = -1
É o mesmo co controlador.
horizontalMove = Input.GetAxisRaw ("Horizontal");
A área de actualización organiza a entrada do reprodutor.
FixedUpdate úsase para a física. Esta función é necesaria.
Crea outra variable:
flotar horizontalMover = 0f;
FixedUpdate move o personaxe.
void FixedUpdate()
{
controlador.Move (horizontalMove, false, false);
}
O primeiro falso significa que o xogador non debe agacharse e o segundo non debe saltar.
Requírese unha definición para Move no script do controlador do reprodutor:
public void Move (movemento flotante, agachamento bool, salto bool)
{}
Como seguinte variable necesitas:
flotador público runSpeed = 40f;
A entrada do reprodutor multiplícase pola velocidade de execución:
horizontalMove = Input.GetAxisRaw ("Horizontal") * runSpeed;
Se o xogador se move á esquerda e á dereita, o movemento será de -40 e 40.
O movemento tamén se multiplica por Time.fixedDeltaTime.
Time.fixedDeltaTime é o tempo desde que se chamou a última función FixedUpdate. Isto especifica que o movemento ten lugar na mesma cantidade, non importa a frecuencia coa que se chame a función. Así, a velocidade do personaxe é a mesma, independentemente de que sistemas ou plataformas se trate.
Se o peón cae, pode desprazarse un pouco ao chan.
É por iso que en Rigidbody2D a detección de colisións pasa de discreta a continua.
Para saltar, compróbase se prememos a tecla de salto ou non:
if (input.GetButtonDown ("Saltar"))
{
saltar = verdadeiro;
}
Isto tamén debería facerse na función FixedUpdate. A información transfírese cunha variable booleana:
salto bool = falso;
A variable jump tamén se engade en FixedUpdate.
Cando se preme o botón de salto, o script PlayerMovement reenvía ao controlador que queremos saltar. Despois diso será de novo
saltar = falso;
Isto debe definirse xa que non queremos saltar para sempre.
Outro problema é que cando o personaxe intenta saltar a unha plataforma, queda atrapado alí. O personaxe debería desprazarse cara abaixo e caer sobre el. Para iso é necesario un material de física. En Proxecto, fai clic co botón dereito no botón Crear -> PhysicsMaterial2D
Noméao Esvaradío. Define Friction and Bounciness a 0. Toma o PhysicsMaterial e arrástrao ao material desde o BoxCollider do xogador.
Se definiches varios colisionadores para o protagonista, tamén podes asignar o material físico aos outros colisionadores.
A disposición do teclado defínese a través de Unity InputManager. Podes atopalo na Configuración do proxecto.
Fai clic co botón dereito no botón de salto e elixe Duplicar Array Element. Chámalle "Agachado".
Se os xogadores queren xogar coas teclas de frecha, simplemente defina un botón alternativo.
Repita os pasos desde saltar ata agacharse:
Cando se solta o botón para agacharse, o personaxe tamén debería deixar de agacharse. Polo tanto, non funciona como saltar. Se os xogadores queren xogar coas teclas de frecha, simplemente defina un botón alternativo.
Engade o seguinte na función de actualización:
else if (Input.GetButtonUp ("Agacharse"))
{
agacharse = falso;
}
Para que as seccións correspondentes aparezan no controlador de caracteres, tes que cambialas de privado a público:
Tira iso Colliderque debería desactivarse no campo correspondente. Se hai un "teito" enriba de ti, o teu personaxe diminuirá a velocidade cando premes o botón de agacharte.