if(Physics.Raycast(rayOrigin,rayDir,out hit, distance))
{
if(hit.collider.GetComponent<Collider>().tag == "LIVINGDOOR")
{
if(!livingDoor)
{
liD.enabled = true;
}
else if(livingDoor)
{
liD.enabled = true;
}
if(Input.GetKeyDown(KeyCode.E))
{
GameObject hitTarget = hit.collider.gameObject;
if(!livingDoor)
{
hitTarget.gameObject.tag = "Untagged";
liDoor.Open();
StartCoroutine(myCoroutine_1);
StopCoroutine(myCoroutine_2);
liD.enabled = false;
}
else if(livingDoor)
{
hitTarget.gameObject.tag = "Untagged";
liDoor.Close();
StartCoroutine(myCoroutine_2);
StopCoroutine(myCoroutine_1);
liD.enabled = false;
}
}
대강 이런식으로 문열기를 한단말이야 그럼 문이 여러개면 bool값이나 태그값 ㅈㄴ 낭비아니냐 응??? 그렇지 ????
(코루틴안에는 문에 태그값 부여 및 문 열리는 시간동안 기다리기, bool값 변경 이있당)
코드 반은 줄이겠는데
응 ! 어떻게??
레이캐스트에 레이어 넘기는 오버라이드된 함수 있음 그거 쓰면 태그 검색안해도 될거같고 livingdoor는 e 키가 누르든 말든 lib를 활성화 시키니 걍 위에다 enable 트루만들면 될거같네
음 모르는말들 투성이네... 그 오버라이드 함수이름이 뭐야??? 그리고 lib 활성화시키는건 뭔뜻이야??
밑에 태그 교체는 또 livingdoor가 true든 false든 바뀌니깐 다른 부분은 open이랑 close랑 코루틴 부분이니 그것만 남기면 되것지
raycast함수 f12 들어가면 재정의된 함수들이 많다는 말이야 거기에 보면 LayerMask에 의해 오브젝트를 hit시키거나 제외 시킬수가있어
와 친구야 나 병신인줄알앗는데 상병신인가봐 좀더 자세히될까>?
lib가 아니라 liD네 ㅈㅅㅈㅅ 아무튼 liD활성화는 enable 말하는거임 위에 코드보면 e키가 눌리든 말든 반드시 enable=true가 되자나
아 저 lid 는 outline 준거라 저건 무시해도되
우선 레이캐스트 f12눌러서 들어가바
비쥬얼코드 쓰는데 f12 작동이안한당... 오또케
저기 혹시 레이캐스트 빔이 닿았다는것을 오브젝트에서 인지하는 함수는없어??
그런 함수가 있나? 없을듯 아니면 메세지 보내는 방법도있지
SendMessage 찾아봐
아무튼 고마워 댓글들 바탕으로 검색좀해봐야겟당
메세지가 아니더라도 hit된 오브젝트의 컴포넌트 불러와서 레이 맞았다는걸 함수호출로 구현해도 되겠지
감사염 ^^
아 미안한데 하나만 더물어봐도될까 ?? HIT 된 오브젝트의 컴포넌트 불러오려면 어떻게 써야대?? 이게 자꾸 에러나던데
hit.collider.GetComponent<> 또 이렇게써줘야되나?
hit.getcomponent해도 될텐데? 컴포넌트가 hit된 오브젝트 그니까 콜라이더가 붙어있는 오브젝트에 붙어있는지 확인해봐 만약 자식에 붙어있다면 겟컴포넌트 차일드로 검색하고 아니면 부모에 있는걸로 확인해야지
hit.transform.getcomponent하면 될거같아~
정말고마웡! 기억할꼐!
if(!livingDoor) { liD.enabled = true; } else if(livingDoor) { liD.enabled = true; } 이건 왜 잇는거야 무조건 true인데?
아 저거 outline 준거야
hitTarget.gameObject.tag = "Untagged"; 이것도 왜 잇는지?
문열리는동안 태그값없애서 e 버튼 눌러도 애니메이션 동작안하게하려고 ㅎㅎ
if(Input.GetKeyDown(KeyCode.E)) { GameObject hitTarget = hit.collider.gameObject; hitTarget.gameObject.tag = "Untagged"; liD.enabled = false; if(!liDoor.isOpen) { liDoor.Open(); } else if(livingDoor){liDoor.Close();}
이런식으로 해서 idool 안에 bool 하나 만들어 Open실행시 true Close실행시 false로 바꿔줘 이미 태그 변경 시점에 다시 안들어 올거아냐
아냐 태그변경은 내가 병신이라 한거같애 ... 다시 들어올거란 시점으론 어떠케 짜야대?
태그 변경 자체가 문제 있는건 아님 하나의 방법이지 아니면 idool안에 bool 값으로 isOperation을 만들어서 문이 열리고 닫히는 애니메이션 시작중에 true로 변경 끝난시점에 false로 변경 킴 맨위에 if(isOperation) return; 식으로 막아도 되고
근데 idool 가뭐야;;
liDoor 니가 만든 클래스 잘못 쓴듯