사각형 형태의 함정 오브젝트를 만들어서 배치
함정 오브젝트에 플레이어가 함정에 닿아 있는 동안에는 총알을 발사할 수 없도록 한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Trap : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
// 트리거에 충돌했을 때
private void OnTriggerEnter(Collider other)
{
// 플레이어가 가진 PlayerFire 스크립트를 가져온다.
PlayerFire pFire = other.GetComponent<PlayerFire>();
// 만일, 플레이어가 맞다면 가져온 PlayerFire의 총알 발사 가능 변수를 false로 바꾼다.
if(pFire)
{
pFire.canFire = false;
}
}
// 트리거로부터 빠져나갔을 때
private void OnTriggerExit(Collider other)
{
// 플레이어가 가진 PlayerFire 스크립트를 가져온다.
PlayerFire pFire = other.GetComponent<PlayerFire>();
// 만일, 플레이어가 맞다면 가져온 PlayerFire의 총알 발사 가능 변수를 true로 바꾼다.
if(pFire)
{
pFire.canFire = true;
}
}
}
OnTrigger > 충돌 이벤트가 발생시 호출
GetComponent > 일치하는 다른 GameObject의 속성을 가져온다.
이때 PlayerFire에 영향을 받게 되었으니
PlayerFire에 상태를 체크하는 속성을 추가한다.
// 만약 사용자가 마우스 왼쪽버튼을 누르면
if (Input.GetButtonDown("Fire1"))
{
// 만일, 총알을 쏠 수 있는 상태라면
if (canFire == true)
{
// bulletCount에 설정된 숫자만큼
for (int i = 0; i < bulletCount; i++)
{
// 총알공장에서 총알을 만들어서
GameObject bullet = Instantiate(bulletFactory);
// 총구 위치에 가져다 놓고싶다.
// bullet.transform.position = firePosition.transform.position;
// 최초 생성위치부터 1.5m 간격으로 생성.
bullet.transform.position = firstPos + new Vector3(i * 1.5f, 0, 0);
}
}
}
bool > true/false로만 저장되는 변수 형식
PlayerFire 전문
더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 사용자가 마우스 왼쪽버튼을 누르면
// 총알을 발사하고싶다. (Bullet prefab을 읽어와서 총구 위치에 가져다 놓고싶다.)
// 플레이어가 발사할 총알의 수를 지정할 수 있는 변수 bulletCount를 추가한다.
// bulletCount에 설정된 숫자만큼 Player가 총알을 발사한다.
// 발사되는 총알의 간격은 1.5m로 균일해야한다.
public class PlayerFire : MonoBehaviour
{
// 총알공장
public GameObject bulletFactory;
// 총구위치
public GameObject firePosition;
// 총알의 수
public int bulletCount = 1;
// 총알 발사 가능 체크용 변수
public bool canFire = true;
// 총알의 간격
float spacing = 1.5f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// 총알의 총 간격 = (총알의 수 - 1) * 총알의 간격
float totalSpacing = (bulletCount - 1) * spacing;
// 총알의 최초 위치(벡터) = x: firePosition - (총알의 총 간격 / 2), y:0, z:0
Vector3 firstPos = firePosition.transform.position - new Vector3(totalSpacing * 0.5f, 0, 0);
// 만약 사용자가 마우스 왼쪽버튼을 누르면
if (Input.GetButtonDown("Fire1"))
{
// 만일, 총알을 쏠 수 있는 상태라면
if (canFire == true)
{
// bulletCount에 설정된 숫자만큼
for (int i = 0; i < bulletCount; i++)
{
// 총알공장에서 총알을 만들어서
GameObject bullet = Instantiate(bulletFactory);
// 총구 위치에 가져다 놓고싶다.
// bullet.transform.position = firePosition.transform.position;
// 최초 생성위치부터 1.5m 간격으로 생성.
bullet.transform.position = firstPos + new Vector3(i * 1.5f, 0, 0);
}
}
}
}
}
'공부 > Unity 기초' 카테고리의 다른 글
3D FPS - 1 / 이동과 회전, 점프 (0) | 2022.05.17 |
---|---|
2D 슈팅 - 9 / 누적점수에 따른 속도변경 (0) | 2022.05.17 |
2D 슈팅 - 7 / 총알 추가 (0) | 2022.05.16 |
2D 슈팅 - 6 / 이동속도 증감 (0) | 2022.05.16 |
2D 슈팅 - 5 / 에셋 적용하기 (0) | 2022.05.16 |