스파르탄캠프/본격적인 캠프

스파르타캠프 Unity 캐릭터 선택하기

SP_1217 2024. 5. 14. 06:30

 


Hierarchy에 캐릭터 UI Image를 만듭니다.

 

에셋을통해 불러온 Idle 이미지를 넣고 Animator를 적용 시킨후 저는 Join이라는 버튼과 함께 Main Scene으로 넘길 예정이므로 같이 넣었습니다.

캐릭터 스크립트 만들고 넣기

public class PlayerName : MonoBehaviour
{
    [SerializeField] private InputField playerNameInput;
    private string playerName;

    public void StartGame()
    {
        playerName = playerNameInput.text;

        if (!string.IsNullOrEmpty(playerNameInput.text))
        {
            PlayerPrefs.SetString("playerName", playerName);
            
            SceneManager.LoadScene("MainScene");
        }
    }

    public void ChoicePenguin()
    {
        PlayerPrefs.SetInt("PlayerType", 0);
    }

    public void ChoiceBox()
    {
        PlayerPrefs.SetInt("PlayerType", 1);
    }
}

Set Int로 번호를 저장, 후에 Main Scene에서 적용시킬 스크립트에 불러옵니다.

 

public class GameManager : MonoBehaviour
{
    public Text playerNameText;
    [SerializeField] private GameObject penGuin;
    [SerializeField] private GameObject box;
    [SerializeField] private SpriteRenderer playerSprite;

    void Start()
    {
        string playerName = PlayerPrefs.GetString("playerName");
        if (PlayerPrefs.GetInt("PlayerType") == 0)
        {
            penGuin.SetActive(true);
        }
        else
        {
            box.SetActive(true);
        }
        playerNameText.text = playerName;
    }

같이 넘겨받은 이름과 함께 if 조건을 걸고 Set Int해놓은 번호를 Get Int로 넘겨받습니다.

그렇게 하면 저장되있는 값이 넘어올것이고 이름과 캐릭터를 Main Scene이 호출할것입니다.

 

 

public class TopDownAimRotation : MonoBehaviour
{

    [SerializeField] private SpriteRenderer characterRnderer1;
    [SerializeField] private SpriteRenderer characterRnderer2;

    private TopDownController controller;

    private void Awake()
    {
        controller = GetComponent<TopDownController>();
    }

    void Start()
    {
        controller.OnLookEvent += OnAim;
    }

    private void OnAim(Vector2 direction)
    {
        RotateArm(direction);
    }

    private void RotateArm(Vector2 direction)
    {
        float rotZ = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;

        characterRnderer1.flipX = Mathf.Abs(rotZ) > 90f;
        characterRnderer2.flipX = Mathf.Abs(rotZ) > 90f;

    }
}

 

위에 코드는  마우스 방향으로 보는 OnLook기능의 일부입니다.

저는 Sprite에 gameObject를 할당시키는 법을 몰라 그저 두개를 만들어 각각에 할당시키는 방향으로 했습니다.

 


 

오늘 회고

숙달될때까지 반복시키는게 중요하다고는 생각합니다만 확실히 C#을 사용할떄 코드와 Unity를 사용할떄 쓰는 코드가 달라 당혹스럽긴하지만 다시 적응해나아가야겠죠...