UNITY

[Unity] 2D Content 제작하기 (2) (Instantiate, Destroy)

연듀 2022. 4. 25. 10:41

 

 

CannonBall이라는 객체도 만든 후 rigidbody 2D, Circle Collider 2D 추가한다.

CannonBall은 Prefab으로 등록한다. 

 

 

Player의 script를 작성한다.

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

public class cshPlayerController : MonoBehaviour
{
    public float speed = 8f;//Player의 이동 속도
    public float moveableRange = 5.5f; // 이동 가능한 범위
    public float power = 1000f; // CannonBall을 발사하는 힘

    // 포탄 발사 변수 추가
    public GameObject cannonBall; //Player에서 발사할 CannonBall
    public Transform spawnPoint; //Cannon 발사 지점
    // Transform: position, rotation, scale


    void Update()
    {
        //Player 이동 (이동 범위를 movableRange로 제한)
        transform.Translate(Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime, 0, 0);
        //x축으로 horizontal 방향으로 speed 만큼의 속도로 
        //horizontal: 왼쪽을 누르면 -1, 오른쪽을 누르면 +1 이동 시킴

        transform.position
        = new Vector2(Mathf.Clamp(transform.position.x, -moveableRange, moveableRange), transform.position.y);
        //transform.position.x 값이 -5.5f보다 작아지거나 5.5f보다 커지면 각각 -5.5f, 5.5f로 

        // 포탄 발사 기능 추가  
        if (Input.GetKeyDown(KeyCode.Space))  //스페이스키 버튼 이벤트 처리
        {
            Shoot(); //Shoot함수 호출
        }

    }
    void Shoot()
    {
        //복제된 새 cannonBall을 생성하여 newBullet에 할당
        GameObject newBullet = Instantiate(cannonBall, spawnPoint.position, Quaternion.identity) as GameObject;
        // cannonBall을 지정된 위치(발사 지점)에 지정된 방향으로 복제 
        //newBullet의 Rigidbody2D를 참조하여 AddForce 함수로 물리적으로 발사
        //Quaternion.identity: 회전 성분 (0, 0, 0)

        newBullet.GetComponent<Rigidbody2D>().AddForce(Vector3.up * power);
        //복제된 cannonball이 가지고 있는 속성중 rigidbody2D에 힘을 추가(y축으로 power만큼)
        //위로 발사하다 힘이 상쇄되면 중력의 영향을 받아 땅으로 떨어짐
    }



}

 

Player객체의 스크립트에 Cannon Ball에는 프리팹으로 등록한 CannonBall을, Spawn Point에는 만들어 놓은 Spawn Point를 각각 드래그한다.

 

 

space바를 누르면 포탄이 발사되고 중력이 force보다 커지는 순간 다시 내려오게 된다. 

 

 

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

public class cshDestroyObj : MonoBehaviour
{
    //오브젝트를 제거하는 인터벌
    public float deleteTime = 2.0f;

    void Start()
    {
        //오브젝트를 생성한 후 deleteTime 만큼 시간이 경과하면 제거
        Destroy(gameObject, deleteTime);
        //여기서 gameObject는 스크립트를 가지고 있는 나 자신
    }
}

 

cshDestoryObj 스크립트를 작성하고 CannonBall Prefab에 추가한다.

발사 후 2초 뒤에 CannonBall이 사라진다.