매끄러운 좌우 이동
5150 단어 IEnumeratorcoroutineUnity
데이터 개요
노선은 차선으로 버튼을 누르면 옆 차선으로 순조롭게 이동할 수 있다.
시작된 움직임은 매우 빨라서 마지막에 천천히 움직였다.
gih라서 매끄럽지 않아 보이지만 더 매끄럽게 움직입니다.
Coroutine
코르크 단백질은 프레임을 뛰어넘어 끊기고 다시 처리를 시작할 수 있는 구조다.
예를 들어 일반적인 for 문장의 중복 처리를 30회 처리하려면 30회 처리가 모두 같은 프레임에서 진행된다.
연골소를 사용하면 30회 처리로 30프레임 등으로 나눌 수 있다.
게임 코드
십자 키를 누른 Right 키를 들어 보세요.
RightKey를 누른 후 (Horisontal1)라는 코르크를 실행합니다.void Update ()
{
float pos_x = transform.position.x;
if (Input.GetKeyDown (KeyCode.RightArrow)) {
if (pos_x < 4) {
StartCoroutine(Horizontal1());
}
}
}
for 문장의 처리 횟수는 i가 10시, 9시, 8시...1시까지 10번 처리했습니다.
이번 열 번의 처리에서나는 오른쪽으로 이동하고 싶다.
3.7의 거리를 55, i를 10시 55 등분 중의 10으로 오른쪽으로 나누고 다음 i를 9시 55 등분 중의 9로 오른쪽으로 이동한 다음에 i를 8시로...이렇게 하면 딱 10번의 처리가 3.너는 오른쪽으로 가도 된다.
이렇게 천천히 전진하는 거리가 줄어들었기 때문에 처음에는 일찍, 마지막에는 천천히 전진했다.
private IEnumerator Horizontal1()
{
for (int i = 10; i > 0; i--) {
float p = i * 3.7f / 55;
Vector3 nowPos = transform.position;
transform.position = new Vector3 (nowPos.x + p, nowPos.y, nowPos.z);
yield return null;
}
}
또한 변수 p를 아래와 같이 등속 좌우로 이동할 수도 있고 for문장의 조건을 바꾸어 천천히 빠르게 이동할 수도 있다.float p = 3.7f / 10;
for(i = 1; i <11; i++)
이것은'여기까지 한 프레임'이라는 뜻의 문장이다.
yield return null;
또한 위의 문장을 다음과 같이 함으로써 한 프레임에서 실행할 수 있을 뿐만 아니라 지정된 몇 초마다 실행할 수 있다.yield return new WaitForSeconds(秒数);
Reference
이 문제에 관하여(매끄러운 좌우 이동), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tama496/items/498e0de9a9ce09ee72e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
코르크 단백질은 프레임을 뛰어넘어 끊기고 다시 처리를 시작할 수 있는 구조다.
예를 들어 일반적인 for 문장의 중복 처리를 30회 처리하려면 30회 처리가 모두 같은 프레임에서 진행된다.
연골소를 사용하면 30회 처리로 30프레임 등으로 나눌 수 있다.
게임 코드
십자 키를 누른 Right 키를 들어 보세요.
RightKey를 누른 후 (Horisontal1)라는 코르크를 실행합니다.void Update ()
{
float pos_x = transform.position.x;
if (Input.GetKeyDown (KeyCode.RightArrow)) {
if (pos_x < 4) {
StartCoroutine(Horizontal1());
}
}
}
for 문장의 처리 횟수는 i가 10시, 9시, 8시...1시까지 10번 처리했습니다.
이번 열 번의 처리에서나는 오른쪽으로 이동하고 싶다.
3.7의 거리를 55, i를 10시 55 등분 중의 10으로 오른쪽으로 나누고 다음 i를 9시 55 등분 중의 9로 오른쪽으로 이동한 다음에 i를 8시로...이렇게 하면 딱 10번의 처리가 3.너는 오른쪽으로 가도 된다.
이렇게 천천히 전진하는 거리가 줄어들었기 때문에 처음에는 일찍, 마지막에는 천천히 전진했다.
private IEnumerator Horizontal1()
{
for (int i = 10; i > 0; i--) {
float p = i * 3.7f / 55;
Vector3 nowPos = transform.position;
transform.position = new Vector3 (nowPos.x + p, nowPos.y, nowPos.z);
yield return null;
}
}
또한 변수 p를 아래와 같이 등속 좌우로 이동할 수도 있고 for문장의 조건을 바꾸어 천천히 빠르게 이동할 수도 있다.float p = 3.7f / 10;
for(i = 1; i <11; i++)
이것은'여기까지 한 프레임'이라는 뜻의 문장이다.
yield return null;
또한 위의 문장을 다음과 같이 함으로써 한 프레임에서 실행할 수 있을 뿐만 아니라 지정된 몇 초마다 실행할 수 있다.yield return new WaitForSeconds(秒数);
Reference
이 문제에 관하여(매끄러운 좌우 이동), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tama496/items/498e0de9a9ce09ee72e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
void Update ()
{
float pos_x = transform.position.x;
if (Input.GetKeyDown (KeyCode.RightArrow)) {
if (pos_x < 4) {
StartCoroutine(Horizontal1());
}
}
}
private IEnumerator Horizontal1()
{
for (int i = 10; i > 0; i--) {
float p = i * 3.7f / 55;
Vector3 nowPos = transform.position;
transform.position = new Vector3 (nowPos.x + p, nowPos.y, nowPos.z);
yield return null;
}
}
float p = 3.7f / 10;
for(i = 1; i <11; i++)
yield return null;
yield return new WaitForSeconds(秒数);
Reference
이 문제에 관하여(매끄러운 좌우 이동), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tama496/items/498e0de9a9ce09ee72e5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)