{!See https://docs.google.com/document/d/1takg_GmIBBKKTj-GHZCwzxohpQz7Bhekivkk72kYMtE/edit for reference implementation of OneTrust, dataLayer and GTM} {!OneTrust Cookies Consent} {!OneTrust Cookies Consent end} {!dataLayer initialization push} {!dataLayer initialization push end} {!Google Tag Manager} {!Google Tag Manager end} 가변 속도 | Visual Effect Graph | 10.8.0
docs.unity3d.com
"{0}"의 검색 결과

    목차 표시/숨기기

    가변 속도

    메뉴 경로: Spawn > Variable Rate

    Variable Rate 블록은 Constant Rate 블록보다 더 발전된 접근 방식을 사용합니다. 이 블록이 적용하는 생성 속도는 Period에서 정의된 간격 내에 있는 두 속도 사이에서 선형적으로 보간됩니다.

    블록 호환성

    이 블록은 다음 컨텍스트와 호환됩니다.

    • Spawn

    블록 프로퍼티

    입력 타입 설명
    Rate Vector2 이 블록이 생성 속도를 계산하는 데 사용하는 두 값입니다. 현재 속도는 항상 이 Vector2의 두 차원 사이에 있는 값입니다.
    Period Vector2 이 블록이 새로운 생성 속도를 계산하기 전의 최소 및 최대 기간입니다. 기간이 길면 속도가 더 부드럽게 변경되고, 기간이 짧으면 주파수 속도가 더 많이 변경됩니다.

    참고

    다음과 같은 커스텀 생성자 콜백 구현을 통해 이 블록을 에뮬레이트할 수 있습니다.

    class VariableRateEquivalent : VFXSpawnerCallbacks
    {
        public class InputProperties
        {
            public Vector2 Rate;
            public Vector2 Period;
        }
    
        static private readonly int rateID = Shader.PropertyToID("Rate");
        static private readonly int periodID = Shader.PropertyToID("Period");
    
        public sealed override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
        }
    
        float m_PrevRate;
        float m_NextRate;
        float m_PrevTime;
        float m_NextTime;
    
        void AdvanceRate(float totalTime, Vector2 rate, Vector2 period)
        {
            m_PrevRate = m_NextRate;
            m_PrevTime = totalTime;
    
            m_NextRate = Random.Range(rate.x, rate.y);
            m_NextTime = totalTime + Random.Range(period.x, period.y);
        }
    
        public sealed override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
            if (state.newLoop)
                AdvanceRate(state.totalTime, vfxValues.GetVector2(rateID), vfxValues.GetVector2(periodID));
    
            if (state.playing)
            {
                float range = m_NextTime - m_PrevTime;
                float ratio = 1.0f;
                if (range > 0.0f)
                    ratio = Mathf.Clamp01((state.totalTime - m_PrevTime) / range);
    
                float rate = Mathf.Lerp(m_PrevRate, m_NextRate, ratio);
                if (ratio == 1.0f)
                    AdvanceRate(state.totalTime, vfxValues.GetVector2(rateID), vfxValues.GetVector2(periodID));
    
                state.spawnCount += rate * state.deltaTime;
            }
        }
    
        public sealed override void OnStop(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
        }
    }
    
    문서 개요
    맨 위로
    Copyright © 2023 Unity Technologies — 상표 및 이용약관
    • 법률정보
    • 개인정보처리방침
    • 쿠키
    • 내 개인정보 판매 금지
    • Your Privacy Choices (Cookie Settings)