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이 사라진다.
'UNITY' 카테고리의 다른 글
[Unity] 2D Content 제작하기 (4) (OnCollisionEnter2D) (0) | 2022.04.25 |
---|---|
[Unity] 2D Content 제작하기 (3) (InvokeRepeating, Physics Material) (0) | 2022.04.25 |
[Unity] 2D Content 제작하기 -이미지 배치 (0) | 2022.04.25 |
[Unity] Instantiate -오브젝트 복제하기 (0) | 2021.10.12 |
[Unity] 유니티 변수(멤버/로컬 변수, Vector형 변수) (0) | 2021.09.16 |