[Unity] 신 함수 사용 방법

8727 단어 Unity

개요


고등학생 때 "삼각함수 같은 게 쓸모가 있나요?"옆 학생이에요.
나중에 다시 공부하느라 힘들었어요.인코스를 잘 이해해야 해요.'돌려'는 구체적으로 어떻게 된 거예요?이런 것들, 삼각비는 왜 성립되었을까?어쩔 수 없이 고려하다.
지금 잘 설명해도 되나요?그렇게 말하는 건 좀 이상하지만 비슷한 고민이 있는 사람에게 힌트가 됐으면 좋겠다고 생각했어요.
그러나 이 글은 항상 "Unity가 Sin 함수를 처리할 수 있다"는 것을 목표로 하고 있다.
그래서 설명하는 방법은 이 목적을 겨냥한 것이다.

Sin 함수 이미지



※ 추상적인 인상
'시간'의 개념은 1초 2초 3초...한 방향으로 계속 전진하는 것이다.거의 돌아오지 않을 겁니다.
그래프를 만들면 계속 길어지는 선과 같다.
이에 비해 Sin 함수는...
인 함수에 수치를 입력하면 "그 값은 단위 원의 어느 위치입니까?"제발
추상적인 예로 비유하면 신 함수는'반경 1의 막대기에 타임의 선을 동그랗게 감아 다 말린 위치를 알려준다'는 작업을 처리한다.

유닛 코드로 해볼게요.


Time

Time.time;
이렇게 하면'게임이 시작된 지금까지 프레임에 걸린 시간'을 계산할 수 있다.
이것은'계속 길어지는 선'이다.

Sin 함수(Mathf.sin)

float sin = Mathf.Sin(Time.time);
Unity에서 Sin 함수를 사용할 때 Mathf.Sin()을 씁니다.
Time.신에게 시간을 맡기고 1엔에 말아 올린 결과를 신이 돌려줄게.
sin의 결과는 보통 -1~1의 값이다.

당신은 신 함수의 무엇을 좋아합니까?


그리고!"Time.time"를 "sin 함수"에 삽입하면 시간의 길이에 따라 "원의 위치"가 되는 건 알지만...
그게 뭐가 그렇게 기뻐요?이렇게 되면다음은 본론.

주기적인 운동을 할 수 있어요.



LoopMotion.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoopMotion : MonoBehaviour {
    void Update ()
    {
        float sin = Mathf.Sin(Time.time);
        this.transform.position = new Vector3(0,sin,0);
    }
}
이 객체의 좌표는 this.transform.position입니다.
'new Vector3(0,sin,0)'은 X 좌표가 0Y이고 Sin Z 좌표가 0인 벡터입니다.
우선 플랫신은-1~1사이,타임의변화에 따라진폭변화가일어난다.
이 값을 사용하여 객체의 높이를 결정하면 위아래로 이동하는 객체를 완료할 수 있습니다.
이렇게 하면 버튼을 누르지 않아도 애니메이션을 만들 수 있고,sin의 값이 배가되면 이동량도 변하고,Time도 변한다.시간치가 배가되면 진폭 속도를 가속화하고 동적 변화를 증가시킬 수 있다.
키프레임의 애니메이션에서 동적 제어를 하기 어려운 불가결한 존재이다.(카메라 등을 자동으로 돌리고 싶다)
또 사용시간이 색상(RGB치)을 바꾼 경우 직접 사용 시간이 1에 달해 사용하기가 불편하다.
시간의 영역을 -1~1의 범위에 머무르면 처리하기 쉽다.

자유롭게 in 함수를 제어하고 싶어요.

