Crea tu propio CharacterController en Unity3D

preview_player
Показать описание
aquí esta el código que contiene el CharacterController

estos son
caminar.
correr.
agacharse.
saltar.
deslizarse por colinas inclinadas.
movimiento al caminar.
camera.

descargar el archivo con el código y lo copian en su código.

No tiene virus

si desconfían de esa descarga. que no tiene nada malo
en los comentarios estará el código #unity #turorial #juegos
#macraftiano03 #macraftianoHD #fnfmod #fridaynhitfunkin #sam2 #dibujos #martintiempo2 #generrite #fnf #fnfmods #fnfost #fnfmod #fnfanimation #amongus #sussyballs #parati #flp #fridaynightfunkin #gachaclub #gachalife #matenme #supergenerite #sus #among #SkibidiFunkin #speakerman #cameraman #skibiditoilet #tvman #dafugboom #cover #fnfexe #exe #skibidifunkdown #elementalsoul #elements #element #ice #icesoul #hielo #elemental
Рекомендации по теме
Комментарии
Автор

Aquí copien el código completo en su pleyermove o movimiento_de_personaje o CharacterController

Código aquí por si no quieren descargar el mismo código y copiarlo en su código personaje


requiere un Charactercontroller o si no le saldra errores

public bool canMove {get; private set;} = true;
private bool IsSprinting => canSprint && Input.GetKey(sprintKey);
private bool ShouldJump => Input.GetKeyDown(JumpKey) &&
private bool ShouldCrouch => Input.GetKeyDown(crouchKey) && !duringCrouchAnimation &&


[Header("Functional Options")]
[SerializeField] private bool canSprint = true;
[SerializeField] private bool canJump = true;
[SerializeField] private bool canCrouch = true;
[SerializeField] private bool canUseHeadbob = true;
[SerializeField] private bool willSlideOnSlopes = true;



[Header("Controls")]
[SerializeField] private KeyCode sprintKey = KeyCode.LeftControl;
[SerializeField] private KeyCode JumpKey = KeyCode.Space;
[SerializeField] private KeyCode crouchKey = KeyCode.LeftShift;

[Header("Movement Parameters")]
[SerializeField] private float walkSpeed = 3.0f;
[SerializeField] private float sprintSpeed = 6.0f;
[SerializeField] private float crouchSpeed = 1.5f;
[SerializeField] private float slopeSpeed = 8f;

[Header("Look Parameters")]
[SerializeField, Range(1, 10)] private float lookSpeedX = 2.0f;
[SerializeField, Range(1, 10)] private float lookSpeedY = 2.0f;
[SerializeField, Range(1, 180)] private float upperLookLimit = 80.0f;
[SerializeField, Range(1, 180)] private float lowerLookLimit = 80.0f;

[Header("Jumping Parameters")]
[SerializeField] private float jumpForce = 8.0f;
[SerializeField] private float gravity = 30.0f;

[Header("Crouch Parameters")]
[SerializeField] private float crouchHeight = 0.5f;
[SerializeField] private float standingHeight = 2f;
[SerializeField] private float timeToCrouch = 0.25f;
[SerializeField] private Vector3 crouchingCenter = new Vector3(0, 0.5f, 0);
[SerializeField] private Vector3 standingCenter = new Vector3(0, 0, 0);
private bool isCrouching;
private bool duringCrouchAnimation;


[Header("Headbob Parameters")]
[SerializeField] private float walkBobSpeed = 14f;
[SerializeField] private float walkBobAmount = 0.5f;
[SerializeField] private float sprintBobSpeed = 18f;
[SerializeField] private float sprintBobAmount = 0.11f;
[SerializeField] private float crouchBobSpeed = 8f;
[SerializeField] private float crouchBobAmount = 0.025f;
private float defaultYPos = 0;
private float timer;

private Vector3 hitpointNormal;
private bool IsSliding
{
get
{

if && Physics.Raycast(transform.position, Vector3.down, out RaycastHit slopeHit, 2f))
{
hitpointNormal = slopeHit.normal;
return Vector3.Angle(hitpointNormal, Vector3.up) >
}
else
{
return false;
}
}
}

private Camera playerCamera;
private CharacterController characterController;

private Vector3 moveDirection;
private Vector2 currentInput;

private float rotationX = 0;



void Awake()
{
playerCamera =
characterController =
defaultYPos =
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;

}

void Update()
{
if (canMove)
{
HandleMovementInput();
HandleMouseLook();
if(canJump)
HandleJump();
if (canCrouch)
HandleCrouch();
if (canUseHeadbob)
HandleHeadbob();

ApplyFinalMovements();
}
}
private void HandleMovementInput()
{
currentInput = new Vector2((IsSprinting ? sprintSpeed : isCrouching ? crouchSpeed : walkSpeed) * Input.GetAxis("Vertical"), (IsSprinting ? sprintSpeed : isCrouching ? crouchSpeed : walkSpeed) * Input.GetAxis("Horizontal"));
float moveDirectionY = moveDirection.y;
moveDirection = * currentInput.x) + * currentInput.y);
moveDirection.y = moveDirectionY;
}

private void HandleMouseLook()
{
rotationX -= Input.GetAxis("Mouse Y") * lookSpeedY;
rotationX = Mathf.Clamp(rotationX, -upperLookLimit, lowerLookLimit);
= Quaternion.Euler(rotationX, 0, 0);
transform.rotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X") * lookSpeedX, 0);
}

private void HandleJump()
{
if(ShouldJump)
moveDirection.y = jumpForce;
}

private void HandleCrouch()
{
if(ShouldCrouch)

}

private void HandleHeadbob()
{
return;
if(Mathf.Abs(moveDirection.x) > 0.1f || Mathf.Abs(moveDirection.z) > 0.1f)
{
timer += Time.deltaTime * (isCrouching ? crouchBobSpeed : IsSprinting ? sprintBobSpeed : walkBobSpeed);
= new Vector3(
playerCamera.transform.localPosition.x,
defaultYPos + Mathf.Sin(timer) * (isCrouching ? crouchBobAmount : IsSprinting ? sprintBobAmount : walkBobAmount),

}

}

private void ApplyFinalMovements()
{
if
moveDirection.y -= gravity * Time.deltaTime;

if(willSlideOnSlopes && IsSliding)
moveDirection += new Vector3(hitpointNormal.x, -hitpointNormal.y, hitpointNormal.z) * slopeSpeed;


* Time.deltaTime);

}

private IEnumerator CrouchStand()
{

if(isCrouching && Physics.Raycast(playerCamera.transform.position, Vector3.up, 1f))
yield break;

duringCrouchAnimation = true;

float timeElapsed = 0;
float targetHeight = isCrouching ? standingHeight : crouchHeight;
float currentHeight = characterController.height;
Vector3 targetCenter = isCrouching ? standingCenter : crouchingCenter;
Vector3 currentCenter = characterController.center;


while(timeElapsed < timeToCrouch)
{
characterController.height = Mathf.Lerp(currentHeight, targetHeight, timeElapsed/timeToCrouch);
characterController.center = Vector3.Lerp(currentCenter, targetCenter, timeElapsed/timeToCrouch);
timeElapsed += Time.deltaTime;
yield return null;
}
characterController.height = targetHeight;
characterController.center = targetCenter;

isCrouching = !isCrouching;

duringCrouchAnimation = false;
}

UniversoinfinitoSUGT
join shbcf.ru