Desde mods de consolas retro hasta tutoriales de desarrollo de videojuegos.
Suscriptores
Visualizaciones
Vídeos
La consola no detecta el JoyCon izquierdo en modo portátil. Sustitución del carril lateral.
VER DETALLES
Restauración total de una GameBoy Advance. Instalación de pantalla IPS retroiluminada.
VER DETALLES
Proyecto personal extremo: 3 botones mecánicos, encoder rotativo, Hub USB 2.0 y puertos de Mega Drive.
VER DETALLESAcer redefine el gaming con el Predator XB273U F6 de 1000 Hz y monitores QD-OLED, 5K y 6K. ¡Descubre la próxima generación de pantallas!
Descubre cómo AGON by AOC y NVIDIA G-SYNC Pulsar redefinen la experiencia en monitores gaming. Rendimiento competitivo de alta gama para jugadores exigentes.
Descubre las irresistibles ofertas de Teufel para San Valentín 2026 en auriculares, barras de sonido y altavoces. Mejora tu audio con descuentos exclusivos.
AGON by AOC, referente mundial en monitores gaming, nos sorprende con una noticia que hará vibrar a la comunidad: la llegada de sus primeros monitores QD-OLED a la gama AOC GAMING
Actualización del Character Controller para aplicar deslizamientos en pendientes.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
//Variables movimiento
float horizontalMove;
float verticalMove;
private Vector3 playerInput;
public CharacterController player;
public float playerSpeed;
public float gravity;
public float fallVelocity;
public float jumpForce;
//Varaibles movimiento relativo a camara
public Camera mainCamera;
private Vector3 camForward;
private Vector3 camRight;
private Vector3 movePlayer;
//Variables deslizamiento en pendientes
public bool isOnSlope = false;
private Vector3 hitNormal;
public float slideVelocity;
public float slopeForceDown;
// Cargamos el componente CharacterController en la variable player al iniciar el script
void Start()
{
player = GetComponent();
}
// Bucle de juego que se ejecuta en cada frame
void Update()
{
//Guardamos el valor de entrada horizontal y vertical para el movimiento
horizontalMove = Input.GetAxis("Horizontal");
verticalMove = Input.GetAxis("Vertical");
playerInput = new Vector3(horizontalMove, 0, verticalMove); //los almacenamos en un Vector3
playerInput = Vector3.ClampMagnitude(playerInput, 1); //Y limitamos su magnitud a 1 para evitar aceleraciones en movimientos diagonales
CamDirection(); //Llamamos a la funcion CamDirection()
movePlayer = playerInput.x * camRight + playerInput.z * camForward; //Almacenamos en movePlayer el vector de movimiento corregido con respecto a la posicion de la camara.
movePlayer = movePlayer * playerSpeed; //Y lo multiplicamos por la velocidad del jugador "playerSpeed"
player.transform.LookAt(player.transform.position + movePlayer); //Hacemos que nuestro personaje mire siempre en la direccion en la que nos estamos moviendo.
SetGravity(); //Llamamos a la funcion SetGravity() para aplicar la gravedad
PlayerSkills(); //Llamamos a la funcion PlayerSkills() para invocar las habilidades de nuestro personaje
player.Move(movePlayer * Time.deltaTime); //Y por ultimo trasladamos los datos de movimiento a nuestro jugador * Time.deltaTime
//De este modo mantenemos unos FPS estables independientemente de la potencia del equipo.
//Debug.Log("Tocando el suelo: " + player.isGrounded); //Descomenta esta linea si quieres monitorizar si estas tocando el suelo en la consola de depuracion
}
//Funcion para determinar la direccion a la que mira la camara.
public void CamDirection()
{
//Guardamos los vectores correspondientes a la posicion/rotacion de la carama tanto hacia delante como hacia la derecha.
camForward = mainCamera.transform.forward;
camRight = mainCamera.transform.right;
//Asignamos los valores de "y" a 0 para no crear conflictos con otras operaciones de movimiento.
camForward.y = 0;
camRight.y = 0;
//Y normalizamos sus valores.
camForward = camForward.normalized;
camRight = camRight.normalized;
}
//Funcion para las habilidades de nuestro jugador.
public void PlayerSkills()
{
//Si estamos tocanto el suelo y pulsamos el boton "Jump"
if (player.isGrounded && Input.GetButtonDown("Jump"))
{
fallVelocity = jumpForce; //La velocidad de caida pasa a ser igual a la velocidad de salto
movePlayer.y = fallVelocity; //Y pasamos el valor a movePlayer.y
}
}
//Funcion para la gravedad.
public void SetGravity()
{
//Si estamos tocando el suelo
if (player.isGrounded)
{
//La velocidad de caida es igual a la gravedad en valor negativo * Time.deltaTime.
fallVelocity = -gravity * Time.deltaTime;
movePlayer.y = fallVelocity;
}
else //Si no...
{
//aceleramos la caida cada frame restando el valor de la gravedad * Time.deltaTime.
fallVelocity -= gravity * Time.deltaTime;
movePlayer.y = fallVelocity;
}
SlideDown(); //Llamamos a la funcion SlideDown() para comprobar si estamos en una pendiente
}
//Esta funcion detecta si estamos en una pendiente muy pronunciada y nos desliza hacia abajo.
public void SlideDown()
{
//si el angulo de la pendiente en la que nos encontramos es mayor o igual al asignado en player.slopeLimit, isOnSlope es VERDADERO
isOnSlope = Vector3.Angle(Vector3.up, hitNormal) >= player.slopeLimit;
if (isOnSlope) //Si isOnSlope es VERDADERO
{
//movemos a nuestro jugador en los ejes "x" y "z" mas o menos deprisa en proporcion al angulo de la pendiente.
movePlayer.x += ((1f - hitNormal.y) * hitNormal.x) * slideVelocity;
movePlayer.z += ((1f - hitNormal.y) * hitNormal.z) * slideVelocity;
//y aplicamos una fuerza extra hacia abajo para evitar saltos al caer por la pendiente.
movePlayer.y += slopeForceDown;
}
}
//Esta funcion detecta cuando colisinamos con otro objeto mientras nos movemos
private void OnControllerColliderHit(ControllerColliderHit hit)
{
//Almacenamos la normal del plano contra el que hemos chocado en hitNormal.
hitNormal = hit.normal;
}
} Actualización del Character Controller para agregar la capacidad de saltar.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerControllerTutorial4 : MonoBehaviour {
float horizontalMove;
float verticalMove;
private Vector3 playerInput;
public CharacterController player;
public float playerSpeed;
public float gravity;
public float fallVelocity;
public Camera mainCamera;
private Vector3 camForward;
private Vector3 camRight;
private Vector3 movePlayer;
public float jumpForce = 8f;
public bool isJumping = false;
// Use this for initialization
void Start()
{
player = GetComponent();
}
// Update is called once per frame
void Update() {
PlayerInput();
CamDirection();
PlayerMovement();
SetGravity();
PlayerSkills();
player.Move(movePlayer * Time.deltaTime);
Debug.Log(player.isGrounded);
}
//Funcion que obtiene el imnput de movimiento de nuestro jugador.
public void PlayerInput()
{
horizontalMove = Input.GetAxis("Horizontal");
verticalMove = Input.GetAxis("Vertical");
playerInput = new Vector3(horizontalMove, 0, verticalMove);
playerInput = Vector3.ClampMagnitude(playerInput, 1);
}
//Funcion para determinar la direccion a la que mira la camara.
public void CamDirection()
{
camForward = mainCamera.transform.forward;
camRight = mainCamera.transform.right;
camForward.y = 0;
camRight.y = 0;
camForward = camForward.normalized;
camRight = camRight.normalized;
}
public void PlayerMovement()
{
movePlayer = playerInput.x * camRight + playerInput.z * camForward;
movePlayer = movePlayer * playerSpeed;
player.transform.LookAt(player.transform.position + movePlayer);
}
public void PlayerSkills()
{
if (player.isGrounded)
{
isJumping = false;
}
//Jump
if (player.isGrounded && Input.GetButtonDown("Jump"))
{
isJumping = true;
fallVelocity = jumpForce;
movePlayer.y = fallVelocity;
}
}
//Funcion para la gravedad.
public void SetGravity()
{
if (player.isGrounded)
{
fallVelocity = -gravity * Time.deltaTime;
movePlayer.y = fallVelocity;
}
else
{
fallVelocity -= gravity * Time.deltaTime;
movePlayer.y = fallVelocity;
}
}
} Actualización del Character Controller para aplicarle gravedad.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
float horizontalMove;
float verticalMove;
private Vector3 playerInput;
public CharacterController player;
public float playerSpeed;
public float gravity;
public float fallVelocity;
public Camera mainCamera;
private Vector3 camForward;
private Vector3 camRight;
private Vector3 movePlayer;
// Use this for initialization
void Start()
{
player = GetComponent();
}
// Update is called once per frame
void Update() {
horizontalMove = Input.GetAxis("Horizontal");
verticalMove = Input.GetAxis("Vertical");
playerInput = new Vector3(horizontalMove, 0, verticalMove);
playerInput = Vector3.ClampMagnitude(playerInput, 1);
CamDirection();
movePlayer = playerInput.x * camRight + playerInput.z * camForward;
movePlayer = movePlayer * playerSpeed;
player.transform.LookAt(player.transform.position + movePlayer);
SetGravity();
player.Move(movePlayer * Time.deltaTime);
Debug.Log(player.isGrounded);
}
//Funcion para determinar la direccion a la que mira la camara.
public void CamDirection()
{
camForward = mainCamera.transform.forward;
camRight = mainCamera.transform.right;
camForward.y = 0;
camRight.y = 0;
camForward = camForward.normalized;
camRight = camRight.normalized;
}
//Funcion para la gravedad.
public void SetGravity()
{
if (player.isGrounded)
{
fallVelocity = -gravity * Time.deltaTime;
movePlayer.y = fallVelocity;
}
else
{
fallVelocity -= gravity * Time.deltaTime;
movePlayer.y = fallVelocity;
}
}
} Movimiento del personaje con respecto a la posición de la cámara en tercera persona.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
public float horizontalMove;
public float verticalMove;
private Vector3 playerInput;
public CharacterController player;
public float playerSpeed;
private Vector3 movePlayer;
public Camera mainCamera;
private Vector3 camForward;
private Vector3 camRight;
// Use this for initialization
void Start () {
player = GetComponent();
}
// Update is called once per frame
void Update () {
horizontalMove = Input.GetAxis("Horizontal");
verticalMove = Input.GetAxis("Vertical");
playerInput = new Vector3(horizontalMove, 0, verticalMove);
playerInput = Vector3.ClampMagnitude(playerInput, 1);
CamDirection();
movePlayer = playerInput.x * camRight + playerInput.z * camForward;
player.transform.LookAt(player.transform.position + movePlayer);
player.Move(movePlayer * playerSpeed * Time.deltaTime);
Debug.Log(player.velocity.magnitude);
}
//Funcion para determinar la direccion a la que mira la camara.
public void CamDirection()
{
camForward = mainCamera.transform.forward;
camRight = mainCamera.transform.right;
camForward.y = 0;
camRight.y = 0;
camForward = camForward.normalized;
camRight = camRight.normalized;
}
} Movimiento básico para controlar un personaje en un entorno 3D en Unity
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
public float horizontalMove;
public float verticalMove;
public CharacterController player;
public float playerSpeed;
// Use this for initialization
void Start () {
player = GetComponent();
}
// Update is called once per frame
void Update () {
horizontalMove = Input.GetAxis("Horizontal");
verticalMove = Input.GetAxis("Vertical");
}
private void FixedUpdate()
{
player.Move(new Vector3(horizontalMove, 0, verticalMove) * playerSpeed * Time.deltaTime);
}
} Script simple para mover objetos hacia adelante.
void Update() { transform.Translate(Vector3.forward * speed * Time.deltaTime); }Selección de mis tutoriales más populares.
Bienvenido a mi taller de modding y reparación!