Esempio n. 1
0
    protected override void Awake()
    {
        base.Awake();
        m_animator      = GetComponent <Animator>();
        m_rigidbody2D   = GetComponent <Rigidbody2D>();
        m_lookDirection = E_LookDirection2D.Right;

        InitCheckGround();
    }
Esempio n. 2
0
    // 2D 이동
    private void Move()
    {
        // 현재 시점변환 중이라면 캐릭터 정지
        if (m_playerManager.Skill_CV.IsChanging)
        {
            m_rigidbody2D.velocity = Vector2.zero;
            return;
        }

        // 키보드 입력
        float move = Input.GetAxis("Horizontal") * m_playerManager.Stat.ForwardMoveSpeed;

        // 애니메이션 설정변수
        if (move == 0)
        {
            m_playerManager.IsRunning = false;
        }
        else
        {
            m_playerManager.IsRunning = true;
        }

        // 중력을 사용중이지 않을 때
        if (!m_playerManager.UseGravity)
        {
            // 이동키를 누를경우 중력 사용
            if (move != 0)
            {
                m_playerManager.UseGravity = true;
            }
        }

        // 바라보는 방향 변경해주기
        if (m_lookDirection != E_LookDirection2D.Right && move > 0)
        {
            m_lookDirection      = E_LookDirection2D.Right;
            transform.localScale = new Vector3(1, 1, 1);
        }
        else if (m_lookDirection != E_LookDirection2D.Left && move < 0)
        {
            m_lookDirection      = E_LookDirection2D.Left;
            transform.localScale = new Vector3(-1, 1, 1);
        }

        // 이동벡터 구하기
        Vector3 movement = Vector3.right * move;

        //// 땅이라면 땅위치에서 살짝 띄어줌
        if (m_playerManager.IsGrounded)
        {
            // 점프중일경우 점프중이 아니라고 알림
            if (m_playerManager.IsJumping)
            {
                m_playerManager.IsJumping = false;
            }

            m_rayOrigin    = transform.position;
            m_rayOrigin.y += m_rayOriginY;

            m_hit = Physics2D.Raycast(m_rayOrigin, m_rayDirection, m_rayDistance, m_ignoreLayerMask);

            if (m_hit.collider != null)
            {
                m_onGroundPos   = transform.position;
                m_onGroundPos.y = m_hit.point.y + m_onGroundUpPos.y;

                transform.position = m_onGroundPos;
            }
        }
        // 땅이 아니라면 중력 적용
        else
        {
            float nextVelocity = m_rigidbody2D.velocity.y + m_playerManager.Stat.Gravity * Time.deltaTime;
            movement.y = nextVelocity;
        }

        // 이동
        m_rigidbody2D.velocity = movement;
    }