본문 바로가기
유니티강좌

물결 파동처럼 움직이는 오브젝트 만들기 & 좌우반전이동 | Wave Moving Object, Mathf.Sin | 유니티 게임 개발 튜토리얼(Unity & C# Script)

by Ncube 2021. 1. 13.

 

 

유령 오브젝트를 좌우반전(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;
    }
}

 

댓글