0.유니티 프로빌더와 원뿔같은 Cone 만들기

유니티에서 게임 오브젝트를 만들면서 기본적으로 제공되는 도형들이 많이 불편했다.

 

Assets을 찾아봤지만 교통 꼬깔형태의 Cone이 대부분이고 폴리곤 형태에서 원뿔에 가까운 형태는 직접 모델링해야 한다.

 

Blender 써볼까? 했지만 우선 '3D 게임 공부!' 목적이므로 프로빌더 패키지를 활용하기로 했다.

 

1. 프로빌더 설치.

Unity에서 제공하는 3D 모델링 패키지로 Package Manager 에서 바로 설치할 수 있다.

 

[Tools] -> [ProBuilder] -> [ProBuilderWindow] 로 바로 윈도우를 추가해 주었다.

프로빌더 설치후 윈도우 추가

 

2.원뿔 만들기

New Shape를 선택해서 씬창에 생긴 도구를 이용해 Cone을 만들어 보았다.

Create Shape와 Cone 선택

 

Cone을 선택하고 [CTRL] + [Shift] 버튼을 이용해서 원뿔에 가까운 오브젝트를 생성해 주었다. 딸깍!x3

Side Count는 64로 설정하였다.

Cone 오브젝트 생성

팽이처럼 뒤집기 위해서 Transform을 수정하기 위해 오브젝트를 클릭했더니 중심이 아닌 피봇을 잡고 있었다. ProBuilder 창에서 [Center Pivot]을 클릭하여 축을 오브젝트 중앙으로 변경해 주었다.

피봇 설정전
피봇 설정 후

팽이를 돌리기 위해 땅과 색을 추가했다.

땅과 색 추가
생성한 GameObjects

 

3.RigidBody 와 Collider 컴포넌트

Cone은 Spinner로, Plane으로 만든 땅은 Ground로 이름을 변경해 주었다. 둘 다 ProBuilder로 생성하면서 Mesh Collider는 자동으로 추가되어 있다.

 

[Spinner]

Transform.position (0,1,0)

Mesh Collider - [Convex] 설정

RigidBody - 추가

 

[Ground] 

대충 Spinner 밑에 Z축으로 길게

 

4.스크립트 추가. SpinController.cs

구현하고자 하는 기능은 팽이가 회전하면서 이동하고 점점 힘을 잃어 바닥에 구르는 것.

using System.Collections;
using System.Collections.Generic;
using System.Numerics;
using UnityEngine;
using Vector3 = UnityEngine.Vector3;

public class SpinController : MonoBehaviour
{
    [SerializeField] private float rotateSpeed; // 회전력
    [SerializeField] private float speed;   //이동속도
    private Vector3 playerVec; //Player 절대 이동 벡터
    private Vector3 inputVec; //상대 이동벡터

    private float speedDamper; //속도 감소
    private Rigidbody rb;
    
    private void Awake() {
        rb = GetComponent<Rigidbody>();
        rotateSpeed = 10000;
        speed = 100;
        speedDamper = 0.999f;
    }
    void Start()
    {
        
    }
    private void Update() {
        float inputX = Input.GetAxis("Horizontal");
        float inputY = Input.GetAxis("Vertical");

        inputVec = new Vector3(inputX, 0, inputY)*Time.deltaTime;

        rotateSpeed *= speedDamper;
        speed *=speedDamper;
    }
    void FixedUpdate()
    {
        transform.Translate(inputVec*speed,Space.World);
        rb.AddTorque(new Vector3(0,1,0)*rotateSpeed*Time.fixedDeltaTime,0);
    }

}

 

Spinner에 스크립트 추가 후 테스트 해보았다.

잘 돈다.

이동도 구현했으나 뭔가 팽이스럽지 않아서 다음시간에 추가해보고자 한다.

+ Recent posts