ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [게임엔진활용] 5강 AutoNumber, ProgressBar
    [DSU] 게임엔진활용 2026. 4. 13. 22:29
    728x90

    사과 게임에서 Score점수 연출을 구현

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    public class RenderView : MonoBehaviour
    {
        // ...
     
        //int score;
        AutoNumber score;
        // ...
        ProgressBar progressBar;
     
        void loadIngame()
        {
            // ...
     
            score = new AutoNumber(0);
            
            // ...
     
            progressBar = new ProgressBar(new Rect(x, y - 4095030));
            progressBar.bc = Color.clear;
            progressBar.fc = Color.red;
            progressBar.lineWidth = 2f;
            progressBar.curr = 0;
            progressBar.max = 2000;
            progressBar.rv = this;
        }
     
        void drawIngame(float dt)
        {
            // ...
     
    #if false
            setRGBA(1001);
            setLineWidth(2);
            float x = (mc.devWidth - 60 * 15/ 2;
            float y = (mc.devHeight - 60 * 10/ 2;
            float w = 950;
            drawRect(x, y - 40, w, 30);
            w *= (float)score.get() / 2000;
            fillRect(x, y - 40, w, 30);
            setRGBA(1111);
    #else
            progressBar.curr = score.get();
            progressBar.paint(Time.deltaTime);
    #endif
     
            setStringName("고딕체");
            setStringSize(30);
            setStringRGBA(1001);
            score.update(Time.deltaTime);
            drawString("Score : " + score.get(), mc.devWidth - 1010, TOP | RIGHT);
        
            // ...
            if (gameOver)
            {
                setStringName("고딕체");
                setStringSize(100);
                setStringRGBA(1001);
                drawString("Score : " + score.get(), 400200, TOP | LEFT);
            }
            
            // ...
        }
     
        public void mouseIngame(int state, float x, float y)
        {
            // ...
     
                if (sum == 10)
                {
                    Debug.Log("제거하자");
                    for (int i = 0; i < apple.Length; i++)
                    {
                        if (apple[i].pressed)
                        {
                            apple[i].s = "0";
                            score.add(100);
                        }
                    }
                }
            // ...
        }
     
    cs

     

     

    AutoNumber.cs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    using UnityEngine;
     
    public class AutoNumber
    {
        int number;
        int numberS, numberE;
        float delta, _delta;
     
        public AutoNumber(int v, float duration = 0.3f)
        {
            number = v;
            _delta = duration;
            delta = duration;
        }
     
        public void set(int v)
        {
            number = v;
        }
     
        public void add(int v)
        {
            //number += v;
            if (delta < _delta)
            {
                numberS = get();
                numberE = numberE + v;
            }
            else
            {
                numberS = number;
                numberE = number + v;
            }
            delta = 0.0f;
        }
     
        public int get()
        {
            if( delta < _delta )
            {
                float r = delta / _delta;
                return (int)(numberS * (1.0f - r) + numberE * r);
            }
            return number;
        }
     
        public void update(float dt)
        {
            if( delta < _delta)
            {
                delta += dt;
                if( delta >= _delta )
                {
                    delta = _delta;
                    number = numberE;
                }
            }
        }
    }
     
    cs

     

     

    ProgressBar.cs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    using UnityEngine;
     
    public class ProgressBar
    {
        public Rect rt;
        public Color bc, fc;
        public float lineWidth;
        public int curr, max;
     
        public RenderView rv;
     
        public ProgressBar(Rect rt)
        {
            this.rt = rt;
            bc = Color.black;
            fc = Color.white;
            lineWidth = 2f;
            curr = 0;
            max = 100;
        }
     
        public void paint(float dt)
        {
            rv.setRGBA(bc.r, bc.g, bc.b, bc.a);
            rv.fillRect(rt.x, rt.y, rt.width, rt.height);
     
            rv.setRGBA(fc.r, fc.g, fc.b, fc.a);
            rv.setLineWidth(lineWidth);
            float w = rt.width;
            rv.drawRect(rt.x, rt.y, w, rt.height);
            w *= (float)curr / max;
            rv.fillRect(rt.x, rt.y, w, rt.height);
            rv.setRGBA(1111);
        }
    }
     
    cs

     

    강의 6회차.zip
    0.01MB

     

    매일매일 열심히 게임개발하고 있습니다

     

Designed by Tistory.