- Home /
 
 
               Question by 
               NoahTheHedgehog · Mar 30, 2020 at 01:44 PM · 
                terrainalignmentcapsulecollideralign two objects  
              
 
              How to rotate a player to match the terrain slope?
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class PlayerController : MonoBehaviour
 {
     public float moveSpeed;
     //public Rigidbody theRB;
     public float jumpForce;
     public CharacterController controller;
     private Vector3 moveDirection;
     public float gravityScale;
 
     public Animator anim;
     
     public Transform pivot;
     
     public float rotateSpeed;
 
     public GameObject playerModel;
     public bool grounded;
     private Vector3 posCur;
     private Quaternion rotCur;
 
     // Start is called before the first frame update
     void Start()
     {
         pivot.parent = null;
         controller = GetComponent<CharacterController>();
     }
 
     // Update is called once per frame
     void Update()
     {
         
 
     /*theRB.velocity = new Vector3(Input.GetAxis("Horizontal") * moveSpeed, theRB.velocity.y, Input.GetAxis("Vertical") * moveSpeed);
 
     if (Input.GetButtonDown("Jump"))
     {
         theRB.velocity = new Vector3(theRB.velocity.x, jumpForce, theRB.velocity.z);
     }*/
 
     //moveDirection = new Vector3(Input.GetAxis("Horizontal") * moveSpeed, moveDirection.y, Input.GetAxis("Vertical") * moveSpeed);
     float yStore = moveDirection.y;
         moveDirection = (transform.forward * Input.GetAxis("Vertical") * moveSpeed) + (transform.right * Input.GetAxis("Horizontal") * moveSpeed);
         moveDirection.y = yStore;
 
         if (controller.isGrounded)
         {
             moveDirection.y = 0f;
             if (Input.GetButtonDown("Jump"))
             {
                 moveDirection.y = jumpForce;
             }
         }
         moveDirection.y = moveDirection.y + (Physics.gravity.y * gravityScale * Time.deltaTime);
         controller.Move(moveDirection * Time.deltaTime);
 
         
 
         if (Input.GetAxis("Horizontal") !=0 || Input.GetAxis("Vertical") !=0)
         {
             transform.rotation = Quaternion.Euler(0f, pivot.rotation.eulerAngles.y, 0f);
             Quaternion newRotation = Quaternion.LookRotation(new Vector3(moveDirection.x, 0f, moveDirection.z));
             playerModel.transform.rotation = Quaternion.Slerp(playerModel.transform.rotation, newRotation, rotateSpeed * Time.deltaTime);
 
         }
 
         anim.SetBool("isGrounded", controller.isGrounded);
         anim.SetFloat("speed", (Mathf.Abs(Input.GetAxis("Vertical")) + Mathf.Abs(Input.GetAxis("Horizontal"))));
 
 
     }
 }
 
               Is there a code I can add to make it so the character can be rotated to be aligned with the terrain? It is in unity 3D, and I'm not using a capsule collider as my player collision. I want to find out how to rotate the player to align them with the terrain because I am trying to make a sonic game, and I can't find out how to rotate the player on slopes, or loops, like in Sonic Adventure 2.
               Comment
              
 
               
              Your answer