화면가두기
https://ruen346.tistory.com/124
GameDirector
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameDirector : MonoBehaviour
{
private GameObject catGo;
private GameObject hpGaugeGo;
private GameObject txtGameOverGo;
// Start is called before the first frame update
void Start()
{
this.catGo = GameObject.Find("cat");
this.hpGaugeGo = GameObject.Find("hpGauge");
this.txtGameOverGo = GameObject.Find("txtGameOver");
Debug.LogFormat("{0}, {1}", this.catGo, this.hpGaugeGo);
}
public void DecreaseHp()
{
Image hpGauge = this.hpGaugeGo.GetComponent<Image>();
hpGauge.fillAmount -= 0.1f;
if (hpGauge.fillAmount == 0f)
{
Text text = txtGameOverGo.GetComponent<Text>();
text.text = string.Format("GameOver");
}
}
}
ArrowGenerator
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ArrowGenerator : MonoBehaviour
{
public GameObject arrowPrefab; //프리팹 원본 파일
private float elapsedTime; //경과 시간
public void Awake()
{
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//Time.deltaTime 어딘가에다가 누적 : 흘러간 시간, 매 프레임마다 Time.deltaTime을 경과시간에 더해준다
this.elapsedTime += Time.deltaTime;
//경과시간이 1초를 지나갔다면
if(this.elapsedTime > 1f)
{
//화살을 만든다.
this.CreateArrow();
//경과시간 초기화
this.elapsedTime = 0;
}
}
private void CreateArrow()
{
//arrowGo : 프리팹 인스턴스 혹은 복제본
GameObject arrowGo = Instantiate(this.arrowPrefab);
// max - 1 해줘야함 원래는 -7 , 7
//Random.Range(-7, 8);
//// float는 딱 맞는 값
//Random.Range(-7.5f, -7.5f);
arrowGo.transform.position = new Vector3(Random.Range(-7, 8), 6f, 0);
}
}
ArrowController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor.UI;
using UnityEngine.UI;
using UnityEngine.SocialPlatforms.Impl;
public class ArrowController : MonoBehaviour
{
public float radius = 1;
[SerializeField] //SerializeField 애트리뷰트를 사용하면 private 멤버도 인스펙터에 노출
//,, 다른 점 -> 인스턴스에 접근 불가 ,, 혼선 막기
private float speed;
private GameObject catGo;
private GameObject gameDirectorGo;
// Start is called before the first frame update
void Start()
{
this.catGo = GameObject.Find("cat");
Debug.Log("catGo : {0}", catGo);
}
private bool IsCollide()
{
//두 원사이의 거리
//e - s = length
//var c = this.transform.position - this.catGo.transform.position;
Vector3 p1 = this.transform.position; //화살의 중점
Vector3 p2 = this.catGo.transform.position; //고양이의 중점
Vector3 dir = p1 - p2; //물리 벡터 (크기와 방향)
float distance = dir.magnitude;
//Debug.Log(distance);
var dis = Vector3.Distance(this.transform.position, this.catGo.transform.position);
Debug.LogFormat("{0} ", dis);
//반지름의 합
CatController catController = this.catGo.GetComponent<CatController>();
var sumRadius = this.radius + catController.radius;
Debug.LogFormat("두 원의 반지름의 합 : {0}", sumRadius);
//두 원사이의 거리가 두 원의 반지름의 합보다 크면 false (부딪히지 않았다)
return dis < sumRadius;
}
// Update is called once per frame
void Update()
{
//Time.deltaTime : 이전 프레임과 현재 프레임 사이의 간격 시간
//Debug.Log(Time.deltaTime);
//프레임 기반
//this.gameObject.transform.Translate(0, -1, 0);
//시간 기반 이동
//속도 * 방향 * 시간
//1f * new Vector3(0, -1, 0) * Time.deltaTime
//this.gameObject.transform.Translate(this.speed * Vector3.down * Time.deltaTime);
this.transform.Translate(this.speed * Vector3.down * Time.deltaTime);
if (this.transform.position.y <= -4.559f)
{
GameObject gameDirectorGo = GameObject.Find("GameDirector");
GameDirector gameDirctor = gameDirectorGo.GetComponent<GameDirector>();
gameDirctor.IncreaseScore();
Destroy(this.gameObject);
}
if (this.IsCollide())
{
Debug.LogFormat("충돌했다.");
GameObject gameDirectorGo = GameObject.Find("GameDirector");
GameDirector gameDirector = gameDirectorGo.GetComponent<GameDirector>();
gameDirector.DecreaseHp();
Destroy(this.gameObject); //ArrowController컴포넌트가 붙어있는 게임오브젝트를 씬에서 제거한다.
}
else
{
Debug.LogFormat("충돌하지 않았다.");
}
}
//이벤트 함수
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(this.transform.position, this.radius);
}
}
CatController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CatController : MonoBehaviour
{
public float radius = 1;
private GameObject hpGaugeGo;
// Start is called before the first frame update
void Start()
{
this.hpGaugeGo = GameObject.Find("hpGauge");
}
// Update is called once per frame
void Update()
{
Image hpGauge = this.hpGaugeGo.GetComponent<Image>();
if (hpGauge.fillAmount > 0)
{
//키 입력 받기
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
//왼쪽 화살표를 눌렀다면
this.MoveLeft();
//화면에 가두기
this.transform.position = new Vector3(Mathf.Clamp(this.transform.position.x, -8.0F, 8.0F), -4, 0);
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
//오른쪽 화살표를 눌렀다면
this.MoveRight();
//화면에 가두기
this.transform.position = new Vector3(Mathf.Clamp(this.transform.position.x, -8.0F, 8.0F), -4, 0);
}
}
else
{
return;
}
}
//이벤트 함수
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(this.transform.position, this.radius);
}
public void MoveLeft()
{
this.transform.Translate(-1, 0, 0);
}
public void MoveRight()
{
this.transform.Translate(1, 0, 0);
}
}
'유니티 기초' 카테고리의 다른 글
pixel_sword (0) | 2023.08.03 |
---|---|
챕터6 고양이 점프[점프막기, 카메라 아래 최소치 정하기 미완] (0) | 2023.08.02 |
챕터5 고양이탈출 (0) | 2023.08.01 |
자동차 스와이프 SwipeCar (0) | 2023.08.01 |
유니티 (0) | 2023.07.31 |