👾초기컨셉
작은 얼음 덩어리가 왼쪽 방향으로 이동하면서 플레이어를 밀어냄
여기서 플레이어 속도, 에너미 생성 속도를 변경했지만 난이도 조절이 어려운 거 같아서
1. 랜덤한 시간에 따라서 에너미가 생성
2. 일정 확률로 거대한 에너미 생성
3. 에너미끼리 충돌하지 않게 레이어 설정
위 세가지를 진행하여 난이도 조절을 해보겠다.
👾구현
1. 랜덤한 시간에 따라서 에너미가 생성
using System.Collections;
using System.Collections.Generic;
using System.IO.IsolatedStorage;
using UnityEngine;
public class EnemyManager : MonoBehaviour
{
// 현재 시간
float currentTime;
// 생성 시간
float createTime;
// 최소시간
public float minTime = 0.5f;
// 최대시간
public float maxTime = 3f;
// 적 공장
public GameObject enemyFactory;
// Start is called before the first frame update
void Start()
{
createTime = UnityEngine.Random.Range(minTime, maxTime);
}
// Update is called once per frame
void Update()
{
// 1. 시간이 흐르다가
currentTime += Time.deltaTime;
// 2. 일정 시간이 되면
if (currentTime > createTime) {
// 3. 적 공장에서 적을 생성하고
GameObject enemy = Instantiate(enemyFactory);
// 4. 그것을 내 위치(enemy manager)에 두고싶다.
enemy.transform.position = transform.position;
createTime = UnityEngine.Random.Range(minTime, maxTime);
currentTime = 0;
}
}
}
해당 스크립트를 적용해주면 일정한 시간에 따라서 에너미가 랜덤으로 생성된다.
2. 일정 확률로 거대한 에너미 생성
위 코드는 일정 확률로 작은 에너미만 생성된다. 거대한 에너미를 생성하기 위해서는 거대한 에너미 팩토리와 거대한 에너미가 스폰 될 확률을 조건으로 걸어줘야한다.
using System.Collections;
using System.Collections.Generic;
using System.IO.IsolatedStorage;
using UnityEngine;
public class EnemyManager : MonoBehaviour
{
// 현재 시간
float currentTime;
// 생성 시간
float createTime;
// 최소시간
public float minTime = 0.5f;
// 최대시간
public float maxTime = 3f;
// 적 공장
public GameObject enemyFactory;
public GameObject bigEnemeyFactory;
// Start is called before the first frame update
void Start()
{
createTime = UnityEngine.Random.Range(minTime, maxTime);
}
// Update is called once per frame
void Update()
{
// 1. 시간이 흐르다가
currentTime += Time.deltaTime;
// 2. 일정 시간이 되면
if (currentTime > createTime) {
int bigEnemySpawnPer = UnityEngine.Random.Range(0, 9);
if (bigEnemySpawnPer < 3)
{
GameObject bigEnemy = Instantiate(bigEnemeyFactory);
bigEnemy.transform.position = transform.position;
}
else
{
// 3. 적 공장에서 적을 생성하고
GameObject enemy = Instantiate(enemyFactory);
// 4. 그것을 내 위치(enemy manager)에 두고싶다.
enemy.transform.position = transform.position;
}
createTime = UnityEngine.Random.Range(minTime, maxTime);
currentTime = 0;
}
}
}
3. 에너미끼리 충돌하지 않게 레이어 설정
에너미는 플레이어를 밀어내기 위해서 rigid body와 collider가 설정 되어있는데, 이점때문에 에너미끼리 겹치게되면 그자리에 정지하는 경우가 생긴다. 그래서 Layer를 설정해서 서로 겹치더라도 충돌을 무시하도록 설정해줘야한다.
우측 상단에서 레이어를 추가해준 다음
레이어를 추가해주고싶은 게임 오브젝트를 선택 > 인스펙터 창에서 동일한 레이어로 설정해준다.
이제 edit > project setting > physics에 들어가서 아래 충돌을 무시 할 레이어끼리 체크박스를 해제해주면 된다.
나는 Enemy layer끼리의 충돌을 무시하기위해 Enemy, Enemy가 만나는 교착지점의 체크박스를 해제했다.
이렇게 해주면~~
👾결과
+ 영상을 보면 플레이어가 큰 에너미에 튕겨져 나가는 모습, 큰 에너미는 떨어지지 않는 모습이 보이는데, 이는 rigid body를 추가해서 해결했다.
'동식이 취업시키기 작전 > FPS - Penguin party(feat. unity)' 카테고리의 다른 글
[Unity] Particle 적용하는 방법(feat. Delta Time) (2) | 2023.07.31 |
---|---|
[Unity] 씬 분리하기(== 씬 만들기), 씬 전환하기(feat. 기존 씬으로 돌아가기) (0) | 2023.07.29 |
[Unity] 플레이어가 죽으면 게임 종료, 다시 시작하는 옵션 창 만들고 적용하기 (1) | 2023.07.28 |