[Unity Tutorial Roll-a-ball 06] Collecting the Pick Up Objects

1. 플레이어 컨트롤러 스크립트에 충돌 트리거 추가

 public class PlayerController : MonoBehaviour {

    // 에디터 안 Inspector에서 편집 가능한 속도 조정 변수 생성
    public float speed;
    // Rigidbody 형태의 변수 생성
    private Rigidbody rb;

    // 스크립트가 활성화된 첫 프레임에 호출
    void Start()
    {
        // 현재 오브젝트의 Rigidbody를 참조
        rb = GetComponent<Rigidbody>();
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 물리효과 계산을 수행하기 전에 호출
    void FixedUpdate()
    {
        // 키보드의 키로 컨트롤하는 수평 축의 입력 (left, right)
        float moveHorizontal = Input.GetAxis("Horizontal");
        // 키보드의 키로 컨트롤하는 수직 축의 입력 (up, down)
        float moveVertical = Input.GetAxis("Vertical");

        // 플레이어의 이동량을 선언 (x축, y축, z축)
        Vector3 movemnet = new Vector3(moveHorizontal, 0, moveVertical);
        // 플레이어의 Rigidbody에서 movement 값만큼 힘을 가해서 이동시킴
        rb.AddForce(movemnet * speed);
    }

    // 트리거 콜라이더를 처음 접촉할 때 호출
    void OnTriggerEnter(Collider other)
    {
        // 오브젝트의 태그 값 비교
        if ( other.gameObject.CompareTag("PickUp"))
        {
            // 오브젝트 비활성화
            other.gameObject.SetActive(false);
        }       
    }
}

2. PickUp 오브젝트에 PickUp 태그 달기

Prefabs PickUp -> Inspector -> Tag -> AddTag

Tags -> PickUp 태그 추가

PickUp -> Tag -> PickUp 선택

3. PickUp 오브젝트에 충돌 트리거 활성화

Prefabs PickUp -> Box Collider -> Is Trigger 체크 박스 활성화

4. PickUp 오브젝트에 물리 엔진 추가 (PickUp 오브젝트 애니메이션 최적화)

Prefabs PickUp -> Add Component -> Physics -> Rigidbody -> Is Kinematic 체크 박스 활성화

 

 

-Reference

[Collecting the Pick Up Objects] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/collecting-pick-objects?playlist=17141

[WPF Key Input] WPF Keyboard Input Hooking



-Reference

https://stackoverflow.com/questions/4266378/how-do-i-capture-key-down-in-wpf


-Reference

https://msdn.microsoft.com/ko-kr/library/system.enum.getvalues(v=vs.110).aspx



-Reference



[WPF Mouse Control] Get the mouse position and Set the position in WPF

현재 마우스 절대 좌표를 구한 후 X좌표 축으로 마우스 커서 움직이게 하기



-Reference

https://social.msdn.microsoft.com/Forums/vstudio/en-US/6be8299a-9616-43f4-a72f-799da1193889/how-to-set-the-mouse-position-in-wpf?forum=wpf

[SetCursorPos] http://slaner.tistory.com/39

[유니티 튜토리얼 예제 Roll-a-ball 05] Creating Collectable Objects

1. 수집 오브젝트 큐브 생성

Hierarchy -> Create -> 3D Object -> Cube -> PickUp으로 이름 변경

PickUp -> Inspector -> Transform -> Reset

2. 플레이어 오브젝트 Active 해제

 Player -> Inspector -> 체크박스 해제

3. PickUp 오브젝트의 모양과 크기 변경

PickUp -> Transofrom -> Position (0, 0.5, 0), Rotation (45, 45, 45), Scale (0.5, 0.5, 0.5) 로 수정

4. PickUp 오브젝트에 실시간 움직임 추가

PickUp -> Add Component -> New Script -> Rotator 스크립트 생성

PickUp -> Rotator 스크립트 수정 -> Scripts 폴더에 드로우 하여 넣기

public class Rotator : MonoBehaviour {
    // Update is called once per frame
    void Update ()
    {
        // transform의 Rotate 값을 시간에 비례하여 변경
     transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime);
    }
}

5. PickUp 오브젝트를 Prefabs 로 생성

Project -> Create -> Folder 생성 -> Prefabs 으로 이름 변경

PickUp 오브젝트를 Prefabs 폴더로 드로우하여 넣기

6. PickUp 오브젝트 12개 생성

Hierarchy -> Create Empty -> PickUps 로 이름 변경 -> PickUp 오브젝트를 PickUps로 드로우해서 넣기

PickUp 선택 -> ctrl + D -> 12개 생성해서 Scene에 배치

7. 12개의 PickUp 오브젝트 색상 변경

Project->Materials 폴더 -> Create -> Materials -> PickUp으로 이름 변경 -> Inspector -> Albedo 색상 -> RGB (255, 255, 0)으로 수정

PickUp Material을 Prefabs PickUp에 드로우해서 색상 적용

 

 

 

- Reference

[Creating Collectable Objects] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/creating-collectable-objects?playlist=17141

[Unity Tutorial Roll-a-ball 04] Setting up the Play Area

1. 벽의 부모 게임 오브젝트 생성

