using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class OnUpKeyPress_Throw : MonoBehaviour
{
    // 플레이어 이동, 반전관련 변수선언
    public float speed = 5;
    float vx; // x축 이동량
    bool leftFlag = false; // 좌우반전
    bool upFlag = false; // 위쪽 방향키 눌렸는지 여부
    //프리팹 만들기------------------------------------
    public GameObject sushi; // 공장에 넘겨줄 원본(프리팹)
    GameObject newSushi; // 공장에 찍어낸 새로운 아이템(프리팹)
    //프리팹이 던져지는 위치와 힘을 지정
    public float offsetY = 1; // 프리팹이 던져지는 간격(Y축)
    public float throwX = 4;  // x축으로 던지는 힘
    public float throwY = 8;  // y축으로 던지는 힘

    // 메인카메라와 관련된 변수선언
    Vector3 camPos; // 카메라의 원래위치를 저장해두는 변수

    void Start()
    {
        // 카메라의 원래위치를 저장해둔다.
        camPos = Camera.main.transform.position;
    }

    void Update()
    {
        // 키보드 좌우방향키 입력 검사
        vx = 0; // 초기화

        if (Input.GetKey("right"))
        {
            vx = speed;
            leftFlag = false;
        }
        if (Input.GetKey("left"))
        {
            vx = -speed;
            leftFlag = true;
        }
    }

    void FixedUpdate()
    {
        // 플레이어 이동, 반전
        transform.Translate(vx / 50, 0, 0);
        GetComponent<SpriteRenderer>().flipX = leftFlag;

        if (Input.GetKey("up")) // 위쪽 키가 눌리면
        {
            if (upFlag == false)
            {
                upFlag = true;

                // 프리팹이 플레이어의 위치에 나오도록(프리팹이 나올 위치)
                Vector3 newPos = this.transform.position; // 현재 플레이어의 위치값
                newPos.y += offsetY; // 플레이어의 조금 위에
                newPos.z = -5; // 카메라의 앞에

                // 프리팹을 만들고, 프리팹이 나올 위치를 설정
                newSushi = Instantiate(sushi);
                newSushi.transform.position = newPos;

                // 프리팹 던지기(AddForce)
                Rigidbody2D rb = newSushi.GetComponent<Rigidbody2D>();

                if (leftFlag == true)
                {
                    rb.AddForce(new Vector2(-throwX, throwY), ForceMode2D.Impulse);
                }
                else
                {
                    rb.AddForce(new Vector2(throwX, throwY), ForceMode2D.Impulse);
                }
            }
        }
        else
        {
            upFlag = false;
        }
    }
    // 모든 오브젝트의 움직임이 끝난 후에 카메라를 이동시킨다.
    
    void LateUpdate()
    {
        // 일단 플레이어의 위치를 저장
        Vector3 playerPos = transform.position; // x, y, z

        // 그 플레이어의 위치를 카메라위치로 변경
        playerPos.z = -10; // 카메라의 위치값(z)
        playerPos.y = camPos.y; // 카메라의 원래 높이값
        Camera.main.transform.position = playerPos;
    }
}

'----------고1---------- > 게임엔진' 카테고리의 다른 글

[고1 게임엔진] 12 - (1)  (5) 2023.12.27
[고1 게임엔진] 11 - (2)  (2) 2023.11.20
[고1 게임엔진] 10 - (3)  (0) 2023.10.18
[고1 게임엔진] 10 - (2)  (2) 2023.10.16
[고1 게임엔진] 10 - (1)  (0) 2023.10.11