본문바로가기

지원

!!!!

Home > 지원 > Forum

Forum

" 마우스 클릭시 마다 RGB값 변경하는 법 ㅠㅠ
  • public class ChangeColor : MonoBehaviour {

      void Start() {
        //노란색
        GetComponent<Renderer>().material.color = new Color(255/255f, 255/255f, 0/255f);
      }

      void Update () {
        for(int i=0; i < 15; i++){
          if (Input.GetMouseButton(0)) {
            GetComponent<Renderer>().material.color = new Color(255/255f, (255-17*i)/255f, (0+17*i)/255f);
          }
          //bool Input.GetKeyDown(KeyCode.N) = false;
        }
      }
    }

    마우스로 클릭할때마다, 노란색의 RGB에서 서서히 값을 줄여가고 싶은데, 한번 클릭하면 255,0,255로 확 바뀌어 버리네요
    어떻게 해야할까요?
  • Replies
  • 코드는 잘 모르겠어서 인스펙터로 해보긴 했습니다...
    마우스 클릭하면 인보크 리핏으로 반복 시켰어요
    업데이트에서 for문은 매우 빠르게 동작되서 순식간에 바뀌는것 처럼 보일거에요

    public class ChangeColor : MonoBehaviour{
      public Renderer thisRenderer;

      public Color startColor;
      public Color changeColor;
      public Color progressColor;

      public float adjustValue = 2.5f;
      public int repeatCount = 15;

      public int count;
      public bool isRepeating;

      void Start(){
        thisRenderer = GetComponent();
        thisRenderer.material.color = startColor;

        progressColor = startColor;
      }

      void Update(){
        if(Input.GetMouseButtonDown(0) && isRepeating == false){
          isRepeating = true;
          InvokeRepeating("SetColor", 0f, Time.deltaTime);
        }
      }

      void SetColor(){
        count++;

        if(count == repeatCount){
          isRepeating = false;
          count = 0;
          CancelInvoke("SetColor");
        }

        progressColor = Color.Lerp(progressColor, changeColor, adjustValue * Time.deltaTime);
        thisRenderer.material.color = progressColor;
      }
    }
    kmin729 2019.03.25
  • coroutine을 사용해서 해결하시면 될 것 같습니다. 다음 링크를 한 번 참고해 보세요

    https://kwangyulseo.com/2015/05/15/%EC%BD%94%EB%A3%A8%ED%8B%B4coroutine-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/
    atshin 2019.03.25
Back to Top