public AnimationCurve ac;


ย  ย  [Range(0.0f, 1.0f)]

ย  ย  public float t;

ย  ย 

ย  ย  private float timeElapsed;

ย  ย  public Image reticle;


ย  ย  // Start is called before the first frame update

ย  ย  void Start()

ย  ย  {

ย  ย  ย  ย ย 

ย  ย  }


ย  ย  // 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");

ย  ย  ย  ย  ย  ย  drawermovement(hit);

ย  ย  ย  ย  }


ย  ย  ย  ย  Debug.DrawRay(transform.position, forward, Color.green);

ย  ย  }


ย  ย  void drawermovement(RaycastHit hit)

ย  ย  {

ย  ย  ย  ย  if (hit.transform.tag == "drawer")

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  reticle.fillAmount = timeElapsed / 3;

ย  ย  ย  ย  ย  ย  timeElapsed = timeElapsed + Time.deltaTime;

ย  ย  ย  ย  ย  ย  if (timeElapsed >= 3)

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  Debug.Log("Drawer");


ย  ย  ย  ย  ย  ย  ย  ย  float z = ac.Evaluate(t);

ย  ย  ย  ย  ย  ย  ย  ย  transform.localPosition = new Vector3(0, 0, z);

ย  ย  ย  ย  ย  ย  }


ย  ย  ย  ย  }

ย  ย  }


๋ ˆ์ด๊ฐ€ drawer ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง„ ๋ฌผ์ฒดํ•œํ…Œ ๋‹ฟ์•˜์„๋•Œ drawermovement ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ

drawermovement ํ•จ์ˆ˜๋Š” 3์ดˆ๊ฐ„ ๋ ˆ์ด์— ๋‹ฟ์•˜์œผ๋ฉด drawer ํƒœ๊ทธ์˜ ๋ฌผ์ฒด๊ฐ€ ์ƒ๋Œ€์ขŒํ‘œ z์ถ•์œผ๋กœ ์›€์ง์ด๋Š” ํ•จ์ˆ˜๋ฅผ ์งœ๊ณ ์‹ถ์€๋ฐ


์ด๊ฑฐ๋ฅผ ์ ์šฉ์‹œํ‚ค๋ฉด ๋””๋ฒ„๊ทธ๋กœ๊ทธ is hit๋งŒ ๋‚˜์˜ค๊ณ  ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ ์•ˆ์— drawer๋ผ๋Š” ํƒœ๊ทธ์˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํ•œ ์ขŒํ‘œ์— ๊ฒน์ณ์ €์„œ ์›€์ง์ด์ง€๋ฅผ ์•Š๋„ค


์‹œ๋ฐ” ์ด๊ฑฐ ์–ด์ฉŒ๋ƒ


drawer๋ผ๋Š” ํƒœ๊ทธ์˜ ๋ฌผ์ฒด์— ์ ์šฉ์‹œํ‚ค๋Š” ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์งœ์•ผํ•˜๋‚˜