GameObject hitWall; // 레이 맞은 벽
List transparentWalls; // 투명한 벽 담는 List (Start에서 new List로 동적할당)
RaycastHit[] hits = Physics.RaycastAll(ray); // 레이 맞은거 담음
foreach(RaycastHit hit in hits)
{
if ((hit.collider.gameObject != player.gameObject) && // Ray에 맞은 오브젝트가 플레이어가 아니면서
hit.collider.tag == "Wall") // 태그가 "Wall" 이면
{
hitWall = hit.collider.gameObject; // hitWall이라는 게임오브젝트에 담고
prevColor = hitWall.GetComponent().material.GetColor("_Color"); // 바꾸기 전의 색 저장 후
renderer = hitWall.GetComponent(); // 맞은벽의 MeshRenderer 컴포넌트 불러오고
renderer.material.SetColor("_Color", new Color(prevColor.r, prevColor.g, prevColor.g, 0.1f)); // 알파값만 변경하고
transparentWalls.Add(hitWall); // 리스트에 담아줌
}
}
위의 코드로 반투명하게 만든다음에 담고있는데 다시 빼려면 어떻게 해야될까
리스트를 멤버로 들고있다가 레이에 맞으면 add하고 안맞으면 clear함과 동시에 원래상태로 초기화해
맞으면 add중인데 안맞는 조건을 어떻게 걸어야되??
저기 리스트에 담을때 중복처리하고 충돌이 아니라면 해당 hit정보랑 비교해서 지워봐
우선 중복처리까지하고 더해보고 다시질문하러올께...
미안하다 개같이 답해서. 저 레이가 매 프레임마다 돌거아녀 그럼 Physics.RaycastAll에 맞은 애를 멤버로 두고 매번 초기화해. 그러면서 원래 색상으로 옮기는거지
RaycastHit[] hits가 멤버변수고 저 함수가 실행될때 foreach()써서 hits에 담벼있는 모든 리스트돌면서 if문 처리해서 원래색상으로 돌아가고 다시 레이맞은애들 전부 담는거지
이것도 개같네
집에 방금와서 지금봤어 좀따 해볼께!
도저히 모르겠다...
해당 댓글은 삭제되었습니다.
아... 그래서 계속 담겼구나... 우선 중복처리까지하고 더해보고 다시질문하러올께...