유령 오브젝트를 좌우반전(Object Flip Move) 이동 시키면서 물결치듯 움직이게 제어할 수 있습니다. 이동거리(Distance), 이동속도(Move Speed), 파동빈도(Wave Frequency), 파동높낮이(Wave Height)를 인스펙터 창에서 가능합니다. Mathf.Sin 메소드를 이용해 사인파 이동궤적을 만들 수 있습니다.
[Header("Title")] : 인스펙터창에 제목, 설명 문구 표시
[SerializeField] : Private변수를 인스펙터창에 노출
[Range(Min, Max)] : 범위지정 (Min, Max)
[WaveMoving.cs]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaveMoving : MonoBehaviour
{
//[SerializeField] float dist = 7f, speed = 5f, frequency = 20f, waveHeight = 0.5f;
[SerializeField] [Header("이동거리")] [Range(1f, 9f)] float dist = 7f;
[SerializeField] [Header("이동속도")] [Range(1f, 50f)] float speed = 5f;
[SerializeField] [Header("파동빈도")] [Range(1f, 40f)] float frequency = 20f;
[SerializeField] [Header("파동높이")] [Range(0.2f, 4f)] float waveHeight = 0.5f;
Vector3 pos, localScale;
bool dirRight = true;
void Start()
{
pos = transform.position;
localScale = transform.localScale;
}
void FixedUpdate()
{
if (transform.position.x > dist)
dirRight = false;
else if (transform.position.x < -dist)
dirRight = true;
if (dirRight)
GoRight();
else
GoLeft();
}
void GoRight()
{
localScale.x = 1;
transform.transform.localScale = localScale;
pos += transform.right * Time.deltaTime * speed;
transform.position = pos + transform.up * Mathf.Sin(Time.time * frequency) * waveHeight;
}
void GoLeft()
{
localScale.x = -1;
transform.transform.localScale = localScale;
pos -= transform.right * Time.deltaTime * speed;
transform.position = pos + transform.up * Mathf.Sin(Time.time * frequency) * waveHeight;
}
}
댓글