rtan 스크립트
float direction = 0.05f;
//direction이라는 변수를 선언
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.position += new Vector3(direction, 0, 0);
//direction = 0.05f (위에 정의)
//0.05는 속력. 숫자가 작아지면 느려지고 커지면 빨라진다.
}
여기까지 하면 캐릭터가 영원히 달려서 화면 밖으로 뛰쳐나감
방향 전환이 필요하다.
Debug.Log(transform.position.x);
//console에 x위치 값을 표시
벽에 부딪힐 때 캐릭터의 x값을 알 수 있다.
float direction = 0.05f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (transform.position.x > 2.8f)
//만약 캐릭터가 2.8을 넘어갈 경우
{
direction = -0.05f;
//음수 처리로 방향 전환
}
if (transform.position.x < -2.8f)
//만약 캐릭터가 -2.8을 넘어간 경우
{
direction = 0.05f;
}
transform.position += new Vector3(direction, 0, 0);
}
float direction = 0.05f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (transform.position.x > 2.8f)
{
direction = -0.05f;
transform.localScale = new Vector3(-1, 1, 1);
//x값을 음수처리해서 반전
}
if (transform.position.x < -2.8f)
{
direction = 0.05f;
transform.localScale = new Vector3(1, 1, 1);
}
transform.position += new Vector3(direction, 0, 0);
}
float direction = 0.05f;
float toward = 1.0f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (transform.position.x > 2.8f)
{
direction = -0.05f;
toward = -1.0f;
}
if (transform.position.x < -2.8f)
{
direction = 0.05f;
toward = 1.0f;
}
transform.localScale = new Vector3(toward, 1, 1);
transform.position += new Vector3(direction, 0, 0);
if (Input.GetMouseButtonDown(0))
//만약 버튼을 누르면
{
toward *= -1;
//toward 값에 -1을 곱한다.
direction *= -1;
//direction 값에 -1을 곱한다.
}
}
rain에 rigidbody2D를 달고 Gravity Scale 조정
rain이 ground를 지나쳐 화면 밖으로 떨어진다.
*충돌의 기본조건: 두 대상에 Collider가 있어야 한다 / 둘 중 하나에는 Rigidbody가 있어야 한다.
rain과 ground에 Collider를 달아준다.
rain이 ground에 부딪혀 바닥에 쌓인다.
void OnCollisionEnter2D(Collision2D coll)
//다른 콜라이드에 부딪혔을 때 실행되는 함수
{
if (coll.gameObject.tag == "ground")
//만약 ground 태그가 달린 게임오브젝트에 부딪혔다면
{
Debug.Log("땅이다!");
}
}
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "ground")
//만약 ground 태그가 달린 게임오브젝트에 부딪혔다면
{
Destroy(gameObject);
//gameObject(나 자신)을 사라지게 한다.
}
}
start() 함수에 랜덤 position 세팅하기
void Start()
{
float x = Random.Range(-2.7f, 2.7f);
//화면 밖을 벗어나지 않도록 범위를 잡아준다.
float y = Random.Range(3.0f, 5.0f);
transform.position = new Vector3(x, y, 0);
}
int type;
//type 선언
float size;
int score;
//score 선언
// Start is called before the first frame update
void Start()
{
float x = Random.Range(-2.7f, 2.7f);
float y = Random.Range(3.0f, 5.0f);
transform.position = new Vector3(x, y, 0);
type = Random.Range(1, 4);
//1~3사이의 타입이 랜덤으로 존재한다.
if (type == 1)
//1번 타입이라면
{
size = 1.2f;
score = 3;
//점수 3
GetComponent<SpriteRenderer>().color = new Color(100 / 255f, 100 / 255f, 255 / 255f, 255 / 255f);
//랜덤 컬러 부여
}
else if (type == 2)
{
size = 1.0f;
score = 2;
GetComponent<SpriteRenderer>().color = new Color(130 / 255f, 130 / 255f, 255 / 255f, 255 / 255f);
}
else
{
size = 0.8f;
score = 1;
GetComponent<SpriteRenderer>().color = new Color(150 / 255f, 150 / 255f, 255 / 255f, 255 / 255f);
}
transform.localScale = new Vector3(size, size, 0);
}
GameManager: 게임 전체를 조율하는 오브젝트
Object-EmptyObject / C#스크립트도 GameManager 생성(아이콘이 다르다)
Assets 폴더에 Prefabs 폴도 생성 후 rain 오브젝트 끌어오기
이후 MainScene의 rain 오브젝트는 삭제한다.
public class GameManager : MonoBehaviour
{
public GameObject Rain;
//Rain이라는 게임오브젝트를 정의
이후 GameManager 오브젝트-GameManager Script 하단 Rain에 rain 오브젝트를 넣어준다.
void Start()
{
InvokeRepeating("makeRain", 0, 0.5f);
//makeRain이라는 함수를 0.5초마다 발생시킨다.
}
void makeRain()
//makeRain 함수 정의
{
//Debug.Log("비를 내려라!");
Instantiate(Rain);
//Rain Prefabs를 복제한다.
}
MainScene-Create-UI-Canvas 생성, 하위에 UI-Text 생성
public static gameManager I;
void Awake()
{
I = this;
}
int totalScore = 0;
//0으로 시작
public void addScore(int score)
{
totalScore += score;
}
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "ground")
{
Destroy(gameObject);
}
if (coll.gameObject.tag == "rtan")
{
gameManager.I.addScore(score);
Destroy(gameObject);
}
}
using UnityEngine;
using UnityEngine.UI;
////UI Text 받기
public class GameManager : MonoBehaviour
{
public GameObject Rain;
//Rain이라는 게임오브젝트를 정의
public static GameManager I;
public Text scoreText;
public Text timeText;
public GameObject Pannel;
int TotalScore = 0;
void Awake()
{
I = this;
}
// Start is called before the first frame update
void Start()
{
InvokeRepeating("makeRain", 0, 0.5f);
}
// Update is called once per frame
void Update()
{
}
void makeRain()
{
Instantiate(Rain);
}
public void addScore(int score)
{
TotalScore += score;
scoreText.text = TotalScore.ToString();
//Text 내용 바꿔주기
}
}