한 걸음 두 걸음

Day UCI 특강 2 ] 객체 내부 보기 폴리곤 isTrigger 객체회전시키기 빛의 밝기 조절 3D아이콘 크기 조절 경기장-회전하는 큐브객체 충돌 시 isTrigger false 및 setActive(false)설정 본문

Unity

Day UCI 특강 2 ] 객체 내부 보기 폴리곤 isTrigger 객체회전시키기 빛의 밝기 조절 3D아이콘 크기 조절 경기장-회전하는 큐브객체 충돌 시 isTrigger false 및 setActive(false)설정

언제나 변함없이 2019. 1. 22. 14:55
반응형

모든 객체는 바깥에 면이 입혀져있기 때문에 이렇게 z축으로 180도 눕혀보면 아무것도 안보이게된다.

그래서 안쪽에도 보이도록 만들기위해서는 shader를 써야한다.


예를들어

구를 하나 넣어보자

카메라가 구 내부로 들어가면

구 내부는 아무것도 없기때문에 아무것도 볼 수 없게된다.


폴리곤 갯수의 차이


위처럼 설정해서 보는 방식을 다르게 할 수 있고,

쿼드와 플레인의 차이는 위의 사진과 같다. 겉으로는 같아보이는데 다르다.

Is trigger를 해주면 바닥을 뚫고 떨어져버림. 물리에 대한 적용을 시켜주지않고,
충돌이 적용이 안된다는 뜻임. 그렇게 만들어버리는것이 is trigger


계속 회전시킬 예정인데

스크립트 하나 추가해서 만들어준다.

계속 회전시킬것이므로 update에 넣어주는데

그대로쓰면 너무 빠르게 회전하니까

Time.delteTime을 곱해줘서 천천히 돌아가게만든다.

이제 여기다가 새롭게 Vector 값을 추가해서 쓰면

더 이상 밑에있는 값을 계속 넣어주어야할 필요는 없겠죠

여기서 주는 속성값이 가장 우선이 되는 값이에요

상자에 색깔 입혀준 후, prefeb으로 저장해준 후 이렇게 복사해서 만들어넣고
플레이시키면 다 같이 뺑글뺑글 도는 것을 확인할 수 있음!

여기서 빛을 하나 구형으로 더 만들어주자면

이와같이 생성이됨! 그림자도 있고 그림자 없으면 shadow 설정해주고!


빛의 색상 및 밝기를 속성(인스펙터)에서 설정해줄 수 있어요~

인텐서티 밝기는 밝기를 나타내구요


땅에 색상을 줘서 빛이 어떻게 오는지 확인해볼께요~

빛의 밝기와 바닥의 색상에 따라 달라질 수 있음!!

이렇게 밝아집니당~!


땅의 색상이 바뀌면 이런느낌이에요 ^.^

3D아이콘 크기를 여기서 조절해줄 수 있음

해(3D아이콘 중 하나)가 커졌다가 작아졌다가 하죠?

여기까지 일단 하고 쉬겠습니댱~^ㅁ^


구에 스크립트를 적용시켜서 움직여줍시다.

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

public class BallController : MonoBehaviour
{
    public float thrust = 100.0f;
    public Rigidbody rb; //여기서 한 번 지정해주고나서, rb로 초기에 sphere를 넣어주었기 때문에 

    float horizontalSpeed = 2.0f;
    float verticalSpeed = 2.0f;

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

    // Update is called once per frame
    void Update()
    {
        float h = /* Time.deltaTime * */ horizontalSpeed * Input.GetAxis("Horizontal");
        float v = /* Time.deltaTime * */ verticalSpeed * Input.GetAxis("Vertical");
        //이렇게 Time.deltaTime 을 *곱해줘서 게임의 속도가 적절하도록 맞춰준다.

        // Instantiate the projectile at the position and rotation of this transform

        Vector3 forw = new Vector3(h, 0, v);
         rb.AddForce(forw * thrust);



    }
}

이를 구에 적용시켜주고,

사진처럼 cube를 확장시켜 펜스를 둘러줍니다.

잘만들어졌네여

나중에 수정 편하게 하려고 empty 만들어서 부모삼고 자식으로 펜스 요소들 넣어줌!!!

카메라뷰도 잘 보이게 설정해주고 ^ㅁ^ 직접 만들던가 control shift F를 사용하던가..해용~

여기서 카메라가 공을 따라가게 만들려면 상대거리값을 알아야함.

상대거리값(dist) = 구의 transform.position - camera의 transform.position
(일정한 거리로 유지할 것이기 때문에 한 번만 계산해주면 됨)

즉 camera의 포지션은 구의 위치 - dist인 것임.
(이유는, 공의 위치에서 카메라 위치 벡터값을 빼주었기 때문에 이렇게 해줍니당..~)


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

public class camera : MonoBehaviour
{
    public Rigidbody rb;
    public GameObject ball;
    Vector3 dist = new Vector3(0, 0, 0);

    // Start is called before the first frame update
    void Start()
    {
        dist = ball.transform.position - transform.position; //카메라는 현재 rigidbody이기때문에 따로 명시해주지않아도 괜찮다고합니다.

    }

    // Update is called once per frame
    void Update()
    {
        transform.position = ball.transform.position - dist; //카메라의 위치는 볼의 위치 - dist 값으로 계속 설정해주어야한다.

    }
}

이렇게 카메라에 적용시켜줄 script를 설정해주면 카메라가 공을 따라 움직여오 ㅎㅎ


이제

공에 닿으면 상자가 사라지게끔 trigger을 이용할거에요

active를 false하면 비활성화되는거죠!

충돌이 일어난 다음에 비활성화시켜야함.
그럼 충돌에 대해서도 알아보자

충돌되는 객체가 있으면 그 객체의 이름에 대해서 출력하라는 부분이 설명되어있네용?

책 90page에 나와있는 OnTriggerEnter를 사용해주면 된다.
그런데 여기서 태그를 비교하고있으므로 박스의 태그를 "Box로 변경해주어야한다."

태그는 사전에 만들어줫음요

그리고 BallController에 추가시켜주면

이러케 닿을 때마다 active false가 되어서 사라지는 것처럼 보여요


반응형