참고 : https://docs.unity.cn/kr/2021.3/Manual/InstantiatingPrefabs.html
진정한 개발자라면 문제가 생겼을 때 docs를 보는 것...... (아님) (개인 의견임)
그러나 나는 쩌리라 매일 티스토리와 스택오버플로우를 닥닥 긁어서 봤는데
이번에! docs 보고! 생각보다 너무 유용했음
..그냥 자랑질 해봤어요
크리스탈을 총알로 맞추면 터지는 애니메이션을 재생해야한다.
근데 터지기 전 크리스탈(crystal origin)과 터진 후 애니메이션이 적용된 크리스탈(crystal blow) 이렇게 2개의 오브젝트가 주어졌다.
첫 번째로 생각한 방법
내 머릿속 .oO(너무 비효율적인 게 아닌가.. 용량을 많이 잡아먹을 것 같은데)

오늘도 뇌피셜 실패........~
그래도 알아서 다행이지...... 몰랐으면 디자이너님 괴롭히고 최적화도 실패했을 듯ㅎ;;; (백수 엔딩)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CrystalBlow : MonoBehaviour
{
[SerializeField] private GameObject blowVersion;
public void onCollisionEnter()
{
Destroy(gameObject); //맞은 물체 제거
Instantiate(blowVersion, transform.position, transform.rotation); //그 자리에 파괴된 프리팹 추가
}
}
해당 스크립트를 맞출 물체에 넣기
crystal origin에 넣는다.

blow version 변수에 crystal blow 프리팹을 넣는다.
파괴된 프리팹을 끌어다 넣어주면 되는데 중요한 건 프리팹임!

폴더에 있는 걸 끌어넣어주셔야 함.
씬에 있는 거 no~
shooting.cs 에서 collision 발생 시(총알이 닿을 시) onCollisionEnter() 함수를 불러온다.
public void TriggerShoot()
{
Ray ray = new Ray(firePos.transform.position, firePos.transform.forward);
RaycastHit hitInfo;
//크리스털에 총알이 맞았으면
if(Physics.Raycast(ray, out hitInfo, 30))
{
//Debug.Log("hit!!!!!!!!!!!!!!:"+hitInfo.collider.gameObject.name);
if (hitInfo.collider.gameObject.tag == "crystal")
{
BulletImpact(hitInfo);
hitInfo.collider.gameObject.GetComponent<CrystalBlow>().onCollisionEnter(); //격추 시 크리스탈 효과
}
}
}
네.. 그럼 끝입니다.
내가 맞출 물체에 다음 행동을 하지 않았는지 점검해보자.
1. collider 넣기
2. 적용한 collider 범위를 물체에 맞게 확장(수정)했는지
3. tag 가 shooting.cs에서 설정한 거랑 일치하는지
나는 ... cystal tag를 설정 안 해서 한 번 실패함
근데 바로 console 오류 보고 문제 해결해서 비교적 쉽게 구현이 끝났다!!
파편이 터지는 애니메이션의 경우 playable director를 사용했는데...
사실 이건 잘 모르겠다.
alembic 패키지를 깔아서 썼는데 디자이너님이 다 해주신 거 받아오기 밖에 안했음
디자이너 님 사랑해요~