[유니티]탑다운 슈팅 따라하기 #16 무기 이펙트
- 게임 개발 - Unity3d
- 2020. 4. 10. 01:22
안녕하세요 유랑입니다.
실력향상을 위해서 오늘은 유튜브를 따라하면서 공부하겠습니다.
궁금하신점 있으시다면 댓글로 남겨주세요^^
1. 탑다운 슈팅 따라하기
이번 강의는 Sebastian Lague님께서 만든 예제이며,
유튜브를 보시면 자세한 내용을 배우실 수 있습니다.
유튜브 사이트 => 유튜브
2. 무기 이펙트
이번 시간에는 무기 이펙트를 만들어 보겠습니다.
총알을 발사할 때 탄피나 플래쉬 효과 등을 적용해 볼게요.
2-1) 탄피 효과 만들기 -㉠탄피 생성
우선 총을 하이라키뷰에 옮겨주세요.
빈 오브젝트를 만들어 이름을 "Shell ejection point"라고 변경해 줍니다.
이제 여기서 탄피가 나오도록 구현해 줄게요.
추가된 부분은 꼭 Aplly All을 클릭해 프리팹에 적용해 주세요!!
Bullet 프리팹을 이용해 Shell을 만들어 주겠습니다.
생성한 후 이름을 "Shell" 변경해 주세요.
이 때 서로 중복되지 않도록 UnPrefab을 꼭 해주세요.
Shell에는 해당 머티리얼을 적용해 줄텐데요.
Rendering Mode를 Fade로 변경함으로써 점점사라지는 효과를 줄거에요ㅎㅎ
그리고 머티리얼과 리지드바디, 콜라이더까지 적용해 줍니다.
충돌처리를 위해서에요.
만들어진 쉘은 프리팹으로 만들어 주겠습니다.
2-2) 탄피 효과 만들기 -㉡Shell 스크립트 작성
Shell 스크립트를 작성해 주겠습니다.
물리효과를 이용해 튀어나가는 부분과
Fade처리를 이용해 자연스럽게 사라지도록 구현하였습니다.
using UnityEngine;
using System.Collections;
public class Shell : MonoBehaviour
{
public Rigidbody myRigidbody;
public float forceMin; // 최소힘
public float forceMax; // 최대힘
float lifetime = 4; // 생존시간
float fadetime = 2; // 페이드시간
void Start()
{
float force = Random.Range(forceMin, forceMax);
myRigidbody.AddForce(transform.right * force);
myRigidbody.AddTorque(Random.insideUnitSphere * force);
StartCoroutine(Fade());
}
// 페이드 효과
IEnumerator Fade()
{
yield return new WaitForSeconds(lifetime);
float percent = 0;
float fadeSpeed = 1 / fadetime;
Material mat = GetComponent<Renderer>().material;
Color initialColour = mat.color;
while (percent < 1)
{
percent += Time.deltaTime * fadeSpeed;
mat.color = Color.Lerp(initialColour, Color.clear, percent);
yield return null;
}
Destroy(gameObject);
}
}
만든 스크립트는 Shell 프리팹에 적용 후 다음과 같이 설정해 주세요.
2-3) 머즐 플래시 효과 만들기 -㉠머즐 플래시 생성
이번에는 Muzlleflash 효과를 만들어 볼게요.
해당 스프라이트를 우선 잘라주겠습니다.
Sprite Editor를 클릭해 주세요.
2019버전부터는 이렇게 패키지를 따로받아주셔야 해당 에디터 사용이 가능합니다.
Slice를 이용해 400 x 200 사이즈로 잘라주세요.
적용되었으면 Apply까지 눌러줍니다.
나눠진 이미지들은 Muzzleflash에다가 넣어줍니다.
Muzzleflash는 빈오브젝트이며 위치와 회전값은 0입니다.
2-4) 머즐 플래시 효과 만들기 -㉡머즐 플래시 형태 잡아주기
이제 다음과 같은 형태가 나오도록 위치를 수정하겠습니다.
스케일 값도 조정하고
머즐플래시 이미지 트랜스폼값은 다음과 같습니다^^
2-5) 머즐 플래시 효과 만들기 -㉢MuzzleFlash 스크립트 작성
MuzzleFlash 스크립트를 작성해 주겠습니다.
머즐 플래쉬 이미지들을 이용해 플래쉬 효과를 만들어 줍니다.
using UnityEngine;
using System.Collections;
public class MuzzleFlash : MonoBehaviour
{
public GameObject flashHolder; // 머즐 플래쉬
public Sprite[] flashSprites; // 플래쉬 스프라이트
public SpriteRenderer[] spriteRenderers;
public float flashTime; // 플래쉬 시간
void Start()
{
Deactivate();
}
// 플래시 효과
public void Activate()
{
flashHolder.SetActive(true);
int flashSpriteIndex = Random.Range(0, flashSprites.Length);
for (int i = 0; i < spriteRenderers.Length; i++)
{
spriteRenderers[i].sprite = flashSprites[flashSpriteIndex];
}
Invoke("Deactivate", flashTime);
}
void Deactivate()
{
flashHolder.SetActive(false);
}
}
2-6) 머즐 플래시 효과 만들기 -㉣Gun 스크립트 작성
Gun 스크립트에서 MuzzleFlash 기능을 제어해줄텐데요.
탄피가 나오고 플래쉬 효과가 나오도록 순서대로 적용해 줄게요.
using UnityEngine;
using System.Collections;
// 총에 해당
public class Gun : MonoBehaviour
{
public Transform muzzle;
public Projectile projectile;
public float msBetweenShots = 100;
public float muzzleVelocity = 35;
public Transform shell;
public Transform shellEjection;
MuzzleFlash muzzleflash;
float nextShotTime;
void Start()
{
muzzleflash = GetComponent<MuzzleFlash>();
}
public void Shoot()
{
if(Time.time > nextShotTime)
{
nextShotTime = Time.time + msBetweenShots / 1000;
Projectile newProjectile = Instantiate(projectile, muzzle.position, muzzle.rotation);
newProjectile.SetSpeed(muzzleVelocity);
Instantiate(shell, shellEjection.position, shellEjection.rotation);
muzzleflash.Activate();
}
}
}
작성한 스크립트는 Gun 프리팹에 적용해주고
설정은 다음과 같습니다.
총알이 생성될 때 라이트 효과도 있어야겠죠?!
Light을 생성하여 해당 부분에 넣어줍니다.
범위와 밝기도 다음과 같이 설정해 줄게요~~
2-7) 머즐 플래시 효과 만들기 -㉤추가 설정들
탄피에 지나친 물리효과는 필요없을거에요.
우선 레이어를 "Shell"로 설정해 주고
Edit => ProjectSetting => Physics에서 Shell에 관련된 물리설정을 언체크해주세요.
물론 적과 장애물은 빼고 부탁드립니다.
샤샤샷. FPS 형태로 잡아가고있네요.
3. 마무리
오늘 강의는 여기까지입니다.
탑다운 슈팅을 따라하면서 무기 이펙트를 만들어 보았습니다.
감사합니다.
수업자료: 탑다운 슈팅 따라하기 #16 무기 이펙트