Unity/2D

CatEscape

s0002 2023. 2. 1. 22:31

1. 레이아웃 설정

 

2. 빌드 세팅 변경

 

3. 화면 크기 설정

 

4. 씬 저장

 

5. 오브젝트 배치

레이어 번호가 클수록 앞에 배치

 

6. 컨트롤러 스크립트 작성 및 컨트롤할 오브젝트에 부착

방향키 입력 받아서 좌우 이동하기

        //좌우 이동
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            this.transform.Translate(3, 0, 0);
        }   
        
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            this.transform.Translate(-3, 0, 0);
        }

 

아래로 떨어지다가 특정 위치에서 해당 게임 오브젝트 제거

        //시간 베이스 이동
        float speed = 1f;
        float movement = -1 * speed * Time.deltaTime; //방향*속도*시간
        this.transform.Translate(0, movement, 0);

        //프레임 베이스 이동
        //this.transform.Translate(0, -0.1f, 0);

        if (this.transform.position.y < -4.1f)
            Destroy(this.gameObject); //게임 오브젝트 제거
            //Destroy(this);   //클래스의 현재 인스턴스 제거 : 컴포넌트 제거

 

충돌 판정: 충돌을 감지하는 부분

충돌 반응: 충돌을 감지한 다음의 음직임을 정하는 부분

public class ArrowController : MonoBehaviour
{
    public float radius;
    GameObject player; 

    // Start is called before the first frame update
    void Start()
    {   
    	//충돌 했는지 감지할 오브젝트
        this.player =GameObject.Find("player");    

    }

    // Update is called once per frame
    void Update()
    {
        //충돌 판정
        Vector2 p1 = this.transform.position; //화살표의 중심 좌표
        Vector2 p2 = this.player.transform.position; //플레이어의 중심 좌표

        float distance = Vector2.Distance(p1, p2); //중심 좌표 간의 거리
        //Vector2 dir = p1 - p2;
        //float d = dir.magnitude;

        //float r1 = 0.5f; //화살표의 반경
        //float r2 = 1.0f; //플레이어의 반경
        float r = this.radius + this.player.GetComponent<PlayerController>().radius; //r1+r2
        
        //충돌하면 게임 오브젝트 제거
        if (distance<r)
        {
            Destroy(gameObject);
        }
    }
}

 

7. 프리팹 사용

①프리팹 생성

②제너레이터 스크립트 작성

1초마다 화살표 오브젝트 생성하고 생성한 오브젝트를 y, z 좌표는 고정이고 x좌표가 랜덤인 위치로 옮긴다

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

public class ArrowGenerator : MonoBehaviour
{
    //생성할 프리팹 전달 받아서 넣을 변수
    //Inspector 창에서 받을 거니까 public
    public GameObject arrowPrefab;
    private float delta;
    
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        //시간 누적
        this.delta += Time.deltaTime; //매 프레임 간격으로 시간 누적

        if(this.delta>1) //1초 지남
        {
            this.delta = 0;

            //프리팹 인스턴스 생성 
            GameObject go = Instantiate(this.arrowPrefab);

            //랜덤 x 좌표로 위치 변경
            int px = Random.Range(-6, 7);

            //생성된 화살 오브젝트의 위치로 사용
            go.transform.position = new Vector3(px, 4.5f, 0);
        }    
    }
}

③빈 오브젝트에 스크립트 적용

④스크립트에 프리팹 전달

프리팹 전달 시 Project 창의 프리팹을 전달해야 한다(씬에 있는거 x)

 

8. UI 만들기

①UI 오브젝트 배치

이미지 사용시 앵커 포인트 설정

 앵커 포인트: 화면 크기가 변경되어도 이미지가 같은 위치에 있도록 한다

②감독 스크립트 작성

 

③빈 오브젝트에 스크립트 적용

'Unity > 2D' 카테고리의 다른 글

Unity2D 타일 사이에 선이 생길 때 해결 방법  (0) 2023.09.22
타일맵  (0) 2023.09.20