본문 바로가기
디지털노마드

[챗GPT게임개발28] GPT-4, GPT-4o 활용 Particle System을 사용해서 산탄 효과 구현하기

by 인텔리노마드라이프 2024. 5. 18.
728x90

안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.

오늘은 GPT-4, GPT-4o 활용해서 산탄총처럼 여러 발의 총알이 퍼져 나가게 하는 파티클 시스템을 만들어봐요.

 

[오늘의 목표] 산탄총처럼 여러 발의 총알이 퍼져 나가게 하는 파티클 시스템 만들기
1. 산탄총처럼 나가게 하는 파티클 만들기
2. 실행 결과 살펴 보기 

 

 ChatGPT 답변 내용 중 제가 별도로 표시한 파란색 내용을 기준으로 읽으시면 좀 더 이해가 쉽게 될거예요.

 

산탄총처럼 발사되는 총알 만들기 

플레이어가 적을 먼 거리에서 피해를 입히게 하고 싶었어요.

그래서 총알이 날아가는 효과가 필요해요.

[질문] 안녕 ChatGPT, 산탄총처럼 여러 발의 총알이 퍼져 나가는 Particle System을 만들고 싶어

[답변]

산탄총처럼 여러 발의 총알이 퍼져 나가게 하려면, Particle System을 설정하여 여러 방향으로 발사되도록 하거나, 여러 개의 총알을 각기 다른 방향으로 발사하도록 할 수 있습니다. 여기서는 Particle System을 설정하여 산탄 효과를 구현하는 방법을 설명하겠습니다.

Particle System을 사용한 산탄 효과 구현

1. Particle System 설정

  1. Hierarchy 창에서 BulletParticleSystem을 선택합니다.
  2. Inspector 창에서 BulletParticleSystem의 설정을 변경합니다.

Main 모듈

  • Duration: 0.1 (파티클 시스템의 지속 시간)
  • Looping: 체크 해제 (파티클 시스템이 반복되지 않도록)
  • Start Lifetime: 0.5 (파티클의 수명)
  • Start Speed: 20 (파티클의 초기 속도)
  • Start Size: 0.1 (파티클의 크기)
  • Start Color: 원하는 색상 (예: 흰색)

Emission 모듈

  • Rate over Time: 0 (시간당 파티클 생성 수를 0으로 설정)
  • Bursts: 추가하고, Count를 10으로 설정 (한 번에 10개의 파티클 생성)

Shape 모듈

  • Shape: Cone
  • Angle: 25 (산탄 효과를 위해 넓은 각도로 설정)
  • Radius: 0 (점에서 발사되도록 설정)

2. 스크립트 작성

Particle System을 산탄총처럼 발사하도록 스크립트를 작성합니다.

PlayerController 스크립트

플레이어가 총알을 발사하도록 PlayerController 스크립트를 수정합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public GameObject bulletParticleSystemPrefab;
    public Transform firePoint;

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Fire();
        }
    }

    void Fire()
    {
        GameObject bulletParticleSystem = Instantiate(bulletParticleSystemPrefab, firePoint.position, firePoint.rotation);
        ParticleSystem ps = bulletParticleSystem.GetComponent<ParticleSystem>();
        ps.Play();
        Destroy(bulletParticleSystem, ps.main.duration);
    }
}

 

3. Prefab 설정

  1. Hierarchy 창에서 BulletParticleSystem을 선택하고, Inspector 창에서 설정을 완료합니다.
  2. 이 Particle System을 Prefab으로 저장합니다:
    • Project 창에서 Prefabs 폴더를 생성합니다.
    • BulletParticleSystem을 Prefabs 폴더로 드래그하여 저장합니다.
  3. PlayerController 설정:
    • 플레이어 오브젝트에 PlayerController 스크립트를 추가합니다.
    • Inspector 창에서 PlayerController 스크립트에 BulletParticleSystem Prefab과 Fire Point(총알이 발사되는 위치)를 설정합니다.

4. 테스트

  1. Play 버튼을 눌러 게임을 실행합니다.
  2. Fire 버튼 (기본적으로 마우스 왼쪽 버튼 또는 "Ctrl" 키)을 눌러 산탄 효과가 나오는지 확인합니다.

요약

  1. Particle System을 설정하여 산탄 효과를 구현합니다.
  2. PlayerController 스크립트를 수정하여 Particle System을 발사합니다.
  3. Inspector에서 필요한 설정을 완료합니다.
  4. 게임을 실행하여 산탄 효과가 나오는지 확인합니다.

이 방법을 통해 Particle System을 사용하여 산탄총처럼 여러 발의 총알이 퍼져 나가는 효과를 구현할 수 있습니다.

 

파티클을 만들기 위해 여러 속성 값들을 고민할 필요가 없네요.

위 단계대로 하나씩 진행하니 원하는 파티클이 만들어졌어요.

산탄총이 만들어졌어요.

파티클을 플레이어 자식으로 추가하고 실행했어요.

산탄총이 만들어졌어요. 

[산탄총 효과 파티클 시스템]

