Hierarchy -> 오른쪽 마우스 -> UI -> legacy -> text
Canvas 오브젝트가 자동 생성되고 그 안에 Text 오브젝트가 생김.
+ Game 뷰에서 Full HD로 변경하면 1920*1080으로 조절 됨.
Canvas : 보고 있는 게임 뷰와 동일. 사용자가 보는 화면인 모니터와 동일.
Render Mode : 모드에 따라서 설정값을 변경할 수 있는 범위가 달라짐.
width와 Height는 텍스트 박스의 크기이다. 이 크기보다 폰트 크기가 커지면 글자가 사라진다.
텍스트 박스 크기와 관계없이 글자 폰트 크기를 조절하더라도 화면에 나오게 할 수 있다.
Horizontal Overflow와 Vertical Overflow의 값을 Overflow로 바꿔주면 됨
이 스코어 스크립트는 스코어 텍스트
오브젝트
에 붙어있고, 이 스코어 텍스트에는 텍스트라는컴포넌트
가 있고, 이 안에는 텍스트라는속성
이 또 있다.
속성 = property = 변수와 비슷
scoreText.text 변수는 이 테스트'속성'과 동일하다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Score : MonoBehaviour
{
public static int score; //스코어 점수 : 자동으로 0으로 초기화 됨
Text scoreText; //스코어 점수 텍스트
// Start is called before the first frame update
void Start()
{
scoreText = GetComponent<Text>(); //텍스트 컴포넌트 정보 얻어오기
}
// Update is called once per frame
void Update()
{
scoreText.text = "Score : " + score.ToString(); /* string + int -> String 자동형변환
연산자 오버로링에 의함 -> 궁금하면 각자 공부! */
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//HiyokoCreator 오브젝트는 단순히 이 스크립트를 가동시키기 위한 텅 빈 오브젝트이다
public class HiyokoCreater : MonoBehaviour
{
public GameObject obj; //히요코 오브젝트 프리팹
public float interval = 3f; //히요코 생성 간격
private float time; //시간을 재기 위한 변수
/* 업데이트 함수는 게임의 루프 역할. 사용자 입력을 감시 or 어떤 오브젝트의 이동 시행
*/
// Update is called once per frame
void Update()
{
if (DeathZone.dead) return;
/* deltaTime : 이전 업데이트 함수호출 시간과 현재 업데이트 함수호출 시간의 간격
컴퓨터 성능과 관계없이 최종적으로 동일한 값을 나타나게 된다 => 시간을 잴 수 있음
ex) 1초에 30번 업데이트 * 간격(0.01) = 1초에 15분 업데이트 * 간격(0.02) */
time += Time.deltaTime; //시간을 잰다.
if (time >= interval) //3초 이상이 되었다면 히요코 생성
{
time = 0; //시간 초기화
GameObject hiyoko = Instantiate(obj); //히요코 동적 생성.
//Instantiate : 동적 생성 시키는 아주아주 중요한 함수. C : 메모리얼, C++ : new
//히요코의 위치를 X,Y,Z 랜덤하게 배치
hiyoko.transform.localPosition = new Vector3(Random.Range(-3.0f, 3.0f),
Random.Range(1.0f, 5.0f), Random.Range(17.0f, 20.0f)); // m 단위로 생각하기~
Score.score++; //Score 클래스의 score 정적변수 score를 1씩 증가 시킨다 = 히요코가 생성될 때마다 score 1씩 증가
}
}
}
게임오버 했을 시에만 text가 뜨게 함.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIController : MonoBehaviour
{
public Text text; //GameOver 텍스트 오브젝트의 Text 컴포넌트
public static bool gameOver; //Game이 종료 되었는지 여부
// Start is called before the first frame update
void Start()
{
text.enabled = false; //GameOver Text를 비활성화
}
// Update is called once per frame
void Update()
{
//gameOver 변수가 True라면 GameOver 텍스트를 활성화
if(gameOver) { text.enabled = true; }
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DeathZone : MonoBehaviour
{
public static bool dead; //게임오버되었을 때 히요코 생성을 멈추게 할 변수
// Start is called before the first frame update
void Start()
{
dead = false;
}
//부딪힌 상대방에 대한 정보가 other로 전달받음
//부딪혔는지 여부만 판단하는 함수
private void OnTriggerEnter(Collider other)
{
//DeathZone과 히요코가 충돌되었다면..
if(other.gameObject.tag == "Hiyoko")
{
UIController.gameOver = true; //GameOver 텍스트가 화면에 표시
dead = true; //히요코 생성을 멈춤
}
}
}
히요코의 태그를 히요코로 해준다.
DeathZone -> Box Collider -> Is Trigger 체크!
충돌검사를 트리거 방식으로 검사할 때 체크해줌.
두 오브젝트가 만날 때 둘 중 하나라도 트리거가 체크 되어있을 때는 충돌하면 자동으로 트리거 방식으로 검사 됨.
텍스트 속성 비활성화 시켜주기!
Hierarchy -> Canvas -> 오른쪽 마우스 -> UI -> legacy -> Button
OnClick() -> add -> 자기자신(ReStart 오브젝트) 끌어다 넣기 -> LoadGame의 ReStartGame() 함수 선택
ReStart 오브젝트를 넣는 이유?
사용하고 싶은 함수를 정의해놓은 스크립트를 가진 오브젝트이기 때문. 이렇게 되면 오브젝트의 스크립트가 뜨게 되고 그 안의 함수를 사용할 수 있게 됨.
: 멤버 변수와 달리 해당 클래스에 하나만 생성되고 모든 인스턴스에서 공동으로 접근할 수 있는 변수.
스크립트는 항상 오브젝트에 붙어있다. 스크립트도 컴포넌트다. 다른 오브젝트에 있는 스크립트 정보를 불러오고 싶다면 이 함수를 쓰면 된다.