1942.unity
ํจ์คํธ์บ ํผ์ค ๋ณด๋ฉด์ ์ํ ๊ฒ์ ํ๋ฒ ๋ง๋ค์๋ค๊ฐ ๋ฐฑ์ ์ ์ ๋ชป ํด์์ธ์ง ํ๋ฆฌํน์ด๋ ์ด๋ฏธ์ง๋ง ๋จ์ ์๋ ํ๋ก์ ํธ, ๋ญ๊ฐ ๋ค์ ํด๋ณผ๊น ํ๋๋ฐ ๊ทธ๋ฅ ์ง์์ผ ๊ฒ ๋ค.
์ง์ฐ๊ธฐ ์ ์ ์์ฌ์ด ๋ถ๋ถ๋ง ์ ๋ฆฌํด๋๋ค. ์ผ๋จ ์คํ๋ผ์ดํธ ๋์ ํ๋ธ๋ก ๊ธฐ์ฒด๋ฅผ ๋ง๋ค์๋ค. ์ ๊ธฐํ ๋ฐ์์ด๋ค? ๊ทผ๋ฐ ์ด๊ฒ ํญ๋ฐํ ๋ ๊ฐ๋ฃจ๋ก ๋ง๋ค๋ ค๊ณ ์ด๋ ๊ฒ ๋ง๋ค์๋ ๋ถ๋ถ์ด๋ค. ๋ ํ๋ธ๋ฅผ ๋ฌถ์ด์ ํํธ์ด ๋๊ฒ ํ ์๋ ์๊ณ ...
๊ทธ๋์ ์์ฌ์ด ๋ง์์ ๋ง์ง๋ง ํ ์คํธ๋ฅผ ํด๋ณด์๋ค. ์ผ๋จ ์ ๋ถ ๊ฐ๋ฃจ๋ก ๋ง๋ค๊ธฐ...
์ฒจ์ AddForce๋ก ์ฌ๋ฐฉ์ผ๋ก ํญ๋ฐํ๊ฒ ๋ง๋ค์๋๋ ๋ค๋ฅ๋ค๋ฅ ๋ถ์ด์๋ ๋ ๊ฐ ๋ถ๋ถ์ด ๊ทธ๋๋ก ์์ง ๋ํ ํด๋ฒ๋ ธ๋ค.
์ฝ๊ฐ ๊ณ ๋ฏผํ๋ค๊ฐ ๋๋คํ ๋ฐฉํฅ์ผ๋ก ๋ ์๊ฐ๊ฒ ๋ง๋ค์๋ค.
using UnityEngine;
using System.Collections;
public class CubeExplosion : MonoBehaviour
{
public float explosionForce = 1000f; // ํญ๋ฐ๋ ฅ
public float explosionRadius = 5f; // ํญ๋ฐ ๋ฐ๊ฒฝ
public float zMoveSpeed = -2f; // Z์ถ ์ด๋ ์๋
public Transform parentObject; // ์์ ๊ฐ์ฒด
// ์์ ์ 5์ด ํ ํญ๋ฐ
void Start()
{
if (parentObject == null)
{
// ์์ ๊ฐ์ฒด๊ฐ ์ง์ ๋์ง ์์๋ค๋ฉด ํ์ฌ ๊ฐ์ฒด์ ๋ถ๋ชจ๋ฅผ ์ฌ์ฉ
parentObject = transform.parent;
}
StartCoroutine(ExplodeAfterDelay(3f)); // 5์ด ์ง์ฐ
}
// ์ง์ฐ ํ ํญ๋ฐํ๋ ์ฝ๋ฃจํด
IEnumerator ExplodeAfterDelay(float delay)
{
yield return new WaitForSeconds(delay); // ์ง์ฐ
Explode(); // ํญ๋ฐ ๋ฉ์๋ ํธ์ถ
}
// ํญ๋ฐ ํจ๊ณผ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฉ์๋
public void Explode()
{
StartCoroutine(MoveParentOnZAxis()); // ์์ ๊ฐ์ฒด Z์ถ ์ด๋
// ํ๋ฆฌํน์ ๋ชจ๋ ์์ ๊ฐ์ฒด(ํ๋ธ)์ ์ ๊ทผ
foreach (Transform child in transform)
{
// ์์์ Rigidbody ์ปดํฌ๋ํธ๊ฐ ์๋ค๋ฉด ์ถ๊ฐ
Rigidbody rb = child.gameObject.AddComponent<Rigidbody>();
// ํญ๋ฐ ํจ๊ณผ ์ ์ฉ
//rb.AddExplosionForce(explosionForce, transform.position, explosionRadius);
// ๋๋คํ ๋ฐฉํฅ ๋ฒกํฐ ์์ฑ
Vector3 randomDirection = Random.insideUnitSphere * explosionForce;
// ํญ๋ฐ ํจ๊ณผ ์ ์ฉ
rb.AddForce(randomDirection);
// ๋๋คํ ์๊ฐ ํ์ ๊ฐ์ฒด ํ๊ดด
StartCoroutine(DestroyAfterRandomTime(child.gameObject));
}
}
IEnumerator MoveParentOnZAxis()
{
while (true)
{
if (parentObject != null)
{
parentObject.Translate(0, 0, zMoveSpeed * Time.deltaTime);
}
yield return null;
}
}
IEnumerator DestroyAfterRandomTime(GameObject obj)
{
float delay = Random.Range(1f, 5f); // 1~5์ด ์ฌ์ด ๋๋ค
yield return new WaitForSeconds(delay);
Destroy(obj);
}
}
๊ทธ๋ฌ๋๋ ๊ฐ๋ฃจ๊ฐ ๋์ด ๋ฒ๋ ค์, z์ถ์ผ๋ก ๋ค๋ก ๋ ๋ผ๋ฒ๋ ธ๋ค. ์ด๋ ๊ฒ ํด์ผ ๊ฐ๋ฃจ๊ฐ ๋ ํ๋ธ๊ฐ ๋ถ์์ฐ์ค๋ฝ์ง ์๋ค.
์ด๋ ์ ๋๋ ๊ทธ๋ด๋ฏ ํ์ง๋ง ๋นํ๊ธฐ๊ฐ ๊ฐ๋ฃจ๊ฐ ๋๋ค๋? ์ข ์ด์ํ์ง ์์? ๊ฒฐ๊ตญ ๋ฉ์ด๋ฆฌ๊ฐ ํฐ์ง๋ ๊ฒ ์์ฐ์ค๋ฝ์ง ์์๊น? ์๊ฐํ๋ฉด์ ํ๋ฆฌํน์ ์ ๋นํ ๊ทธ๋ฃจํ ํ๋ค.
๊ทธ๋ด ๋ฏ ํ๋ฐ ๋๋ฌด ๋นจ๋ฆฌ ์ฌ๋ผ์ง๋? ์ถ์ด์ z์ถ ์๋๋ฅผ 1/2๋ก ์ค์๋๋ ๋ ์ด์ํ๋ค. ํ์ ์ด ์์ด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.
ํ์ ์ ๋ฃ์ด๋ณด์! ์๋... ์ ๋นํ ์ค์ ์ ์ก์์ค์ผ ํ๋๊ตฌ๋? ๊ทธ๋ฌ๋ค... ๋ง๋ค... ๋ฌด๊ฒ ์ค์ฌ์ ๊ตฌํด์ ์ค์ ์ ๊ทธ๊ณณ์ผ๋ก ์ฎ๊ฒจ์ผ ๋๋ค. ์ง๊ธ ๋๋ฌด ๋๋ญ์ ๊ฐ์๋ฐ... ๋๋ ๋ชป ํ๊ฒ ๋ค. ๋ด์ผ์ ์ํด ์ ์ ์์ผ๊ฒ ๋ค.
'๊ฒ์ ํ๋ก๊ทธ๋๋ฐ > ์ ๋ํฐ ์์ง(Unity)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ๋ํฐ ํ๋ ๊ฐ๊ฒฉ ์ ์ฑ ๋ณ๊ฒฝ (0) | 2023.09.15 |
---|---|
์ ๋ํฐ ํ์ผ๋งต์ ๊ตฌ๋ฉ ๋ซ๋ ๋ฐฉ๋ฒ (0) | 2023.07.09 |
UModeler Lite (2) | 2022.09.30 |
์ ๋ํฐ C# ๊ธฐ์ด - ์ด๋ฒคํธ ํจ์์ ์คํ ์์ (0) | 2022.09.05 |
์ ๋ํฐ ๊ต๊ณผ์ 4์ฅ. UI์ ๊ฐ๋ ์ค๋ธ์ ํธ (0) | 2022.09.05 |