유니티(unity) 오브젝트 파괴/파편 (Collider/Rigidbody 이용)2편
1편에서 GetComponentsInChildren 을 이용해서 자식 오브젝트들의 컴퍼넌트에 접근했습니다.
파괴되는 오브젝트 종류가 물통 한 종류도 아니고, 여러개의 또는 몇 십개의 파괴 오브젝트에 "Box Collider", "Rigidbody"를 수동으로 컴퍼넌트 추가를 하려니 이것도 비효율적입니다.
스크립트를 이용해서 자식 오브젝트에 컴퍼넌트를 추가할 수 있습니다.
아래 c# 스크립트입니다.
using UnityEngine;
using System.Collections;
public class addcomp : MonoBehaviour {
public Component[] component;
public Collider[] colliders;
public float Mass = 1;
public float Drag = 2;
void Awake() {
component = gameObject.GetComponentsInChildren<Comp/onent>();//컴포넌트 사이 "/" 제거하십쇼
foreach(Component item in component)
{
item.gameObject.AddComponent<Box/Collider>(); //박스 콜라이더 사이 "/" 제거 하십쇼
item.gameObject.AddComponent<Rigid/body>(); //리자드 바디 사이 "/"제거 하십쇼
item.rigidbody.constraints = (RigidbodyConstraints)126;
item.rigidbody.mass = Mass;
item.rigidbody.drag = Drag;
}
}
void OnTriggerEnter(Collider col)
{
if(col.tag == "Weapon")
{
colliders = gameObject.GetComponentsInChildren<Collider>();
foreach(Collider item in colliders)
{
item.rigidbody.constraints = (RigidbodyConstraints)0;
Destroy(gameObject, 10);
}
}
}
}
1부에서 봤던 스크립트와 거의 비슷합니다.
Collider[] -> Component[]
collider -> component
위와같이 단어만 바꿔주면 됩니다.(대소문자 주의!)
유니티가 실행이되면 컴퍼넌트가 추가 되지 않기 때문에 void Awake() 에서 컴퍼넌트를 추가 합니다.
컴퍼넌트를 추가 할때는 gameObject.AddComponent<해당 컴퍼넌트 이름>(); 을 사용합니다.
item.gameObject.AddComponent<Box/Collider>();//박스 콜라이더 사이 "/" 제거 하십쇼
item.gameObject.AddComponent<Rigid/body>(); // 리자드 바디 사이 "/"제거 하십쇼
item.gameObject.AddComponent<해당 컴퍼넌트 이름>(); // 이와같이 해당 컴퍼넌트 이름을 입력해주면 됩니다.
rigidbody.constraints = RigidbodyConstraints.FreezeRotationX
파괴 오브젝트 스크립트의 핵심은 Rigidbody의 Constraints의 Freeze를 조절 하는것입니다.
Freeze None 없음 = 0,
FreezePositionX = 2,
FreezePositionY = 4,
FreezePositionZ = 8,
FreezePosition = 14, //Position체크 전부 체크
FreezeRotationX = 16,
FreezeRotationY = 32,
FreezeRotationZ = 64,
FreezeRotation = 112, //Rotation만 전부 체크
FreezeAll = 126 ,
item.rigidbody.constraints = (RigidbodyConstraints)126; //Freeze Position, Rotation 전부 체크
item.rigidbody.constraints = (RigidbodyConstraints)0; //Freeze Position, Rotation 전부 체크 해제
Freeze 값을 적절하게 이용해주면 사방으로 튀는 파괴오브젝트뿐만 아니라 무너져 내리는 벽도 응용할 수 있습니다.
무너져 내리는 벽을 상,중,하로 나누고, 하단에 파편 오브젝트는 XYZ 전부 튀게 해주고
상,중단에 있는 파편 오브젝트에는 X,Z축만 Freeze를 걸어주면 상,중단 파편 오브젝트는 아래쪽으로 스스륵 무너집니다.