[c# unity] Shooting game(1)

코린이·2023년 9월 28일
1

unity

목록 보기
1/1

학교에서 받은 ASSET으로 유니티 첫 프로젝트를 작업해보았다.
처음 unity를 써보지만 가장 해보고 싶었기 때문에 설렜다.
unity 수업을 듣기 위해 c 공부도 같이 하고 있다. c 공부도 velog에 올릴 생각이다.

"주제는 Unity 3D를 이용한 간단한 3D 슈팅 게임 만들기!"

⚫ 주어진 ASSET을 가지고 아래 게임을 만드는 것이다.
⚫ unity를 처음 다뤄보기에 최대한 쉽게 설명해볼 생각이다.
⚫ 학교에서 설명해준 방법과 내가 이해한 방법을 섞어 설명할 것이다.

✔ 먼저 작업 전 세팅하기

  • Unity3D 실행 -> Create New Project 선택하기
  • 다운 받은 ASSET 파일을 Assets-> Import Package -> Custom Package 에서 import하기

이제 세팅이 끝났으니 진짜로 개발을 시작해보자.

1. 주인공 만들기

⚫ project창의 Landrover_01_veh 메쉬를 끌어서 Hierarchy 창에 끌어넣는다.

⚫ 게임 내에서 위로 가는 형태의 게임을 만들거기 때문에 차를 회전해준다.(크기도 조금 줄여주기)


⚫ Hierarchy에 빈 gameobject를 만들어주고 Player로 rename하고 위에서 만들어준 Landrover_01_veh를 Player의 자식으로 지정해준다. (여기서 rename 단축키는 f2다!!!)

자식으로 정하게 되면 Player가 움직일 때 Landrover_01_veh가 움직이게 된다.

그냥 landrover_01_veh 를 움직이는 것과 무슨 차이가 있는가?

Landrover_01_veh를 이미 회전시켜놓았기 때문에 Landrover_01_veh를 그냥 움직이게 된다면 돌아간 x,y,z축을 고려해야되기 때문에 복잡해진다. 따라서 회전을 하나도 시키지 않은 Player를 이동시키면 원하는 대로 이동이 가능해진다.

⚫ project창에 빈 폴더를 만들어 scripts라고 지어준다.

우리가 짜는 코드들은 이 파일에 넣고 한 눈에 보기 쉽게 해줄 것이다.

-----------------------지금까지의 상황은 이런 식으로 보여지면 된다.-----------------------

⚫ 이제 Player 스크립트를 제작해 Player가 움직일 수 있게 해주자.

Script 폴더를 왼쪽으로 클릭 -> Create -> C# Script -> Player라는 이름 지정

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

public class Player : MonoBehaviour
{
    // Start is called before the first frame update
    float speed = 10.0f;

    void Start()
    {

    }
    void Update()
    {
        float dir1 = Input.GetAxis("Horizontal"); /// 키보드 방향키 중 오른쪽,왼쪽 눌림
        transform.Translate(Vector3.right * dir1 * speed * Time.deltaTime);
        ///transform.Translate는 위치 이동 함수, 키보드 방향키 눌림 정보를 확인하여 물체 이동에 반영
        float dir2 = Input.GetAxis("Vertical"); /// 키보드 방향키 중 위쪽, 아래쪽 눌림
        transform.Translate(Vector3.up * dir2 * speed * Time.deltaTime);
    }

}

❗ Time.deltaTime을 곱해주는 이유가 뭘까?

Time.deltaTime은 이전 프레임에서 현재 프레임까지 흐른 시간을 의미하는 것으로, 컴퓨터의 사양에 관계없이 일정하게 게임을 진행하기 위해 곱하는 값이다.

⚫ 이제 project 창에 있는 Player script를 Hierarchy에 Player 오브젝트에 드랍해 script와 객체를 연결해준다. 게임 실행을 시키면 자동차를 키보드 상하좌우키로 움직이기가 가능해진다.

2. 배경 만들기 (자신만의 배경을 꾸며주자)

⚫ 먼저 조명부터 바꿔준다. Hierarchy창에 direction light를 추가해준다.

inspector에서 transform을 우클릭해 reset만 눌러주면 된다.

⚫ 주인공이 아래쪽에서 시작하게 하게끔 main camera position을 조정해준다.

⚫ 주인공이 달릴 road를 생성해보자.

game object에서 도로가 될 cube나 plain을 생성하기 -> game object의 이름을 Road로 rename하기 -> inspector의 position과 scale 조정해주기 -> 제공된 texture 폴더를 복사해서 assets에 붙여넣기 -> road object에 road texture를 끌어다가 inspector의 빈 곳에 놓기

⚫ road의 움직을 구현하기 위해 Road scipt를 제작해준다.

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

public class Road : MonoBehaviour
{
    public float speed = 5.0f;

    public float x = 0.0f;
    public float y = 0.0f;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        y += Time.deltaTime * speed;
        GetComponent<Renderer>().material.mainTextureOffset = new Vector2(0, -y);	
        
        /*y 변수에 Time.deltaTime * speed를 더해준다. 
        Time.deltaTime은 이전 프레임과 현재 프레임 간의 시간 간격을 나타내며, 
        이를 speed에 곱해서 y 값을 업데이트한다. 
        이렇게 하면 y 값이 시간에 따라 증가하여 움직이는 효과를 만든다.
		GetComponent<Renderer>().material.mainTextureOffset을 사용하여 
        GameObject의 머터리얼 텍스처 오프셋을 변경한다. 
        이를 통해 도로 텍스처를 위로 이동시켜 도로가 아래로 스크롤되는 효과를 만든다. */
    }
}

⚫ 이제 Road script를 Road object의 inspector창 빈 곳에 드래그하면, Road에 스크롤 효과가 적용된다.

3. 마무리

오늘은 여기까지 진행하고 다음번 포스팅에는 적과 아이템을 만들어보자!!!

profile
코린이

0개의 댓글