728x90
반응형
void OnTriggerEnter(Collider other)
{
if(other.tag == "Item")
{
Item item = other.GetComponent<Item>();
switch (item.type)
{
case Item.Type.Ammo:
ammo += item.value;
if (ammo > maxAmmo)
ammo = maxAmmo; //최대치 초과시 수치는 최대값과 동일
break;
case Item.Type.Coin:
coin += item.value;
if (coin > maxCoin)
coin = maxCoin;
break;
case Item.Type.Heart:
health += item.value;
if (health > maxHealth)
health = maxHealth;
break;
case Item.Type.Grenade:
grenades[hasGrenades].SetActive(true);
hasGrenades += item.value;
if (hasGrenades > maxHasGrenade)
hasGrenades = maxHasGrenade;
break;
}
Destroy(other.gameObject); //접촉한 소모아이템 파괴
}
else if (other.tag == "EnemyBullet") //플레이어 피격 구현
{
if(!isDamage)
{
Bullet enemyBullet = other.GetComponent<Bullet>();
health -= enemyBullet.damage;
StartCoroutine(OnDamage());
}
}
}
IEnumerator OnDamage()
{
isDamage = true;
foreach(MeshRenderer mesh in meshs)
{
mesh.material.color = Color.yellow; //모든 재질의 색상 변경
}
yield return new WaitForSeconds(1f); //WaitForSeconds()로 무적 타임 조정
isDamage = false;
foreach (MeshRenderer mesh in meshs)
{
mesh.material.color = Color.white; //모든 재질의 색상 변경
}
}
캐릭터 피격을 위한 스크립트를 작성합니다.
void OnTriggerEnter(Collider other)
{
if(other.tag == "Item")
{
Item item = other.GetComponent<Item>();
switch (item.type)
{
case Item.Type.Ammo:
ammo += item.value;
if (ammo > maxAmmo)
ammo = maxAmmo; //최대치 초과시 수치는 최대값과 동일
break;
case Item.Type.Coin:
coin += item.value;
if (coin > maxCoin)
coin = maxCoin;
break;
case Item.Type.Heart:
health += item.value;
if (health > maxHealth)
health = maxHealth;
break;
case Item.Type.Grenade:
grenades[hasGrenades].SetActive(true);
hasGrenades += item.value;
if (hasGrenades > maxHasGrenade)
hasGrenades = maxHasGrenade;
break;
}
Destroy(other.gameObject); //접촉한 소모아이템 파괴
}
else if (other.tag == "EnemyBullet") //플레이어 피격 구현
{
if(!isDamage)
{
Bullet enemyBullet = other.GetComponent<Bullet>();
health -= enemyBullet.damage;
StartCoroutine(OnDamage());
}
}
}
IEnumerator OnDamage()
{
isDamage = true;
foreach(SkinnedMeshRenderer mesh in meshs)
{
mesh.material.color = Color.yellow; //모든 재질의 색상 변경
}
yield return new WaitForSeconds(1f); //WaitForSeconds()로 무적 타임 조정
isDamage = false;
foreach (SkinnedMeshRenderer mesh in meshs)
{
mesh.material.color = Color.white; //모든 재질의 색상 변경
}
}
피격 테스트를 위한 오브젝트를 생성합니다.
태그와 레이어를 EnemyBullet으로 설정하고 박스 콜라이더를 트리거로 설정한 뒤
Bullet 스크립트를 드래그&드롭한 뒤 데미지를 설정해줍니다.
이후 오브젝트를 캐릭터에 닿게 옮겨보면 스크립트에 작성된 대로
플레이어의 체력이 깎이며 스킨매쉬랜더러가 노란색으로 변경되는 것을 확인할 수 있습니다.
728x90
반응형
'유니티 > AA(3D 쿼터뷰 액션 게임)' 카테고리의 다른 글
AA(24) - 심플한 UI 제작 (0) | 2021.09.27 |
---|---|
AA(23) - 다양한 형태의 몬스터 공격 구현 (0) | 2021.09.27 |
AA(21) - 플레이어 추격하는 몬스터 AI 구현 (0) | 2021.09.23 |
AA(20) - 수류탄 구현 (0) | 2021.09.23 |
AA(19) - 벽 뚫기 방지 (0) | 2021.09.17 |