본문 바로가기
유니티

유니티 9일차

by 육지상어 2021. 1. 24.
728x90
반응형

2D프로젝트를 만들고, 씬을 게임과 메인을 만들고, 에셋에 리소스들의 압축을 푼다.

메인 씬으로 들어가서
백스라운드 이미지를 하이라이키창에 올려준다.

메인카메라를 클릭해서 사이즈를 바꿔줘서 남은 공간을 비워준다.
트렌스폼 초기화를 해준다.

인트로이미지 -> M1 하이라이키에 넣어준다.
그리고 M1의 Z를 -1을 넣어준다.
다른 방법으로는 M1은 오더인 레이어가 있는데 먼저 보여줄 이미지의 순서를 정해준다.
m1의 오더 인 레이어를 -9로 바꿔준다. 안보인다. Z를 0 으로 바꿔주고, 오더 인 레이어를 1로 바꿔준다.

유아이 버튼을 만들어준다. 버튼은 이미지랑 항상 앞에.
에셋에 폴더를 만든다. 스크립트스만들고 씨인트로를 만들고, 스크립트 내에 스타트랑 업데이트를 사용하지 않으므로 지워넣고
소스코드를 입력한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//추가해 줘야함

public class cIntro : MonoBehaviour
{
public void Load_GameScene()
{
SceneManager.LoadScene("Game");
}
}

게임 씬으로 씬 전환을 시켜주는 스크립트이다. 즉, 메인에서 게임으로 화면이동인가보다.
버튼 와이 -150
넓이 166 높이 50 해보자.

그리고 버튼 이미지의 M3라는 이미지를 넣어주자.
이미지를 넣고 빈 오브젝트 넣고- > 스크립트 넣고

버튼을 누르면 동작하는것에 오브젝트를 넣고, 함수를 선택하고
파일 빌트 셋팅에 들어가서 메인을 맨 위로 넣는다.

그리고 저장하고 한다.

백그라운드 이미지를 하이라이키에 올려준다.

백그라운드를 리셋해주고, 오더 인 레이어를 -99로 해준다.
백스라운드 2를 하이라이키 창에 올려준다.

두번째 빽그라운드의 포지션을 -8오더인레이어를 99를 넣어준다.
첫번째 백그를 복제하고, 복제한걸 16을 넣는다.

그다음 스크립트 cBG를 만든다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cBG : MonoBehaviour
{
public GameObject[] BGList; //배열 선언

public float speed = 5; //배경화면이 내려오는 속도

// Use this for initialization
void FixedUpdate()
{
    for (int i = 0; i < BGList.Length; i++)
    {
        BGList[i].transform.position +=
            Vector3.down * speed * Time.deltaTime;
        //아래로 이동시켜줌
        if (BGList[i].transform.position.y < -8)
        //만약 y축 포지션이 -8이라면
        {
            BGList[i].transform.position = new Vector3(0, 15.5f, 0);
            //위치를 맨위로 변경
        }
    }
}

}

오브젝트를하나 만들고 BG로 이름을 변경한다.

BG 자물쇠 하나 하고, 하이라키를 한번에 드래그 선택후 스크립트에 넣고,

하이라이키를 정리하려면 BG 안에 넣는다.

그 다음 윈도우에 애니메이션 들어간다.
C0001의 이름을 플레이어로 바꾼다.

1, 12로 바꾸고, 플레이어의 스트라이트 부분에 c0002를 넣어준다.
크리에이트 열고, 플레이어란 이름으로 저장한다.에셋 -> 애니메이션즈 폴더를 만들어 클립을 저장한다.
플레이어로 저장한다.
쇼 샘플즈를 만들고 60을 입력한다.
쩜쩜쩜에서 쇼 샘플 레이트
그리고 빨간 버튼을 누르고 0장면 12 1장면 12 이런식으로 각 장면마다 플레이어의 스프라이트를 변경한다.

'Player' AnimationEvent has no function name specified!

이게 뜨면 애니메이션의 바에서 막대기 지워줘라

그리고 미사일 스크립트 만들어준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cMissile : MonoBehaviour
{
void Update()
{
transform.Translate(Vector3.up * 5 * Time.deltaTime);
}
}

  • 이미지의 미사일을 하이라이키에 올려준다.

