Animator anim;
public Image reticle;
public GameObject CamOffset;
private float timeElapsed;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
raycast();
}
void raycast()
{
RaycastHit hit;
Vector3 forward = transform.TransformDirection(Vector3.forward * 1000);
if (Physics.Raycast(transform.position, forward, out hit))
{
Debug.Log("is hit");
movement(hit);
}
Debug.DrawRay(transform.position, forward, Color.green);
}
void movement(RaycastHit hit)
{
if(hit.transform.tag == "drawer")
{
reticle.fillAmount = timeElapsed / 6;
timeElapsed = timeElapsed + Time.deltaTime;
if (timeElapsed >= 3)
{
anim.SetBool("Open",true);
anim.SetBool("Close",false);
Debug.Log("Table_Opened");
}
else if (timeElapsed >= 6)
{
anim.SetBool("Close",true);
anim.SetBool("Open",false);
Debug.Log("Table_Closed");
}
else
{
anim.SetBool("Open",false);
anim.SetBool("Close",false);
}
}
}
이런 함수를 짰는데 레이캐스트를 쏘지도 않았는데 open 애니메이션이 실행되고 "table_opened" 값도 호출이 안된다
이거 우짜면 좋냐
컨트롤러 파일 들어가서 값 둘다 false 인지부터 체크해보자
트루 체크하니까 열리는건 해결됨 근데 왜 레이를 쐈는데 인식을 못하냐
업데이트에 레이케스트가 무한히 호출되고 있는대... 딱히 제어하는것도 없고
무한 호출까지는 나중에 수정할거긴 한데 drawer 태그를 가진 물체 인식을 못함
어따쓰는건지는 몰라도 단축키나 마우스 누를때라던가 enum으로 상태잡아서 특정 상황에서만 호출하면 될듯
그러니까 1.충돌해서 movement(hit);호출되고 if(hit.transform.tag == "drawer")를 인식안해서 그렇다는거지?
1. 하이라키에 올라간 모든 물체의 태그조사 drawer가 있는지 없는지 확인
2. 혹시나 태그와 오브젝트네임을 했갈린건지 확인해본다
3. 호오오오옥시나 drawer태그가 달린 물체가 속해있는 레이어가 충돌제외가 되어있는지 확인
4. 몰라레후
??. 정빡치면 레이케스트 할때 특정 레이어만 충돌하도록 세팅 방법은 구글에게 물어보셈
???. 혹은 현제의 방식은 가장 먼저 충돌한걸 기준으로 작동하는 코드이므로 중간에 뭐가 있는지 확인, 뭐가있으면 코드 자체가 문제니까 레이상에 충돌한 모든 물체를 가져와서 for문 돌려서 drawer가 있는지 죄다 검사하기...
해당 댓글은 삭제되었습니다.
카메라랑 drawer 태그 가진 물체한테만 이 스크립트 적용시켜놨는데
debug.drawray로 업데이트에서 쏴보고 레이케스트 단계에서 "is hit"부터 호출안되는거면 안맞은거니까
아 이미쏘고있었구나
is hit은 호출되고 있음
맞출려는 객체에 태그를 지정 안했을린 없고 ishit 찍혔으면 무브먼트 함수 중단점박고 hit 에 태그잘 박혀있나 확인해봐