점프 시 산탄총을 쏘면 아래로 휘어서 떨어져요.

그런데 플레이어가 점프 후에 산탄총을 쏘면 탄알이 아래로 휘어져요. 

[점프 시 탄알이 휘어짐]

원인을 찾았어요.

파티클 시스템이 플레이어의 자식 오브젝트로 설정되어 있을 경우, 플레이어가 움직이거나 회전할 때 파티클 시스템도 영향을 받아 의도하지 않은 동작을 할 수 있어요. 이게 원인이였어요.

 

이를 해결하기 위해, 파티클 시스템을 발사할 때 플레이어의 자식에서 분리하거나, 파티클이 독립적으로 움직이도록 설정해야해요.

 

위 2가지 해결책 중  아래 방법을 사용하니 문제가 해결되었어요.

Particle System의 Simulation Space를 World 로 설정하여 파티클이 월드 좌표계를 기준으로 이동

 

다음은 두 가지 중 좌표 공간에 대해 정리한 내용이예요. 꼭 참고하시면 좋을 것 같아요.

[참고 내용]

Local과 World는 Unity에서 오브젝트의 위치와 회전을 정의하는 두 가지 주요 좌표 공간입니다. 이 두 좌표 공간의 차이점은 오브젝트의 위치와 회전이 부모 오브젝트의 위치와 회전에 따라 어떻게 영향을 받는지를 결정합니다.

Local (로컬 좌표계)

  • Local 좌표계는 오브젝트가 자신의 부모 오브젝트를 기준으로 한 위치와 회전을 의미합니다.
  • 오브젝트의 위치, 회전, 크기는 부모 오브젝트의 위치, 회전, 크기에 상대적입니다.
  • 만약 부모 오브젝트가 이동하거나 회전하면, 자식 오브젝트도 부모 오브젝트에 상대적으로 이동하거나 회전하게 됩니다.

예시:

  • 부모 오브젝트가 (10, 0, 0)에 있고, 자식 오브젝트가 부모 기준으로 (1, 0, 0)에 있다면, 자식 오브젝트의 월드 위치는 (11, 0, 0)입니다.
  • 부모 오브젝트가 90도 회전하면, 자식 오브젝트도 그에 따라 회전하게 됩니다.

World (월드 좌표계)

  • World 좌표계는 오브젝트가 전체 씬의 글로벌 좌표계를 기준으로 한 위치와 회전을 의미합니다.
  • 오브젝트의 위치, 회전, 크기는 씬의 절대적인 좌표와 관련됩니다.
  • 부모 오브젝트가 이동하거나 회전하더라도, 오브젝트는 씬의 절대적인 위치와 회전을 유지합니다.

예시:

  • 부모 오브젝트가 (10, 0, 0)에 있고, 자식 오브젝트가 월드 기준으로 (1, 0, 0)에 있다면, 자식 오브젝트의 월드 위치는 여전히 (1, 0, 0)입니다.
  • 부모 오브젝트가 90도 회전해도, 자식 오브젝트는 그대로 남아 있습니다.

Particle System의 Simulation Space 설정

  • Local: 파티클의 위치와 방향은 Particle System의 Transform에 상대적입니다. 즉, Particle System이 이동하거나 회전하면 파티클도 함께 이동하거나 회전합니다.
  • World: 파티클의 위치와 방향은 전역 좌표계에 상대적입니다. Particle System이 이동하거나 회전해도, 이미 생성된 파티클은 영향을 받지 않고 자신의 경로를 유지합니다.

Particle System에서 Local과 World의 차이점

  • Local 설정:
    • 파티클은 Particle System의 Transform을 기준으로 생성됩니다.
    • Particle System이 이동하거나 회전하면, 생성된 파티클도 그에 따라 이동하거나 회전합니다.
  • World 설정:
    • 파티클은 생성될 때의 월드 좌표계를 기준으로 움직입니다.
    • Particle System이 이동하거나 회전하더라도, 생성된 파티클은 자신의 궤적을 유지합니다.

예시:

  • Local 설정:
    • 플레이어가 이동하면, 총알(파티클)이 플레이어의 움직임에 따라 궤적이 변합니다.
  • World 설정:
    • 플레이어가 이동해도, 총알(파티클)은 발사된 방향으로 계속 직진합니다.

이러한 설정 차이를 이해함으로써, Particle System을 더 효과적으로 사용할 수 있습니다. Local 설정은 파티클이 발사 후 플레이어의 움직임에 따라 다르게 보이게 하고, World 설정은 발사된 파티클이 항상 직진하도록 만듭니다.

 

오늘은 GPT-4, GPT-4o 활용해서 산탄총처럼 여러 발의 총알이 퍼져 나가게 하는 파티클 시스템을 만들었어요.

다음 시간에는 플레이가 총알을 쏘아서 적에게 피해를 주는 기능을 구현해볼께요.

 

[인텔리노마드라이프와 함께 행복하세요 : 인텔리원스튜디오]

 

 

지금까지,

언제나 성장하는 인텔리원스튜디오(IntelliOneStudio)입니다.

감사합니다.

728x90