유니티

유니티 총쏘기 게임 만들기 - 2 총 발사하기

당혜성 2025. 3. 28. 23:06

일단 픽시드 조이스틱을 지워주자.

내용물은 알아서 지우고, 스크립트만 보여주겠다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class palyer : MonoBehaviour
{
    public GameManager gameManager;
    public Rigidbody rbody;
    public FixedJoystick fixedJoystick;
    public Vector3 moveDir;
    public float moveSpeed;

    void Update()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float z = Input.GetAxisRaw("Vertical");
        moveDir = new Vector3(x, 0, z);
        moveDir.Normalize();

        //회전 태그가 메인 카메라인 카메라에 자동 참조
        if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out RaycastHit hit,
            float.MaxValue, 1 << LayerMask.NameToLayer("MouseRay")))
        {
            Vector3 lookDir = hit.point - transform.position;
            lookDir.y = 0;
            transform.LookAt(transform.position + lookDir);
        }
    }
    


    private void FixedUpdate()
    {
        rbody.MovePosition(rbody.position + moveDir * moveSpeed);
    }
}

float x = Input.GetAxisRaw("Horizontal");
float z = Input.GetAxisRaw("Vertical");

여기 두 줄에 있던 거 지운 거뿐이다.

총알 프리팹 만들기

3D project -> Sphere -> 이름은 불릿으로 해주자.

그 후 트렌스폼 리셋 하고 크기를 0.3 0.3 0.3으로 해주자.

위치 조정은 알아서 하도록 하자

 

그 후 메테리얼로 총알 색을 바꿔보자.

메테리얼 파일에서 우클릭 -> Create -> Material 후 색은 자기가 알아서 넣도록 하자.

 

Tranfrom 0 0 0으로 만들고 rigidbody를 만들어 주고 bullit을 Prefabs에 넣어준다. 그리고 Hierarchy에 있는 bullt을 지워주도록 하자.

 

벽 높이기

우리가 만든 벽을 y축만 3으로 만들면 된다.

 

클릭으로 총 발사

Palyer 스크립트를 열자

 

Palyer 스크립트

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class palyer : MonoBehaviour
{
    public GameManager gameManager;
    public Rigidbody rbody;
    public FixedJoystick fixedJoystick;
    public GameObject bulletPrefab;
    public Transform muzzle;
    public Vector3 moveDir;
    public float moveSpeed;

    void Update()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float z = Input.GetAxisRaw("Vertical");
        moveDir = new Vector3(x, 0, z);
        moveDir.Normalize();

        //회전 태그가 메인 카메라인 카메라에 자동 참조
        if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out RaycastHit hit,
            float.MaxValue, 1 << LayerMask.NameToLayer("MouseRay")))
        {
            Vector3 lookDir = hit.point - transform.position;
            lookDir.y = 0;
            transform.LookAt(transform.position + lookDir);
        }

        //총 쏘기 / Down은 누를때마다 up은 마우스 땔때 그냥은 계속 / 0은 좌 1은 우 2는 휠
        if (Input.GetMouseButtonDown(0))
        {
            Instantiate(bulletPrefab, muzzle.position, transform.rotation);
        }
    }
    


    private void FixedUpdate()
    {
        rbody.MovePosition(rbody.position + moveDir * moveSpeed);
    }
}

이렇게 끌어 넣도록 하자

 

이대로 실행하고 마우스를 클릭해 보면 무량공처를 맞은 거처럼 느리다.

와! 사진같아요! ???:당연히 찍었으니까 사진이지

총알과 플레이어 충돌 방지

일단 불릿과 플레이어 모두 레이어를 불릿은 불릿, 플레이어는 플레이어로 바꿔주자. 플레이어를 바꾸려고 하면 차일드 어쩌고가 나오는데, 자식 클래스도 다 바꿀 거냐고 물어보는 것이다. 눌러주도록 하자.

 

다음 Edit -> Project Settings

 

Physics -> 아래로 내리기

Palyer와 Bullt이 교차하는 지점을 클릭을 하면 이제 충돌이 안된다.

 

총알 앞으로 나가기

총알이 나오기만 했지 앞으로 가진 않았으니, 이제 앞으로 나가보도록 하자.

 

불릿 스크립트를 만들어 주도록 하자

 

Bullit 스크립트

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class bullit : MonoBehaviour
{
    public Rigidbody rbody;

    void Start()
    {   //힘을 가하라는 뜻     //z로 앞쪽
        rbody.AddForce(transform.forward);
    }

}

그 후 불릿에 불릿 스크립트를 넣어주고 리지드 바디도 넣어주도록 하자

 

이렇게 하면 총알이 나가는데 좀 느리다. 새롭게 코드를 짜보자.

 

불릿 스크립트

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class bullit : MonoBehaviour
{
    public Rigidbody rbody;
    public float force;

    void Start()
    {   //힘을 가하라는 뜻     //z로 앞쪽
        rbody.AddForce(transform.forward * force);
    }

}

이렇게 스크립트를 했다면 이제 와서 Force를 조정해 주자.

 

임시로 알아서 조정하자. 그러면 이제 총알이 잘 나가는 걸 볼 수 있다.