[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 추가해야 함. (터치감지)