본문 바로가기

내일배움캠프_TIL

9월 5일 TIL

개인 과제 시작

플레이어 이동 및 마우스 바라보기 기능 구현

getkey 관련 코드들로 플레이어의 움직임을 구현하는건 많이 해봤는데 input action을 통해 이동을 제어하는건 처음이라서 구현하기 전에 기능을 이해하는데 시간이 좀 걸렸다

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.XR;

public class PlayerController : MonoBehaviour
{
    public event Action<Vector2> OnMoveEvent;
    public event Action<Vector2> OnLookEvent;
    private Vector2 _movementDirection = Vector2.zero;
    private Rigidbody2D _rigidbody;

    private void Awake()
    {
        _rigidbody = GetComponent<Rigidbody2D>();
    }

    private void Start()
    {
        OnMoveEvent += Move;
    }

    private void FixedUpdate()
    {
        ApplyMovment(_movementDirection);
    }

    private void Move(Vector2 direction)
    {
        _movementDirection = direction;
    }

    private void ApplyMovment(Vector2 direction)
    {
        direction = direction * 5;

        _rigidbody.velocity = direction;
    }

    public void CallMoveEvent(Vector2 direction)
    {
        OnMoveEvent?.Invoke(direction);
    }

    public void CallLookEvent(Vector2 direction)
    {
        OnLookEvent?.Invoke(direction);
    }

    public void OnMove(InputValue value)
    {
        Vector2 moveInput = value.Get<Vector2>().normalized;
        CallMoveEvent(moveInput);
    }

    public void OnLook(InputValue value)
    {
        Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        if (transform.position.x < mousePos.x)
        {
            Vector3 right = new Vector3(1, 1, 1);
            transform.localScale = right;
        }
        else
        {
            Vector3 left = new Vector3(-1, 1, 1);
            transform.localScale = left;
        }
    }
}

input action으로 이동을 제어하고 카메라 상의 마우스 위치를 받아서 플레이어와 마우스의 x값 대소를 비교해 x스케일값을 조정하여 캐릭터의 방향을 변경한다

처음에는 localscale.x값에 =으로 직접 대입하려 했으나 vector를 이용해 x,y,z값을 한번에 적용해야 한다는것을 알고 수정

'내일배움캠프_TIL' 카테고리의 다른 글

9월 7일 TIL  (0) 2023.09.07
9월 6일 TIL  (0) 2023.09.07
9월 4일 TIL  (0) 2023.09.04
9월 1일 TIL  (0) 2023.09.01
8월 31일 TIL  (0) 2023.08.31