구간 반복 logic은 두 가지가 있다. 


1. 속도 더하기

2. 속도 곱하기 


속도 더하기 

속도를 update문에서 더해서 위치를 이동시키는 방식.

조건문 체크하기 -> 위치값에 속도값 더하기 -> 이동시키기(실시간 위치 할당)

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class transform : MonoBehaviour {
 
    private float speed = 0.5f;
    private float speedX = 0.3f;
    private float speedZ = 0.2f;
    private Vector3 pos;
    
    void Update () {
        //x축 방향 전환 범위 조건
        if (pos.x > 20.0f)
        {
            pos.x = 20.0f;
            speedX = -speedX;
        }
        else if (pos.x < -20.0f)
        {
            pos.x = -20.0f;
            speedX = -speedX;
        }
        //z축 방향 전환 범위 조건
        if (pos.z > 20.0f)
        {
            pos.z = 20.0f;
            speedZ = -speedZ;
        }
        else if (pos.z < -20.0f)
        {
            pos.z = -20.0f;
            speedZ = -speedZ;
        }
 
        //위치에 속도 더하기 
        pos.x += speedX;
        pos.z += speedZ;
 
        //실시간 위치 할당  
        transform.position = pos;
 
    }
}
 
cs


속도 곱하기 

위치 값 받기 -> 범위 체크 -> 이동하기 


tr.Translate(Vector3 * Time.deltaTime)


Vector는 방향과 크기이다. 그렇기 때문에 

정확한 수치만큼 이동이 불가능하기 때문에 범위에서 이동거리를 제한해야 한다. 


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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class transformX : MonoBehaviour {
 
    private Transform tr;
    private float speedX = 8.0f;
    private float speedZ = 5.0f;
    private Vector3 pos;
 
    private void Start()
    {
        tr = GetComponent<Transform>();
    }
 
    void Update () {
        //실시간 위치 받아오기 
        pos = tr.position;
 
        //x축 방향 전환 범위 조건
        if (pos.x > 20.0f)
        {
            pos.x = 20.0f;
            speedX = -speedX;
        }
        else if(pos.x < -20.0f)
        {
            pos.x = -20.0f;
            speedX = -speedX;
        }
        //z축 방향 전환 범위 조건
        if (pos.z > 20.0f)
        {
            pos.z = 20.0f;
            speedZ = -speedZ;
        }  
        else if(pos.z < -20.0f)
        {
            pos.z = -20.0f;
            speedZ = -speedZ;
        }
 
        //x축 이동하기
        tr.Translate(Vector3.right * speedX * Time.deltaTime);
        //z축 이동하기
        tr.Translate(Vector3.forward * speedZ * Time.deltaTime);
 
    }
}
 
cs


최종 결과 


숙제

Rene Schulte - Fluid Demo  분석하기

유체역학 수학 이론 공부하기 

개발 flow 작성하기 (crossDevice, 유체역학(interaction, GPU instancing), 머신러닝)

Posted by 도이(doi)
,