안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.
오늘은 GPT-4, GPT-4o 활용해서 산탄총처럼 여러 발의 총알이 퍼져 나가게 하는 파티클 시스템을 만들어봐요.
[오늘의 목표] 산탄총처럼 여러 발의 총알이 퍼져 나가게 하는 파티클 시스템 만들기
1. 산탄총처럼 나가게 하는 파티클 만들기
2. 실행 결과 살펴 보기
※ ChatGPT 답변 내용 중 제가 별도로 표시한 파란색 내용을 기준으로 읽으시면 좀 더 이해가 쉽게 될거예요.
산탄총처럼 발사되는 총알 만들기
플레이어가 적을 먼 거리에서 피해를 입히게 하고 싶었어요.
그래서 총알이 날아가는 효과가 필요해요.
[질문] 안녕 ChatGPT, 산탄총처럼 여러 발의 총알이 퍼져 나가는 Particle System을 만들고 싶어
[답변]
산탄총처럼 여러 발의 총알이 퍼져 나가게 하려면, Particle System을 설정하여 여러 방향으로 발사되도록 하거나, 여러 개의 총알을 각기 다른 방향으로 발사하도록 할 수 있습니다. 여기서는 Particle System을 설정하여 산탄 효과를 구현하는 방법을 설명하겠습니다.
Particle System을 사용한 산탄 효과 구현
1. Particle System 설정
- Hierarchy 창에서 BulletParticleSystem을 선택합니다.
- 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 설정
- Hierarchy 창에서 BulletParticleSystem을 선택하고, Inspector 창에서 설정을 완료합니다.
- 이 Particle System을 Prefab으로 저장합니다:
- Project 창에서 Prefabs 폴더를 생성합니다.
- BulletParticleSystem을 Prefabs 폴더로 드래그하여 저장합니다.
- PlayerController 설정:
- 플레이어 오브젝트에 PlayerController 스크립트를 추가합니다.
- Inspector 창에서 PlayerController 스크립트에 BulletParticleSystem Prefab과 Fire Point(총알이 발사되는 위치)를 설정합니다.
4. 테스트
- Play 버튼을 눌러 게임을 실행합니다.
- Fire 버튼 (기본적으로 마우스 왼쪽 버튼 또는 "Ctrl" 키)을 눌러 산탄 효과가 나오는지 확인합니다.
요약
- Particle System을 설정하여 산탄 효과를 구현합니다.
- PlayerController 스크립트를 수정하여 Particle System을 발사합니다.
- Inspector에서 필요한 설정을 완료합니다.
- 게임을 실행하여 산탄 효과가 나오는지 확인합니다.
이 방법을 통해 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)입니다.
감사합니다.
'디지털노마드' 카테고리의 다른 글
[챗GPT게임개발30] GPT-4, GPT-4o 활용해서 플레이어의 총알 발사 애니메이션 적용하기(1) (2) | 2024.05.18 |
---|---|
[챗GPT게임개발29] GPT-4, GPT-4o 활용해서 산탄 효과(Particle System)를 플레이어에 적용하기 (76) | 2024.05.18 |
[챗GPT게임개발27] Unity에서 파티클 시스템을 다른 프로젝트로 이동하기 (69) | 2024.05.17 |
[챗GPT게임개발25] GPT-4, GPT-4o로 게임 이벤트 시스템 최적화하기 (3) | 2024.05.17 |
[챗GPT 활용성 비교2] GPT-4 vs. GPT-4o: 두 AI에게 동일한 질문하기 (83) | 2024.05.16 |