본문 바로가기

Unity

[Unity] 1차 Study : 점프, 닉네임 달기 완성!

 

 

[Unity] Chap03. 스크립트 작성하기

3-1. 스크립트로 게임 오브젝트 조작하기 유니티에서는 C#을 사용함 PlayerController라는 이름의 C# script 생성 후 컴포넌트 추가 Player Asset 폴더와 인스펙터 뷰에 스크립트가 존재하는 것을 볼 수 있음

mooni-123.tistory.com

 

Chap03까지 진행 후 1차 스터디를 진행하였다.

근데 갑자기 호기심 대결의 현장 펼쳐짐.

누군가는 오디오 에셋을 넣고 누군가는 닉네임을 달고 어쩌구 이게 맞나...

 

아무튼 나는 저번에 작성했던 점프 기능을 고쳐보았다.

if (jump)
{
    Debug.Log("Jump!!");
    /*transform.position = new Vector2(currentPosition.x, currentPosition.y + 0.5f);    // 처음 시도했던 점프*/
    rbody.AddForce(Vector2.up * 5, ForceMode2D.Impulse);	//수정한 코드
}

→ 전에는 현재 X축에서 Y만 수정하여 위에서 떨어트리는 말도안되는 점프였는데 AddForce로 점프를 완성해보았다.

→ 여기서 또 문제 발생 지면에 닿아있지 않아도 스페이스를 누르면 점프를 해서 끝도 없이 올라갈 수 있다. 다음 스터디까지 고쳐올 수 있기를,,,

 

 

* AddForce(힘의 방향 * 힘, 힘의 종류);

 


그리고 text object인 닉네임을 플레이어의 자식 object로 넣어서 데리고 다녀봄

근데 플레이어랑 같이 좌우반전이 되는 문제 발생

public class PlayerController : MonoBehaviour
{
    Rigidbody2D rbody;
    GameObject text;	//자식 오브젝트를 담을 변수
    float axisH = 0.0f;
    
    void Start()
    {
        rbody = this.GetComponent<Rigidbody2D>();
        text = GameObject.Find("Text");    //시작시 Text라는 이름을 가진 오브젝트를 찾음
    }

    void Update()
    {
        axisH = Input.GetAxisRaw("Horizontal");
        
        if (axisH > 0.0f)
        {
            /*Debug.Log("오른쪽 이동");*/
            transform.localScale = new Vector2(1, 1);
            text.transform.localScale = new Vector2(1, 1);    //text에 localScale값을 조정해 부모 오브젝트의 좌우반전 설정을 무마시킴
        }
        else if(axisH < 0.0f)
        {
            /*Debug.Log("왼쪽 이동");*/
            transform.localScale = new Vector2(-1, 1);
            text.transform.localScale = new Vector2(-1, 1);    //얘도 마찬가지!
        }
    }
}

→ 사실.... 얘도.... 문제가 좀 있음... text를 플레이어에 잘고정시켜 놓는 방법을 다시 찾아야겠다.