float sin = Mathf.Sin(Time.time);
위의 의식도 10분 정도 가야 하는데..
1초에 5번 왕복하기를 원한다'또는'1번 왕복에 5초가 걸리기를 원한다'는 사람.
어떻게 하면 그 소원을 코드로 바꿀 수 있을까요?
당분간시간에 2를 곱하면 시간의 행진 상황이 2배로 변하기 때문에 왕복 속도가 올라갈 것 같고, 반대로 0.5를 곱하면 반이 되기 때문에 한 번 왕복하는 데 시간이 걸린다...어떻게 계산하면 좋을지 상상할 수 있다...?이런 문제지만.
대답으로 말하자면 이런 형식입니다.
float T = 1.0f;
float f = 1.0f / T;
float sin = Mathf.Sin(2 * Mathf.PI * f * Time.time);

2 × Mathf.PI (π)


왜× 파이요?이렇게 말하면...
위에서 말한 바와 같이sin 함수는'단위원(반경1의 원)의 방망이에 시간을 감는 이 선의 처리'다.
이 막대기를 한 바퀴 감는 데 필요한 선의 길이는... "막대기의 직경"× π”.
그래서 2*Mathf.PI를 쓰면, in 함수는 일주일에 필요한 선의 길이입니다.
이걸 하는 데 시간이 걸리면... 1초에 1주일, 2초에 2주일 이런 행동을 할 수 있다.
가격이 쉽게 처리되네요!
처리하기 쉬운 데이터의 처리를 정규화라고 한다.
이 부분은'시간을 원주로 정규화하라'고 한다.

f = 1 / T (Hz)


이어 "flat f=1/T;"주파수(진동 주파수)의 공식이다.
개념적으로 간단하게... "1분 몇 등분?"라는 공식을 남겼다.
f, T, 주기, 각주파수 오메가 같은 말로 말하기는 어려울 것 같지만 초등학생들도 이해할 수 있도록 좀 더 쉽게 말해줬으면 좋겠어요!!!"1이라는 숫자를 몇 개로 나눌까요?"의 정의!!!!
float sin = Mathf.Sin(2 * Mathf.PI * f * Time.time);
샘플 T에 1이 있어요.그래서... f=1...
float sin = Mathf.Sin(2 * Mathf.PI * 1 * Time.time);
이렇게 된 거 T=1 때, Time 1 되면 1주일 할까요?
그럼 T=2의 상황을 봅시다.
float sin = Mathf.Sin(2 * Mathf.PI * 0.5 * Time.time);
T=1시 f=0.5, Time 1시 0.5주 맞죠?
1주일에 타임이 2로 바뀌어야 하기 때문에'2초에 1주일'형태로 바뀌었다.
이 공식에 따라 "T = 1주일에 걸리는 초수"가 된다.
Sin 함수를 훌륭하게 조작했습니다!!!기쁘고 축하할 만하다!!!
또한f=초당주파수는f의값이바뀌면'1초당주파수'를조절할 수 있다.
이것을 알면'일주일에 필요한 초수'와'1초당 주파수'는 모두 인 함수를 조정할 수 있다.
주파수 - 위키백과 / 주파수 - 위키백과

총결산


Time을 특정 처리에 직접 사용하면 값이 영원히 커지기 때문에 처리하기 어렵다.
예를 들어sin을 사용하지 않고 주기적인 변화를 진행할 경우 어떤 로고를 준비하고 정기적으로 시간을 되돌려 그 기간에 임의로 처리해야 한다.
생각으로는 좀 복잡해요.
(제작된 물건은 대나무 통 같아서 회전의 본질은 아직 뜯어지지 않았지만 모양이 좋지 않다.)
그러나 인 함수의 결과는'1~1의 범위를 넘지 않기 때문에 처리에서 사용하기 쉽다.
인 함수를 사용하면 면도기로 주기적으로 변화하고 소리를 만들어 다양한 일에 활용할 수 있다.

방망이로 무언가를 무너뜨리는 일을 하는 사람이 하천의 흐름을 보면서 (이 강의 힘으로는 방망이의 힘을 만들 수 없구나~ㅋㅋ) 하천을 바라보며 쉬었겠지.
강에서 동력을 얻기를 바란다.

좋은 웹페이지 즐겨찾기