Unity Effect(Particle System)_Prefab

GonoBae
5 min readOct 14, 2021

--

대충 Red Enemy 가 Wall 에 부딪히면 이펙트가 팡! 터지게끔 만들어주자.

간단한 게임을 만들거라면 Prefab 을 불러오면 되고

보통의 게임은 풀 시스템을 사용하기 때문에 이를 이용해도 된다.

우선은 Prefab 을 이용해서 만들어보자.

우선 Red Enemy 가 부딪히면 띄워줄 Effect 를 하나 만들어주자.

설정은 아래와 같이 하면 만들 수 있다.

자! 이제 코딩타임~~

우선 적이 오른쪽에서 왼쪽으로 움직여야 합니다!!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyMovement : MonoBehaviour
{
public Rigidbody2D rb;
public Vector2 direction;
public float speed;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
}
private void FixedUpdate()
{
rb.velocity = new Vector2
(direction.x * speed * Time.fixedDeltaTime, rb.velocity.y);
}
}

이제 이를 Enemy 에 넣고 설정해준다.

테스트 해보면

움직이다 벽에 부딪히고 멈춘다.

(벽과 바닥에도 BoxCollider2D 달아주어야함)

이제 Enemy Script 를 하나 만들고 충돌처리를 해주자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public GameObject eff_Boom;
private void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.CompareTag("Wall"))
{
OnDie();
Instantiate
(eff_Boom, transform.position, Quaternion.identity);
}
}
void OnDie()
{
Destroy(gameObject);
}
}

Wall 태그가 있는 Object 와 부딪히면 자신은 사라지고 Effect 를 띄운다.

이제 이를 Enemy 에 달아주고 설정해주자.

Effect 를 Prefab 으로 만들어주고 Enemy Script 에 넣어준다.

이제 테스트 해보자.

문제가 하나 발생한다.

Effect 가 생성되기는 하지만 계속 화면에 떠있다.

일정 시간 뒤에 이를 없애줄 Script 가 필요하다.

Effect 에 Script 를 하나 달아주자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyEffect : MonoBehaviour
{
public float durationTime;
IEnumerator Start()
{
yield return new WaitForSeconds(durationTime);
OnDie();
}
void OnDie()
{
Destroy(gameObject);
}
}

단순히 durationTime 후에 Effect 를 없앤다.

시간은 1초로 설정해주고 테스트 해보자.

성공!!

오늘은 여기까지 :)

--

--