- Home /
Question by
kkdevakyea · Nov 29, 2020 at 07:28 PM ·
character controllercharacter movement
Wall Crawl Unity
Hi, I'm new at programming and I'm trying to make a sort of Spider-Man game. I need to wall walk, not ledge climb but I don't find anything. Anyhelp?? I use a Character Controller. Here is my code:
public class SMMovement : MonoBehaviour
{
//movimientoVars
public float horizontalMove;
public float verticalMove;
public CharacterController player;
public float playerSpeed = 6.0f;
private Vector3 playerInput;
private Vector3 movePlayer;
//CamVars
public Camera cam;
private Vector3 camRight;
private Vector3 camFwd;
//GravityVars
public Transform gCheck;
float groundDist = 0.4f;
public LayerMask ground;
public bool isGrounded;
public float gravity = 9.8f;
public float fallVelocity;
//Habilidades
public float jumpForce;
//Animations
public Animator anim;
//WallClimb
public bool isClimbing = false;
public Transform wall;
public Rigidbody rb;
void Start()
{
player = GetComponent<CharacterController>();
Cursor.lockState = CursorLockMode.Locked;
anim = GetComponent<Animator>();
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (isClimbing == false)
{
player.enabled = true;
rb.isKinematic = true;
//Camara
Cam();
//Movimiento
horizontalMove = Input.GetAxis("Horizontal");
verticalMove = Input.GetAxis("Vertical");
playerInput = new Vector3(horizontalMove, 0f, verticalMove);
playerInput = Vector3.ClampMagnitude(playerInput, 1);
if (playerInput != new Vector3(0, 0, 0))
{
anim.SetBool("isMoving", true);
}
else
{
anim.SetBool("isMoving", false);
}
movePlayer = playerInput.x * camRight + playerInput.z * camFwd;
player.transform.LookAt(player.transform.position + movePlayer);
//Gravedad
isGrounded = Physics.CheckSphere(gCheck.position, groundDist, ground);
SetGravity();
anim.SetBool("isGrounded", isGrounded);
//Habilidades
Habilities();
player.Move(movePlayer * playerSpeed * Time.deltaTime);
}
if(isClimbing == true)
{
rb.isKinematic = false;
player.enabled = false;
Physics.gravity = wall.position - transform.position;
transform.rotation = Quaternion.FromToRotation(transform.up, - Physics.gravity) * transform.rotation;
gameObject.transform.Translate(Input.GetAxis("Horizontal") * playerSpeed * Time.deltaTime, 0f,Input.GetAxis("Vertical") * playerSpeed * Time.deltaTime);
}
}
private bool jumping = false;
//CamaraSet
void Cam()
{
camFwd = cam.transform.forward;
camRight = cam.transform.right;
camFwd.y = 0f;
camRight.y = 0f;
camFwd = camFwd.normalized;
camRight = camRight.normalized;
}
//Habilities
void Habilities()
{
if(isGrounded == true && Input.GetButtonDown("Jump"))
{
fallVelocity = jumpForce;
movePlayer.y = fallVelocity;
}
}
//GravitySet
void SetGravity()
{
if(isGrounded == true)
{
fallVelocity = -gravity * Time.deltaTime;
movePlayer.y = fallVelocity;
}
else
{
fallVelocity -= gravity * Time.deltaTime;
movePlayer.y = fallVelocity;
}
}
}
Comment