728x90
반응형
Trail Renderer을 이용해 날아가는 총알을 만들고 탄피는 에셋스토어에서 받은 뒤
리지드바디와 박스콜라이더를 추가해줍니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bullet : MonoBehaviour
{
public int damage;
void OnCollisionEnter(Collision collision) //충돌 로직 작성
{
if (collision.gameObject.tag == "Floor")
{
Destroy(gameObject, 3);
}
else if (collision.gameObject.tag == "Wall")
{
Destroy(gameObject);
}
}
}
총알이 벽과 닿으면 사라지고
탄피가 바닥에 닿으면 3초뒤 사라지도록 스크립트를 작성해줍니다.
원거리 공격 애니메이션과 트리거를 설정해줍니다.
void Attack()
{
anim.SetTrigger(equipWeapon.type == Weapon.Type.Melee ? "doSwing" : "doShot");
}
무기 타입에 따라 다른 애니메이션이 출력되도록 스크립트를 추가합니다.
public Transform bulletPos;
public GameObject bullet;
public Transform bulletCasePos;
public GameObject bulletCase;
총알과 총알이 출발할 좌표, 탄피와 탄피가 생성될 좌표를 선언해줍니다.
탄피가 생성될 좌표를 잡아줍니다.
선언한 변수에 오브젝트들을 할당해줍니다.
public void Use()
{
if (type == Type.Melee)
{
StopCoroutine("Swing");
StartCoroutine("Swing");
}
else if (type == Type.Range)
{
StartCoroutine("Shot");
}
}
IEnumerator Shot()
{
//총알 발사
GameObject intantBullet = Instantiate(bullet, bulletPos.position, bulletPos.rotation);
Rigidbody bulletRigid = intantBullet.GetComponent<Rigidbody>();
bulletRigid.velocity = bulletPos.forward * 50; //탄속 50
yield return null;
//탄피 배출
GameObject intantCase = Instantiate(bulletCase, bulletCasePos.position, bulletCasePos.rotation);
Rigidbody caseRigid = intantBullet.GetComponent<Rigidbody>();
Vector3 caseVec = bulletCasePos.forward * Random.Range(-3, -2) + Vector3.up * Random.Range(2, 3);
//탄피에 랜덤한 힘
caseRigid.AddForce(caseVec, ForceMode.Impulse);
caseRigid.AddTorque(Vector3.up * 10, ForceMode.Impulse);
}
총알이 나가는 힘, 불규칙성을 주기 위해 랜덤 값 등을 스크립트로 작성합니다.
총알이 발사되지만 벽을 관통합니다.
스크립터만 작성하고 아직 게임환경에서 벽에 Wall태그가 설정되지 않았습니다.
오브젝트들에 태그를 설정해줍니다.
728x90
반응형
'유니티 > AA(3D 쿼터뷰 액션 게임)' 카테고리의 다른 글
AA(18) - 공격 방향 설정 (1) | 2021.09.17 |
---|---|
AA(17) - 원거리무기 재장전 (0) | 2021.09.17 |
AA(15) - 근접무기 공격 구현 (0) | 2021.09.15 |
AA(14) - 폭탄아이템 횟수 표시&회전 (0) | 2021.09.15 |
AA(13) - 소모아이템 획득 (1) | 2021.09.14 |