65. Unity 최종 프로젝트 4주차(3)

이규성·2024년 1월 31일
0

TIL

목록 보기
72/106

01/31

📌팀 프로젝트 진행

목표

구글 플레이스토어 등록 방법 구체적으로 정리하기
아이콘 추가
ios 빌드 알아보기

금일 구현 설계

나무에 플레이어가 가려지는 이슈 해결하기 2트
플레이어 추락 상태 구현하기

금일 구현한 사항

  1. 오브젝트 투명화 1차 구현 완료
public class ChangeMaterials : MonoBehaviour
{
    public Material[] fadeMaterials = new Material[2];
    public Material[] originMaterials = new Material[2];
    private Material[] _materials;
    private MeshRenderer _meshRenderer;

    private void Awake()
    {
        _meshRenderer = GetComponentInChildren<MeshRenderer>();
        _materials = _meshRenderer.materials;
    }
    public void ChangeFadeMaterials()
    {
        for (int i = 0; i < _materials.Length; i++)
        {
            _materials[i] = fadeMaterials[i];
        }
        _meshRenderer.materials = _materials;
    }

    public void ReturnMaterials()
    {
        for (int i = 0; i < _materials.Length; i++)
        {
            _materials[i] = originMaterials[i];
        }
        _meshRenderer.materials = _materials;
    }
}
public class RaycastToChangeMaterials : MonoBehaviour
{
    [SerializeField]
    private LayerMask _layerMask;
    [SerializeField]
    private Camera _camera;
    [SerializeField]
    private Transform _player;

    private RaycastHit[] _hits = new RaycastHit[10];

    private HashSet<ChangeMaterials> _prevChangeMaterials = new();
    private HashSet<ChangeMaterials> _curruentChangeMaterials = new();

    private void Start()
    {
        StartCoroutine(CheckPlayer());
    }

    private IEnumerator CheckPlayer()
    {
        while (Managers.Game.Player == null)
        {
            yield return null;
        }
        _player = Managers.Game.Player.ViewPoint;
    }

    private void FixedUpdate()
    {
        if (_player != null)
        {
            CheckForObjects();
        }
    }

    private void CheckForObjects()
    {
        //이전 프레임에 담기는 리스트, 이번 프레임에 담기는 리스트의 차이가 있는 오브젝트에 ReturnMaterials 호출
        _prevChangeMaterials = _curruentChangeMaterials;
        _curruentChangeMaterials = new();

        int hits = Physics.RaycastNonAlloc(_camera.transform.position, (_player.transform.position - _camera.transform.position).normalized, _hits,
            Vector3.Distance(_camera.transform.position, _player.transform.position), _layerMask);
        if (hits >= 0)
        {
            // hashset
            for (int i = 0; i < hits; i++)
            {
                ChangeMaterials changeMaterials = _hits[i].transform.gameObject.GetComponentInParent<ChangeMaterials>();
                _curruentChangeMaterials.Add(changeMaterials);

                changeMaterials.ChangeFadeMaterials();                
            }

            _prevChangeMaterials.ExceptWith(_curruentChangeMaterials);

            foreach (var hit in _prevChangeMaterials)
                hit.transform.gameObject.GetComponentInParent<ChangeMaterials>().ReturnMaterials();
        }
    }
}
  1. 플레이어 추락 상태 구현하였습니다.

금일 이슈

금일 커밋한 사항

오브젝트 투명화 시스템을 수정 중입니다.
1차적으로 오브젝트 투명화 시스템을 구현하였습니다.

🤸🏻‍♀️Feedback

0개의 댓글