복스 콜라이더 투디 리지드바디 투디, 스크립트 넣어준다.

리지드바디에서 바디 타잎은 키네메틱으로 바꿔준다.
리지드바디 타입은 다이나믹. 물리적영향을 받아 움직임 중력 저항 마찰 등
키네메틱 움직임은 가능하나 사용자의 명시적인 제어로 움직임(스크립트로만)
스테틱은 물리적 영향을 받지 않고 스크립트를 사용해도 위치 안바뀜

미사일을 프리팹 폴더를 만든 후 넣어주고, 하이라이키의 미사일을 지운다.

씨 미사일 프로세스를 하나 만들고
스크립트를 만든다.

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

public class cMissileProcess : MonoBehaviour
{
public GameObject goMissile;
//미사일 오브젝트
public float intervalMax = 0.05f;
//몇초에 한번씩 미사일이 나갈지 제어해주는 변수
private float interval = 0;

void Update()
{
    interval += Time.deltaTime;
    //finterval에 시간을 계속 더해줌

    if (interval > intervalMax)
    //지나온 시간이 0.05초 보다 큰경우
    {
        interval = 0; //지나온 시간을 0으로
        GameObject Obj = Instantiate(goMissile, transform.position + new Vector3(0,1,0),
            Quaternion.identity);
        Destroy(Obj,1.5f);
        //Firpos 위치에 미사일을 생성한다 .
    }
}

}

플레이어에다가 스크립트를 붙이고, 미사일을 프리팹을 스크립트에 넣는다.

그리고 씨 스코어 매니저를 만든다. 스크립트를 넣는다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//적어주어야함

public class cScoreManager : MonoBehaviour
{
public Text text_Score;
public static int g_iScore = 0;
public static cScoreManager instance;
//static : 프로젝트 전체에서 공유되는 변수
//(프로젝트 전체에서
//같은 이름은 사용할 수 없음)
//게임종료시 까지 변수가 남아있게 됨

//null은 값이 없음이다. 
//아무것도 의미하지 않는다는 뜻

void Awake()
{
    instance = this;
    //this는 자기 자신을 의미
}

public void addScore()
{
    g_iScore += 10;
    //스코어 10점 플러스하고 
    text_Score.text = g_iScore.ToString();
    // 텍스트에 대입
}
public void addScore(int score)
{
    g_iScore += score;
    //스코어 10점 플러스하고 
    text_Score.text = g_iScore.ToString();
    // 텍스트에 대입
}

}

게임오브젝트를 하나 만들어주고, 스크립트를 넣어주자.

그리고 하이라이키 -> 유아이 - > 텍스트

택스트 명도 스코어로 바꾸고, 호라이즌과 버티칼을 오버플로로 바꿔주기
포지션을 포지 y280 , 폰트 사이즈 25
파라그래프에서 중간 가운데 정렬로 바꿔주기

다음은 골드 이미지를 하이라이키에 올려준다.
골드에다가 박스 콜라, 리지드바디 넣고 박스 콜라이더에다간 이즈 트리거를 한다.

씨 아이템매니저 스크립트를 작성한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cItemManager : MonoBehaviour
{
public GameObject goMoney;
public static GameObject test;
//static : 프로젝트 내에 1개만 존재가능하며
//프로젝트 전체에서 공유되는 변수

void Awake()
{
    test = goMoney;
}

public static void MakeMoney(Transform target, int count)
{
    while (count > 0)
    {
        Instantiate(test, target.position, target.rotation);
        count--;
    }
}

}

그리고 게임매니저에 해당 스크립트를 넣고, 골드 프리팹을 넣는다.
스프라이트 랜더러를 하는 방법 말고 더 쉬운 방법이 있다.
첫번째 이미지부터~ 4번째까지 한번에 선택 후 4개를 그대로 하이라이키에 올리면애니메이션이 바로 저장된다. 아이들로 저장한다. idle

그리고 윈도우 에니메 -> 에니메 실행하면 된다.

애니메이션 - 움직임을 관리
애니메이터 - 애니메이션
그리고 뉴 클립을 하나 만들고, 히트로 만들고,
샘플을 12로 만들고, 무당벌레 눈 커진 사진 4개를 드래그해서 애니메이션 창으로 이동한다.

