총기가 밑에 CreateEmpty를 만든후 이름을 FirePos로 변경한고 자식으로 한다.
여기에 MyGizmo라는 Script를 하나 넣어준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyGizmo : MonoBehaviour
{
public Color _color = Color.yellow;
public float _radius = 0.1f;
private void OnDrawGizmos() {
Gizmos.color = _color;
Gizmos.DrawSphere(transform.position, _radius);
}
}
총끝에 노란공이 보인다. 너무크다
인스펙터뷰에의 My Gizmo Script변수 Radius를 0.02 Color를 클릭해 A를50으로 바꾼다.
다음같이 예쁘게 바뀐다. 이 기즈모는 씬뷰에서만 보이고 프리뷰에서는 안보인다.
그런데 노란공은 총구와 위치가 잘 않맞는다.
FirePos의 위치를 총구쪽으로 이동시켜준다. 그런데 총이 비스듬하게 되어 있어 되는듯하지만 맞추기 어렵다.
GamePlay를 누른후 포즈를 누른다.
그럼 다음같이 총구를 맞추기 쉬운 자세로 드래그및 로테이션을 할수 있다.. 이상태에서 기즈모를 하이리체서 선택해 끌어다 맞춘다. 잘되었으면 그냥 나오면 힘들게 맞춘게 틀어진다. 따라서 현재의 파라메터를 기록해야한다.
Transfor 오른쪽 삼점을 누르면 Copy>Component 할수 있다 플레이를 멈춘후 Paste해 준다. 잘 달라붙는다
이렇게 기즈모 스크립트를 작성하지 않아도 유니티에서 좌상 육각형을 눌러보면 아이콘을 고를 수 있다. 대신 이건 사이즈나 투명도를 조정할 수는 없다.
그리고 하이라키뷰의 Player를 선택하고 육각형 Icon을 눌러 위쪽으 가로로긴 원 Lable을 선택하면 게임오브젝트의 이름이 씬뷰에만 표시된다.
FireCtrl
BulletCtrl도 원래대로한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletCtrl : MonoBehaviour
{
public float damage = 20.0f;
public float force = 1500.0f;
private Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
rb.AddForce(transform.forward * force);
}
}
이전에 만든 AddForceCtrl.cs 을 제거하고 프로젝트뷰에서 아예 지워버리고 마우스좌클릭을 하면 총알을 발사하기 위해 FireCtrl.cs 스크립트을 다시 작성해서 Player에 적용할 것이다. 총알은 게임중 동적으로 생성할것이므로 하이라키의 Bullet은 지운다. 지워도 아까 프리팹으로 만들어 놨기때문에 괜찮다.
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class FireCtrl : MonoBehaviour
{
public GameObject bullet;
public Transform firePos;
// Update is called once per frame
void Update()
{
if(Input.GetMouseButtonDown(0)) {
fire();
}
}
void fire() {
Instantiate(bullet,firePos.position, firePos.rotation);
}
}
실행시키기전 글로벌변수를 인스펙트에서 끌어다 놔야한다. 프리팹의 Bullet과 하이라키 총밑에 있는 FirePos를 끌어다 연결해준다.
전 실행해보니 벽에 맞은 총알이 안없어지고 튕겨서 wall prefab에 removeBullet Script를 다시 적용해 줬다.
이번 장을 정리해보면 Player가 좌클릭을 감지하면 Fire()로 Bullet객체를 하나 만들어 준다.
만들어진 Bullet은 start()이벤트에서 AddForce()로 스스로 앞으로 날라간다.
좌클릭을 많이하면 하이라키뷰에 Bullet인스턴스가 많이 보일것다. 벽에 부딪치면 없어질것이고
'유니티게임강좌 > 총 발사 로직' 카테고리의 다른 글
[총발사로직] 파티클 이펙트 (0) | 2023.02.28 |
---|---|
[총발사로직] 총알 발사 궤적 효과 만들기 - Trail Renderer (0) | 2023.02.28 |
[총발사로직] Tag활용 (0) | 2023.02.27 |
[총발사로직] 충돌 이벤트 (0) | 2023.02.27 |
[총발사로직] Collider 컴포넌트 (0) | 2023.02.27 |