1. 속도주기 (물리운동으로 공띄우기)

Ball 오브젝트에 Rigidody 추가, Ball 스크립트 추가

1
2
3
4
5
void Start()
{
    // 왼쪽 상단을 향해 속도를 설정한다.
    this.GetComponent<Rigidbody>().velocity = new Vector3(-8.0f, 8.0f, 0.0f);
}
cs




2. 프리팹화하기

오브젝트를 언제든지 만들수 있게 프리팹화.




3. 프로젝트뷰 정리하기

Prefab, Material, Scene, script 등으로 나누면 좋음




4. 마우스클릭, 오브젝트 생성 (공 발사하기)

GameObject -> Create Empty로 기본 게임오브젝트 만들기

스크립트를 만들어서 연결

1
2
3
4
5
6
7
8
9
10
11
12
public class Launcher : MonoBehaviour {
    // ball프리팹을 연결
    public GAmeObject ballPrefab;
 
    void Update() {
        // 마우스를 누르면
         if(Input.GetMouseButtonDown(1)) {
            // ball프리팹을 생성(인스턴스 작성)
            Instantiate(this.ballPrefab);
        }
    }
}
cs

생성한 오브젝트를 눌러 연결한 스크립트를 보면 BallPrefab이 있을텐데 거기에 Ball을 드래그하여 연결하면

스크립트의 ballPrefab에 해당 Ball이 연결됨




5. 화면밖으로 나가면 삭제하기

1
2
3
4
5
6
7
public class Ball : MonoBehaviour {
    // 이 오브젝트가 화면밖으로 나가면 
    void OnBecameInvisible()
    {
        Destroy(this.gameObject);    
    }
}
cs




6. 충돌 처리 (공중 점프 방지)

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
public class Player : MonoBehaviour
{
    protected float jump_speed = 5.0f;
    public bool is_landing = false;
 
    void Start()
    {
        this.is_landing = false;
    }
 
    void Update()
    {
        // 착지하면 플래그가 true가 되므로 실행
        if (this.is_landing)
        {
            // 점프하면 플래그 false, 속도를 설정
            if (Input.GetMouseButtonDown(0))
            {
                this.is_landing = false;
                // Vector3.up = (0,1,0)... down, left, right, forward, back
                this.GetComponent<Rigidbody>().velocity = Vector3.up * this.jump_speed;
            }
        }
    }
 
    // 충돌하면(즉 바닥에 착지하면) 플래그 true
    private void OnCollisionEnter(Collision collision)
    {
        this.is_landing = true;
    }
}
cs




7. 좌표 및 방향 고정

Rigidbody탭의 Constraints에 Freeze Position, Freeze Rotation을 체크하면 위치, 방향 고정

위 아래로만 움직이게 하고싶다면 Y를 제외한 X, Z에 체크.




8. 무게 설정

Mass를 낮추면 무게가 낮아져 다른 물체와 충돌했을때

Mass값이 높은것은 속도를 그대로 유지하고 낮은 물체는 큰것에 밀려 이동 방향이 바뀌게된다.




9. 물리 머티리얼 설정 (공이 잘 튕기게 하기)

Project뷰에서 Create -> Physic Material을 생성

Inspector에서 Bounciness값을 조정한다. 이 수치가 크면 클수록 쉽게 튀어 오른다.

생성한 Physic Material을 원하는 게임오브젝트의 Collider의 Material에 드래그해줌




10. 중력의 크기 조정 (가벼운 느낌 제거)

중력을 크게하여 낙하속도를 빠르게함.

메뉴에서 Edit -> Project Settings -> Physics에 들어가면 Inspector가 PhysicsManager로 바뀜

Graviti의 Y값을 크게(ex:-20) 바꾸면 중력이 증가되어 빨리 떨어짐.

대신 점프의 높이나 공의 궤도도 낮아지게된다.




11. 충돌한 오브젝트 구별하기 (공중 점프 버그수정)

Debug.Break()를 이용하면 게임을 일시정지시킬 수 있다.

Inspector에서 태그를 이용하여 원하는 태그와 충돌했을때만 동작하도록 할수도 있다.

1
2
3
4
5
private void OnCollisionEnter(Collision collision)
{
    if(collison.gameObject.tag == "Floor")
        this.is_landing = true;
}
cs


Posted by misty_
,