[Unity] Unity 기초강의 내용 정리 (5-3강 ~ 5-4강)

[Unity] Unity 기초강의 내용 정리 (5-3강 ~ 5-4강)

educast 나동빈 님의 <Mobile Defence Game 제작으로 배우는 Unity 기초> 강의를 듣고 내용 정리.

———-

 

5-3. 타워 건설 지점 오브젝트 구현하기

타워가 건설이 되는 위치 만들기

건설 지점을 눌렀을 때 씨앗을 차감하고 타워를 건설

1. Prefabs 폴더 생성

빈 오브젝트 만들고 이름을 Tower Spots 로 수정 (X : 0, Y : 0, Z : 0)

Sprites 폴더로부터 새로운 타일(tile_1)을 씬뷰에 드래그앤드랍한다.

Tower Spots 자식 요소로 넣는다.

X : -5, Y : 2, Z : 0

좌측 하이어라키 뷰의 tile_1을 프로젝트 뷰의 프리팹 폴더 안에 드래그하면 프리팹이 생성된다.

이름은 Tower Spot 로 변경.

Sorting Layer 를 background 로 지정하기

2. 가로 7개, 세로 4개 총 28개의 타일을 씬뷰에 붙여넣기

28개 오브젝트의 이름을 모두 Tower Spot 로 변경.

Sorting Layer 를 background 로 지정하기

28개 오브젝트 모두 좌측 하이어라키 뷰 상 Tower Spots 객체의 자식요소로 넣기

———-

5-4. 캐릭터 타워 건설 기능과 능력치 구현하기

당근 캐릭터 씬뷰에 드래그앤드랍

크기는 Scale 0.2, 0.2

Sorting Layer는 Unit 으로 지정

이 당근 캐릭터를 프리팹 폴더 안에 드래그앤드랍해서 프리팹으로 만들자. (Character 1)

Scripts 폴더 만들고

CreateCharacter 라는 스크립트 생성

타일 한 개에 Add Component 를 이용해서

CreateCharacter 스크립트 부여

박스 콜라이더 2D도 추가 (충돌처리 위함)

소스코드 작성

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class CreateCharacter : MonoBehaviour {

    public GameObject characterPrefab;

    private GameObject character;

 // Use this for initialization

 void Start () {

  

 }

 

 // Update is called once per frame

 void Update () {

  

 }

    private void OnMouseDown() {

        if (character == null) {

            character = (GameObject)Instantiate(characterPrefab, transform.position, Quaternion.identity);

        }

    }

}

프리팹 폴더 내의 Character 1을 끌어다가 인스텍퍼 뷰의 매개변수에 대입해야 함.

참고) 변수명은 소문자로 시작, 클래스 명은 대문자로 시작

Character 1 프리팹에 Add Component 로

Character Stat, CharacterBehavior 스크립트 추가

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class CharacterBehavior : MonoBehaviour {

    CharacterStat characterStat;

    // Use this for initialization

    void Start() {

        characterStat = gameObject.GetComponent<CharacterStat>();

    }

    // Update is called once per frame

    void Update() {

    }

    private void OnMouseDown() {

        if (characterStat.canLevelUp()) {

            characterStat.increaseLevel();

        }

    }

}

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class CharacterStat : MonoBehaviour {

    public int level = 1; // 캐릭터의 레벨

    public int hp = 30; // 현재 체력 값

    public int maxHp = 30; // 최대 체력

    public int damage = 5; // 캐릭터의 공격력

    // 레벨 업이 가능한지 여부를 반환합니다.

    public bool canLevelUp() {

        if (level < 3) {

            return true;

        } else {

            return false;

        }

    }

    //  실제로 레벨 업을 수행하는 함수입니다.

    public void increaseLevel() {

        if (level == 1) {

            level = 2;

            maxHp += 25;

            hp = maxHp;

            damage += 5;

            transform.localScale += new Vector3(0.01f, 0.01f, 0);

        } else if (level == 2) {

            level = 3;

            maxHp += 50;

            hp = maxHp;

            damage += 5;

            transform.localScale += new Vector3(0.01f, 0.01f, 0);

        }

    }

    // Use this for initialization

    void Start() {

    }

    // Update is called once per frame

    void Update() {

    }

}

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class CreateCharacter : MonoBehaviour {

    public GameObject characterPrefab;

    private GameObject character;

    // Use this for initialization

    void Start() {

    }

    // Update is called once per frame

    void Update() {

    }

    private void OnMouseDown() {

        if (character == null) {

            character = (GameObject)Instantiate(characterPrefab, transform.position, Quaternion.identity);

        }

    }

}

맵의 특정 지점을 클릭하면 당근 캐릭터 생성됨.

당근 캐릭터 프리팹에도 박스 콜라이더 2D 추가해야 함. (터치감지)