viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4ce8fae3862f7a6e4d97261232217582df9165aef5a79c070e170917174882b616592543edeae241b




using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class CharMove : MonoBehaviour

{    // 상시적인 움직임의 반응하여 움직이는 캐릭터 모션

    private BoxCollider2D BoxCollider;

    public LayerMask layerMask;

    Animator animator;

    RaycastHit2D hit;//충돌 확인용.

    public int speed;//정할수 있는 일반 속도.

    private int runspeed;//달리는 속도 사용.

    public int powerspeed;//정할수 있는 달리기 속도.

    Vector2 start;//캐릭터 위치

    Vector2 end;//가야하는 다음 장소 위치

    private void Start()

    {

        BoxCollider = GetComponent<BoxCollider2D>();

        animator = GetComponent<Animator>();

    }

    void Update()//상시적으로 반응.

    {

        start = transform.position;

        BoxCollider.enabled = false;//자신의 박스콜라이더에 걸리지않도록 꺼주기.

        hit = Physics2D.Linecast(start, end, layerMask);//충돌 확인.

        BoxCollider.enabled = true;//다시 켜주기.



        if (hit.transform != null)//충돌이 있을 시.

        {

            end = start;//스타트로 초기화하여 충돌이 없도록 만들기.

        }

        else {

            if (Input.GetKey(KeyCode.LeftShift))//달리기 속도 넣어주기.

                runspeed = powerspeed;//달리기 속도 더해주기위한 값 적용.

            else

                runspeed = 0;//달리기 속도를 0으로 적용.


            if (Input.GetKey(KeyCode.W)) //time.deltatime 초당 움직임을 만들기 위한 방법. 1초당 60프레임 업데이트 시 프레임마다 돌아가기때문에. 조절안됨.

            {

                end = start + new Vector2(0, speed + runspeed) *Time.deltaTime;//현재 위치에 새로운 벡터로 이동한 값을 더하여 다음 위치 선정.

                this.transform.Translate(new Vector3(0, speed+runspeed, 0) * Time.deltaTime);

            }

            if (Input.GetKey(KeyCode.S))

            {

                end = start + new Vector2(0, -speed - runspeed) * Time.deltaTime;

                this.transform.Translate(new Vector3(0, -speed - runspeed, 0) * Time.deltaTime);

            }

            if (Input.GetKey(KeyCode.D))

            {

                end = start + new Vector2(speed + runspeed, 0) * Time.deltaTime;

                this.transform.Translate(new Vector3(speed + runspeed, 0, 0) * Time.deltaTime);

            }

            if (Input.GetKey(KeyCode.A))

            {

                end = start + new Vector2(-speed - runspeed, 0) * Time.deltaTime;

                this.transform.Translate(new Vector3(-speed - runspeed, 0, 0) * Time.deltaTime);

            }

        

           

        }


    }

}


캐릭터가 움직이다가 충돌 발생하고부터 움직이지를 못하는걸 어떻게 해결해야 할까.