거의 알고리즘 일기장

3. 유니티 _ 실제와 같은 물체를 만들고 움직이기 본문

유니티

3. 유니티 _ 실제와 같은 물체를 만들고 움직이기

건우권 2020. 5. 2. 00:50

1. 중력 적용하기


RigidBody: 물리효과를 받기 위한 컴포넌트. Add Component에서 RigidBody를 추가하면 됨.(2D :RigidBody 2D)

Mass : 질량

Drag : 공기저항

Use Gravity : 말 그대로 중력체크

Is Kinematic : 이걸 체크하게되면 부딪쳐도 움직이지 않음, 물리현상에 관여 안하는듯 (스크립트로 움직이기 전까지)


2. 충돌 영역 정하기


Collider: 물리효과(충돌판정)을 받기 위한 컴포넌트. 물체 주변에 보이는 녹색선. 없을시 타 물체와 충돌하지 않음
물리 판정은 보이는 물체가 기준이 아니라 Collider 수치에 따라 결정됨.(Radius-반지름)


3. 재질 만들기


새로 재질을 만들어 드랍하면 적용
Metallic : 0~1까지 철재질을 어느정도로 할것인지, 스크롤 바 컨트롤을 이용해서 설정
Smoothness : 빛반사, 스크롤 바 컨트롤을 이용해서 설정
Albedo 왼쪽 작은 박스에 그린 그림을 넣을수도 있다, 텍스쳐를 넣는다고 함.
Tiling : 텍스쳐 반복 타일 개수 설정 가능
Emission : 텍스쳐 발광(밝기)조절 ( 물리적으로 빛을 내는것은 아님)


4. 물리 재질 만들기


Collider에 추가,
Bounciness : 탄성, 1이 최대
Bounciness Combine : 다음 탄성 결정
Friction: 마찰력, 낮을수록 많이 미끄러짐
Dynamic Friction: 이동 마찰력
Static Friction: 정지 마찰력
Friction Combine: 다음 마찰력 결정

Friction Combine은 최소로, Bounciness는 최대로 하면 만화스러워짐 ㅎ


5. 물리충돌 이벤트

    //실제 물리적인 충돌로 발생하는 이벤트
    private void OnCollisionEnter(Collision collision){}
    private void OnCollisionStay(Collision collision) { }
    private void OnCollisionExit(Collision collision) { }

    //콜라이더 충돌로 발생하는 이벤트
    private void OnTriggerEnter(Collider other){}
    private void OnTriggerStay(Collider other) { }
    private void OnTriggerExit(Collider other) { }

6. 볼에 관련된 코드 추가

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyBall : MonoBehaviour
{
    Rigidbody rigid;

    // Start is called before the first frame update
    void Start(){
        rigid = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void FixedUpdate(){
        //안정된 물리효과는 여기에

        //1. enter 누를때마다 위쪽으로 힘 가하기
        if (Input.GetButtonDown("Jump")){
            //힘을 위쪽으로 준것!, 이건 무게에 영향을 받음
            rigid.AddForce(Vector3.up * 5, ForceMode.Impulse);
            Debug.Log(rigid.velocity);
        }
        
        //2. 오른쪽 왼쪽방향키를 누를때마다 힘 가하기
        Vector3 vec = new Vector3(Input.GetAxisRaw("Horizontal")*0.5f, 0,
                                              Input.GetAxisRaw("Vertical")*0.5f);

        rigid.AddForce(vec, ForceMode.Impulse);

        //3. 회전력, vector를 축으로 삼아 회전함 ㅎㅎ 
        //그러므로 up이면 y축방향을 축으로 회전하므로 제자리에서 돌게됨.
        rigid.AddTorque(Vector3.up);
    }
}



참고

https://www.youtube.com/user/GoldmetalYT

 

골드메탈

게임 개발 & 그림 그리기 & 게임 플레이 각종 컨텐츠를 방송하는 스트리머 골드메탈 채널입니다. 주 컨텐츠는 게임 개발이며 유니티 엔진을 기반으로 컨텐츠를 진행합니다. - 2019.03.15 구독자 5천명 돌파! 감사합니다. - 2019.12.02 구독자 1만명 돌파! 감사합니다.

www.youtube.com

반응형
Comments