using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Oscillator : MonoBehaviour
{
Vector3 startPosition;
// 오브젝트를 놓을 위치를 지정
[SerializeField] Vector3 movementVector;
[SerializeField] [Range(0,1)] float movementFactor;
[SerializeField] float period = 2f;
void Start()
{
// 오브젝트의 시작 위치
startPosition = transform.position;
}
void Update()
{
float cycles = Time.time / period;
const float tau = Mathf.PI * 2;
float rawSinWave = Mathf.Sin(cycles * tau);
movementFactor = (rawSinWave + 1f) / 2f;
// movementFactor값에따라 오브젝트를 놓을 위치 저장
Vector3 offset = movementVector * movementFactor;
// 오브젝트 이동
transform.position = startPosition + offset;
}
}
- 사인 값을 활용해서 좌우, 상하로 오브젝트를 왔다 갔다 하기
- period의 값을 높이면 천천히 움직이고 줄이면 빠르게 움직임
@ period가 0이 되면 에러가 나와서 에러를 방지하려고 코드를 추가함.
void Update()
{
// 에러 방지
if ( period == 0 ) return;
if ( period <= Mathf.Epsilon ) return;
float cycles = Time.time / period;
const float tau = Mathf.PI * 2;
float rawSinWave = Mathf.Sin(cycles * tau);
movementFactor = (rawSinWave + 1f) / 2f;
// movementFactor값에따라 오브젝트를 놓을 위치 저장
Vector3 offset = movementVector * movementFactor;
// 오브젝트 이동
transform.position = startPosition + offset;
}
이 코드가 더 좋은 이유는 다음과 같습니다:
유니티 3D 비행기(캐릭터) 상하좌우 움직이기 (0) | 2024.08.29 |
---|---|
유니티 Mathf.Clamp() 특정값을 범위로 제한하기 (0) | 2024.08.29 |
유니티 다음 씬으로 넘어가기, 현재 씬 인덱스 구하기 (0) | 2024.08.26 |
유니티 특정 상황에서 씬 다시 불러오기, 재시작 (0) | 2024.08.26 |
유니티 오브젝트 충돌시 태그로 오브젝트 감지하기 (0) | 2024.08.26 |