https://www.youtube.com/watch?v=CkjSBEv4PW0&t=9s
이전 프로젝트가 있는 분은 그대로 해도 되고 새로운 씬을 하나 만들고
AR Session Orign, AR Session을 추가하고 Main Camera를 지워주자.
먼저 프로젝트와 마찬가지고 AR Session Origin에 AR Plane Manager컴포넌트를 추가하고 AR Default Palne프리팹을 연결해주자
하이라키에 AR Camera를 선택하고 우클릭후 Create Empty해서 이름을 ShootPoint로 해준다. 이걸 끌어다 AR Camera밑으로 놓는다. ShootPoint는 이제 AR Camera의 자식이고 화면의 가운데에 위치한다.
Z축 값을 0.01로 변경한다. 유니티에서 Z축은 앞쪽이다. 카메라의 약간 앞쪽에 위치하게 된다.
이제 날아갈 공을 만들자 하이라키의 우클릭후 3D Object>Sphere를 추가하자 이름을 Ball로 변경
이제 Ball을 앞으로 날라가게 하자 Ball을 선택하고
Inspector창 아래 Add Component를 눌러 Rigidbody를 추가하자. 이 컴포넌트를 게임오브젝트가 물리적 특성을 갖게한다. 디테일을 보면 무게, 중력 충돌처리등이 있다. 무게를 1로 변경한다.
Ball의 Scale(크기)를 0.2정도로 줄인다.
ShootBall>Prefab폴더를 만들어주고 Ball을 끌어다 프리팹을 만들어주고 하이라키상의 Ball은 지워주자
ShootBall>Script 폴더를 만들어주고 Script를 만들자
이름은 바로 ShootBall로 변경하자 안그러면 클래스 이름이 안 맞아 에러가 난다.
하이라키의 우클릭후 EmptyObject를 하나 만들고 이름을 ShootBallManager로 하자.
코드를 쳐주고 유튜브 강의는 터치에 대한 입력이 없어서 터치입력을 추가했고 실행해보니 공이 너무 많이 생성돼 앞으로 나가지를 못했다. 타이머를 만들어 쿨타임을 적용해 0.2초마다 나가게 해주었다. 안드로이드폰은 라이더 센서가 없어 면을 생성하는데 카메라를 좀 돌려야한다. 실제 공을 발사해보니 AR Default Plane이 좀 높게 설정되어있었다.
유니티가 처음이신 분들은 코드가 어려울수도 있다. RigidBody는 물리적인 처리를 하는 부분이라 오브젝트를 움직이게 할때는 AddForce를 사용해야한다. Transform을 이용해서 움직이면 Rigidbody와 처리가 얽혀 더더덕 거린다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShootBall : MonoBehaviour
{
public GameObject ball; //공오브젝트
public Transform camObj; //카메라오브젝트
public Transform shootPoint; // 슛포인트 위치
private float coolTimer=0f; //타이머
private bool bShoot = true; //쏠수 있는지
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//터치가 일어나고 쏠수 있다면
if (Input.touchCount > 0 && bShoot)
{
//공을 발사
ShootBallObj();
bShoot = false;
}
//쏠수 없다면
if (!bShoot)
{
//타이머를 갱신하고
coolTimer += Time.deltaTime;
//일정한 시간이 지났으면
if (coolTimer > 0.2f)
{
bShoot = true;//슛을 가능하게 해주고
coolTimer = 0; //타이머를 리셋해준다
}
}
}
public void ShootBallObj()
{
GameObject tObj = Instantiate(ball); //공을 생성해줌
//공의 위치를 발사위치로 옮김
tObj.transform.position = shootPoint.transform.position;
//공의 발사 방향을 계산
Vector3 tVect = (shootPoint.transform.position - camObj.transform.position).normalized;
//리지드바디 컴포넌트 참조를 얻어옴
Rigidbody tR = tObj.GetComponent<Rigidbody>();
// 리지드바디에 힘을 전달해 앞으로 나가게 한다.
tR.AddForce(tVect * 100f);
}
}
방금만든 스크립트를 끌어다 하이라키의 ShootBallManager에 놔준다. 하이라키는 게임오브젝트 객체만 존재할수 있으므로 이렇게 해야한다. 연결후 ShootBallManager를 선택하고 Inspector뷰 아래 ShootBall의 파라메터들을 연결해준다. The Ball은 프리팹에서 나머지는 하이라키에서 끌어다 놓으면 된다.
빌드전 빌드 세팅즈에 가서 씬을 추가해주고
PlayerSetting을 눌러 앱 이름도 바꿔주자.
빌드후 화면을 터치해보면 공이 앞으로 날라간다.