Documentation index for AI agents (llms.txt) A Markdown version of every page is available: request the page's source under /docs/, follow the "alternate" link in this page's head, or start from /llms.txt.
Visual Script logo Manual

Remap#

Math / Range / Remap Number, From, To

  • Can Read

  • Cannot Write

Description#

Converts a number from one range of values to another one, keeping its proportion

Parameters#

Name Description
Number The number that is converted
From Min The lowest value of the original range
From Max The highest value of the original range
To Min The lowest value of the resulting range
To Max The highest value of the resulting range
Clamp Whether the result stays inside the resulting range

Code#

using System;
using UnityEngine;
using VisualScript.Icons;

namespace VisualScript.Runtime
{
    [Get]

    [Title("Remap")]
    [Category("Math/Range/Remap", "Number, From, To")]

    [Description("Converts a number from one range of values to another one, keeping its proportion")]
    [Image(typeof(IconInterpolate), ColorTheme.Type.Yellow, typeof(BadgeSync))]

    [Parameter("Number", "The number that is converted")]
    [Parameter("From Min", "The lowest value of the original range")]
    [Parameter("From Max", "The highest value of the original range")]
    [Parameter("To Min", "The lowest value of the resulting range")]
    [Parameter("To Max", "The highest value of the resulting range")]
    [Parameter("Clamp", "Whether the result stays inside the resulting range")]

    [Keywords("Map", "Scale", "Convert", "Normalize", "Range", "Proportion", "Rule of Three")]

    [Serializable]
    public class TypeNumberMathRemap : TypeNumber
    {
        [SerializeField] private GetNumber m_Number = new GetNumber();

        [SerializeField] private GetNumber m_FromMin = new GetNumber(0f);
        [SerializeField] private GetNumber m_FromMax = new GetNumber(1f);

        [SerializeField] private GetNumber m_ToMin = new GetNumber(0f);
        [SerializeField] private GetNumber m_ToMax = new GetNumber(100f);

        [SerializeField] private GetBool m_Clamp = new GetBool(true);

        public override double GetPreview(GameObject source) => Remap(
            this.m_Number.GetPreview(source),
            this.m_FromMin.GetPreview(source),
            this.m_FromMax.GetPreview(source),
            this.m_ToMin.GetPreview(source),
            this.m_ToMax.GetPreview(source),
            this.m_Clamp.GetPreview(source)
        );

        public override double Get(Args args) => Remap(
            this.m_Number.Get(args),
            this.m_FromMin.Get(args),
            this.m_FromMax.Get(args),
            this.m_ToMin.Get(args),
            this.m_ToMax.Get(args),
            this.m_Clamp.Get(args)
        );

        private static double Remap(double number, double fromMin, double fromMax, double toMin, double toMax, bool clamp)
        {
            double fromRange = fromMax - fromMin;
            if (Math.Abs(fromRange) <= double.Epsilon) return toMin;

            double ratio = (number - fromMin) / fromRange;
            if (clamp) ratio = Math.Clamp(ratio, 0f, 1f);

            return toMin + (toMax - toMin) * ratio;
        }

        public override string ToString()
        {
            return $"Remap {this.m_Number} to ({this.m_ToMin}, {this.m_ToMax})";
        }

        protected override SubscriptionMode Subscription => SubscriptionMode.OnChange;
    }
}
Visual Script logoVisual Script © Catsoft Works 2026. All rights reserved.