본문바로가기

지원

!!!!

Home > 지원 > Forum

Forum

케릭터 이동시 회전하기
  • 일단 쿼터뷰 방식의 키보드이동 입니다.
    여기서 케릭터가 회전을 ... 해야 하는데 .... 어디부분을 추가 해야할지 막막하네요
    코드는
    -----------------------------------------------------------------------------------

    public class DolsePlayerCtrl : MonoBehaviour

    {

      //스피드 조정 변수

      [SerializeField]

      private float walkSpeed;

      [SerializeField]

      private float runSpeed;

      private float applySpeed;


      //상태변수

      private bool isRun = false;

      private bool isGround = true;


      //땅 착지여부

      private CapsuleCollider capsuleCollider;

      private Rigidbody myRigid;


      // Use this for initialization

      void Start()

      {

        capsuleCollider = GetComponent<CapsuleCollider>();

        myRigid = GetComponent<Rigidbody>();

        applySpeed = walkSpeed;

      }

      // Update is called once per frame

      void Update()
      {
        IsGround();
        TryRun();
        Move();
      }


      // 지면체크

      private void IsGround()
      {
        isGround = Physics.Raycast(transform.position, Vector3.down, capsuleCollider.bounds.extents.y + 0.1f);
      }



      //달리기 시도

      private void TryRun()
      {
        if (Input.GetKey(KeyCode.LeftShift))
        {
          Running();
        }
        if (Input.GetKeyUp(KeyCode.LeftShift))
        {
          RunningCancle();
        }
      }



      //달리기 실행

      private void Running()
      {
        // 달리기 실행시 달리기 해제

        isRun = true;
        applySpeed = runSpeed;
      }



      //달리기 취소
      private void RunningCancle()
      {
        isRun = false;
        applySpeed = walkSpeed;
      }



      //움직임 실행

      private void Move()
      {
        float _moveDirX = Input.GetAxisRaw("Horizontal"); //Horizontal 을 사용하면 좌우 화살표or A,D를 이용한다
        float _moverDirZ = Input.GetAxisRaw("Vertical"); // Vertical 사용시 전후. W,S
        Vector3 _moveHorizontal = transform.right * _moveDirX;
        Vector3 _moveVertical = transform.forward * _moverDirZ;
        Vector3 _velocity = (_moveHorizontal + _moveVertical).normalized * applySpeed;
        myRigid.MovePosition(transform.position + _velocity * Time.deltaTime);

       // if (Input.GetKey(KeyCode.W))
       //{
       // this.transform.Translate(Vector3.forward * 5.0f * Time.deltaTime);
       // }
       // if (Input.GetKey(KeyCode.S))
       // {
       // this.transform.Translate(Vector3.back * 5.0f * Time.deltaTime);
       // }
       // if (Input.GetKey(KeyCode.A))
       // {
       //  this.transform.Translate(Vector3.left * 5.0f * Time.deltaTime);
       // }
       // if (Input.GetKey(KeyCode.D))
       // {
       // this.transform.Translate(Vector3.right * 5.0f * Time.deltaTime);
       // }
      }
    }

    --------------------------------------------------------------------------------------

    위 코드중 " 움직임실행 " 부분입니다.

    다른코드를 가져다 써도.... 이게 카메라가 문제인지.. 화면이 휙휙 돌아가고....

    카메라 코드 입니다 -------------------------------------------------

    public class FollowCam : MonoBehaviour {
      public Transform target;
      public float dist = 10.0f;
      public float height = 5.0f;
      public float smoothRotate = 5.0f;
      private Transform tr;

      // Use this for initialization

      void Start () {
        tr = GetComponent<Transform>();
      }

      // Update is called once per frame
      void Update () {
        float currYAngle = Mathf.LerpAngle(tr.eulerAngles.y, target.eulerAngles.y, smoothRotate * Time.deltaTime);
        Quaternion rot = Quaternion.Euler(0, currYAngle, 0);
        tr.position = target.position - (rot * Vector3.forward * dist) + (Vector3.up * height);
        tr.LookAt(target);
      }
    }
    ----------------------------------------------------------------------------------

    케릭터를 이동시 전후좌우 이동하며 케릭터가 회전을 하게 하려면 무엇을 추가 해야 할까요?

    부탁드립니다
  • Replies
  • void Update()
    {


      float h = Input.GetAxis("Horizontal");
      float v = Input.GetAxis("Vertical");

      //transform.Translate (0f, 0f, h * walkspeed * Time.deltaTime);

      //Move
      transform.Translate(0f, 0f, v * walkSpeed * Time.deltaTime);

      //Turn
      transform.Rotate(0f, h * turnSpeed * Time.deltaTime, 0f);



    }
    케릭이 회전하는게 아니라 화면이 회전을 합니다
    shjhyojung 2019.03.25
  • 캐릭터 의 transform.rotation 값을 바꿔주세요
    atshin 2019.03.25
  • 플레이어 회전은 잘 되는거같은데요? 카메라가 회전을 안하게하려면
    float currYAngle = Mathf.LerpAngle(tr.eulerAngles.y, target.eulerAngles.y, smoothRotate * Time.deltaSeconds);

    Quaternion rot = Quaternion.Euler(0, currYAngle, 0);

    이 코드를 지우면 되는거 아닌가요? target이 플레이어 같은데 플레이어 회전각을 따라서 카메라도 돌아버리는 코드로 보여지는데요.
    gominky 2019.03.25
  • 엇. 감사합니다. 코드 지우고 속도 수정하니 화면 안돌아 가네요
    이제... 케릭터 이동만 수정하면 될것 같습니다 !
    두분 감사합니다 (__)
    shjhyojung 2019.03.25
Back to Top