GameObject -> Create Empty -> 오브젝트 이름 Walls 로 변경 -> Inspector -> 설정 (톱니 바퀴) -> Reset

2. 벽 큐브 생성

GameObject -> 3D Object -> Cube -> 오브젝트 이름 WestWall 로 변경 -> Inspector -> 설정 (톱니 바퀴) -> Reset -> Walls 오브젝트로 드래그 하여 넣기

3. 벽 큐브 3개 복사하기

WestWall 선택 -> Edit -> Duplicate (단축키 : ctrl + D) -> 각 오브젝트 이름 EastWall, NorthWall, SouthWall 로 변경

4. 벽 큐브 크기와 위치 변경하기

 

 WestWall

EastWall 

NorthWall 

SouthWall 

Position 

 -10, 0, 0

 10, 0, 0

 0, 0, 10

 0, 0, -10

Scale 

 0.5, 2, 20.5

 0.5, 2, 20.5

 20.5, 2, 0.5

 20.5, 2, 0.5

 

 

 

- Reference

[Setting up the Play Area] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/setting-play-area?playlist=17141

[Unity Tutorial Roll-a-ball 03] Camera Moving

1. 카메라의 높이와 각도 수치를 변경

Main Camera -> Inspector -> Transform -> Position Y : 10, Rotation X : 45 로 수정

2. 카메라 컨트롤러 스크립트 생성

Main Camera -> Add Component -> New Script -> CameraController 이름 수정 -> Create and Add

생성된 CameraController 스크립트를 Scripts 폴더에 드로그하여 넣는다.

3. 카메라 컨트롤러 스크립트 수정

Project -> CameraController 스크립트 선택 -> Inspector -> Open

public class CameraController : MonoBehaviour {

    // 플레이어 오브젝트
    public GameObject player;
    // 카메라와 플레이어의 거리 차이
    private Vector3 offset;

    // Use this for initialization
    void Start ()
    {
        // 카메라와 플레이어의 거리 차이를 offset으로 둔다.
        // 카메라 위치 - 플레이어 위치
        offset = transform.position - player.transform.position;
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 모든 아이템이 Update()에서 다 처리된 후에 호출
    void LateUpdate ()
    {
        // 카메라가 플레이어와 offset 거리를 유지하며 움직인다.
        transform.position = player.transform.position + offset;  
    }
}

 

Hierarchy -> Main Camera -> Inspector -> CameraController -> Player 버튼 -> Scene -> Player 선택

 

- Reference

[Unity Moving the Player] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/moving-camera?playlist=17141

[Unity Tutorial Roll-a-ball 02] Moving the Player

1. 플레이어 오브젝트에 물리 엔진 추가

Inspector -> Add Component -> Physisc -> Rigidbody

2. 플레이어 이동 컨트롤 스크립트 생성

Project -> Create -> Folder -> 폴더 Scripts로 이름 변경

Player 오브젝트 선택 -> Inspector -> Add Component -> New Script -> Name : PlayerController -> Create and Add

Project에 생성된 PlayerController 스크립터를 Scripts 폴더에 드래그하여 넣는다.

3. 플레이어 이동 컨트롤 스크립트 PlayerController 소스 코드 수정

Project -> PlayerController 선택 -> Inspector -> Open

 

public class PlayerController : MonoBehaviour {

    // 에디터 안 Inspector에서 편집 가능한 속도 조정 변수 생성
    public float speed;
    // Rigidbody 형태의 변수 생성
    private Rigidbody rb;

    // 스크립트가 활성화된 첫 프레임에 호출
    void Start()
    {
        // 현재 오브젝트의 Rigidbody를 참조
        rb = GetComponent<Rigidbody>();
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 물리효과 계산을 수행하기 전에 호출
    void FixedUpdate()
    {
        // 키보드의 키로 컨트롤하는 수평 축의 입력 (left, right)
        float moveHorizontal = Input.GetAxis("Horizontal");
        // 키보드의 키로 컨트롤하는 수직 축의 입력 (up, down)
        float moveVertical = Input.GetAxis("Vertical");

        // 플레이어의 이동량을 선언 (x축, y축, z축)
        Vector3 movemnet = new Vector3(moveHorizontal, 0, moveVertical);
        // 플레이어의 Rigidbody에서 movement 값만큼 힘을 가해서 이동시킴
        rb.AddForce(movemnet * speed);
    }

수정한 소스 코드를 저장 -> Player 선택 -> Inspector -> PlayerController (Script) -> Speed 값을 입력

4. 프로젝트 빌드 및 실행

상단의 중앙에 위치한 플레이 버튼을 클릭하여 프로젝트를 실행한다.

아래의 게임 화면에서 키보드 조작으로 공을 움직일 수 있다.

 플레이어 이동

 키보드 입력

 키보드 방향키

 앞 

 W

 S

왼쪽

 A

오른쪽

 D

 

 

- Reference

[Moving the Player] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/moving-player?playlist=17141

[Unity Input ] https://docs.unity3d.com/ScriptReference/Input.html

[Unity Input GetAxis ] https://docs.unity3d.com/ScriptReference/Input.GetAxis.html

[Unity Rigidbody ] https://docs.unity3d.com/ScriptReference/Rigidbody.html

[Unity Rigidbody AddForce ] https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

+ Recent posts