다음은 윈도우 애니메이션의 애니메이'터'를 킨다.

아이들 오른쪽 누르고 메이크 트렌지션을 눌러 히트랑 연결시켜준다.
히트에서 또 오른쪽 눌러서 다시 아이들이랑 연결해준다.

  • 트리거를 하나 만들고 트리거의 이름을 hit로 적어준다.
    그리고 아이들에서 히트로 가는 선에 히트를 넣는다.

그리고 스크립트를 작성한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cEnemy : MonoBehaviour
{
public float fSpeed = 3f;
public int iHp = 3;
public GameObject Effect;
Animator ani;//미사일에 맞았을시
//애니메이션 제어해줘야함으로 애니메이터변수

void Awake()
{
    ani = GetComponent<Animator>();
    Destroy(gameObject,2.5f);
}

void Update()
{
    transform.Translate(Vector3.down *
        fSpeed * Time.deltaTime);
    //현재 좌표 기준으로 인자로 
    //들어온 값만큼 움직인다 Vector.down(0,-1,0) 
}

void OnTriggerEnter2D(Collider2D col)
{
    if (col.tag.Contains("Missile"))
    // 충돌된 오브젝트의 태그이름이 
    //"Missile" 일경우 트루반환
    {
        iHp--;
        //hp를 깍는다

        ani.SetTrigger("hit");
        // 맞는애니메이션 재생
        Destroy(col.gameObject);
        //맞은 총알은 없애준다 

        if (iHp <= 0)
        // 체력이 0 이 됐을경우
        {
            cItemManager.MakeMoney(transform, Random.Range(0, 5));
            //아이템 생성
            cScoreManager.instance.addScore();
            //스코어를 더해줌
            Instantiate(Effect, transform.position,
                transform.rotation); //이펙트 생성
            Destroy(gameObject);
            //자기자신을 없앤다 
        }
    }
}

}

에너미의 사이즈를 0.5,0.5로 하고 이름을 에너미를 하고 박스 콜리전 리지드바디 넣고, 그라비티 스케일을 0 으로 넣는다.

그리고 이펙트를 넣어야하는데 구름 5개를 한번에 선택해주고 하이라이키에 넣는다.

그리고 이펙트엔드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cAnimEnd : MonoBehaviour
{
public void EffectEnd()
{
Destroy(gameObject);
}
}
스크립트를 만들고 넣어준다.

그리고 애니메이션 애니메이션 들어가서 5번째 프레임때 펑셩을 추가해주고, 에픽트 엔드 펑션을 실행한다.

이펙트 펑을 프리펩화 후에 하이라이키를 지우고, 에너미 이펙트 부분에 이펙트 펑을 넣어준다.

에너미도 프리팹화하고 하이라이키 지움

그다음
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cEnemyManager : MonoBehaviour
{
public GameObject goEnemy; // 에너미 오브젝트

private float fx = -2f;     //왼쪽 끝 x 좌표
private float fy = 6f;      // y 좌표 

void Start()
{
    StartCoroutine(MakeEenemy());   // 에너미 생성코루틴 호출
}

IEnumerator MakeEenemy()
{
    for (int i = 0; i < 5; i++)
    {
        Instantiate(goEnemy, new Vector3(fx + i, fy, 0),
            Quaternion.identity);
        // 에너미 생성 왼쪽 끝부터 5개 
    }
    yield return new WaitForSeconds(2.5f);
    // 2.5 초 기다린다

    StartCoroutine(MakeEenemy());
    //다시 생성코루틴 호출 (무한루프)
}

}
에너미 매니저를 만들고,
게임메니저에 에너미 메니저를 만들고, 고 에너미에 에너미를 만든다.

그리고 플레이어에 플레이어 태그를 넣어준다.

반응형

'유니티' 카테고리의 다른 글

유니티 11일차  (0) 2021.02.28
유니티 10일차  (0) 2021.02.28
유니티 8일차  (0) 2021.01.17
유니티 7일차  (0) 2021.01.10
유니티 5일차  (0) 2020.12.31

댓글