[VR] GroundZero 개발
[4Idle - Gazzlers] 손에 탄창 충전 기능 - GameScene으로 확장
meltingmelvin
2023. 12. 6. 17:56
Game 씬으로 확장
-테스트 씬에서 구현한 탄창 부착 기능을 Game 씬에 추가할 것이다.
- 원본의 탄창 충전은 상단의 이미지처럼 이루어진다.
- 이 포스팅에서는 이 장면을 참고해 GameScene에 지난 포스팅에서 구현한 기능을 추가하고, 연출을 다듬으려 한다.
- EnergyCell이 부착될 위치에 boxCollider를 추가해 isTrigger를 체크해주고, 태그를 ChargeArea로 한다.
-EnergyCell 오브젝트에 부착된 EnergyController에 위치값들을 할당해준다.
-ControllerDistanceGrabInteractor에 Interactor Unity Event Wrapper 컴포넌트를 추가한다.
- 컴포넌트의 interactor view에 grabInteractor를 할당한다.
- unselect 이벤트에 EnergyCellController의 OnUngrab메서드를 연결한다.
-GrabHand 모델의 위치를 조정해 손에 딱 붙는 것처럼 보이도록 수정하였다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnergyCellController : MonoBehaviour
{
[SerializeField] Transform energyCellPoint;
[SerializeField] Transform energyCellOriginalPoint;
private bool isCharge;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
public void OnGrab()
{
Debug.Log("Grab");
}
public void OnUnGrab()
{
Debug.Log("unGrab");
if (this.isCharge)
{
this.transform.SetParent(this.energyCellPoint);
this.transform.localPosition = Vector3.zero;
this.transform.localRotation = Quaternion.Euler(0, 0, 90);
}
else
{
this.transform.position = this.energyCellOriginalPoint.position;
this.transform.localRotation = Quaternion.identity;
}
}
private void OnTriggerStay(Collider other)
{
if (other.gameObject.CompareTag("ChargeArea"))
{
// Debug.Log("Charge Area");
this.isCharge = true;
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.CompareTag("ChargeArea"))
{
// Debug.Log("Exit Area");
this.isCharge = false;
}
}
}