Skip to main content

内置补间类型

每个内置 VRCTween 类型的详细示例。

变换补间​

变换补间动画化 GameObject 的位置、旋转或缩放。这些是最常用的用于在场景中移动对象的补间类型。所有变换补间都可以在 GameObject 或 Transform 上调用:

// Both are equivalent
myObject.TweenPosition(target, 1f, VRCTweenEase.OutQuad);
myObject.transform.TweenPosition(target, 1f, VRCTweenEase.OutQuad);

TweenPosition 和 TweenLocalPosition​

动画化 GameObject 的世界或局部位置:

public GameObject door;

public void OpenDoor()
{
// Move to a world position
door.TweenPosition(new Vector3(0, 3, 0), 1f, VRCTweenEase.OutQuad);
}

public void CloseDoor()
{
// Move to a local position (relative to parent)
door.TweenLocalPosition(Vector3.zero, 1f, VRCTweenEase.InOutQuad);
}

TweenRotation 和 TweenLocalRotation​

使用欧拉角动画化 GameObject 的旋转:

public GameObject lever;

public void PullLever()
{
// Rotate to world euler angles
lever.TweenRotation(new Vector3(-45, 0, 0), 0.5f, VRCTweenEase.OutBack);
}

public void ResetLever()
{
// Rotate to local euler angles (relative to parent)
lever.TweenLocalRotation(Vector3.zero, 0.5f, VRCTweenEase.InOutQuad);
}

TweenScale​

动画化 transform.localScale。Unity 的世界空间缩放是只读的,因此没有 TweenGlobalScale 变体。

public GameObject pickup;

public void OnPickedUp()
{
// Shrink to nothing
pickup.TweenScale(Vector3.zero, 0.3f, VRCTweenEase.InBack);
}

public void OnDropped()
{
// Pop back to full size
pickup.TweenScale(Vector3.one, 0.3f, VRCTweenEase.OutBack);
}

路径补间​

路径补间沿一系列路径点移动 GameObject。使用 TweenPath 进行世界空间路径,使用 TweenLocalPath 进行局部空间路径。与变换补间一样,这些可以在 GameObject 或 Transform 上调用。

TweenPath 和 TweenLocalPath​

沿多点路径动画化 GameObject:

public GameObject platform;

public void StartPatrol()
{
Vector3[] route = new Vector3[] {
new Vector3(0, 0, 0),
new Vector3(10, 0, 0),
new Vector3(10, 0, 10),
new Vector3(0, 0, 10)
};

// Linear path that loops back to the start
platform.TweenPath(route, 8f, VRCTweenPathType.Linear, true, 10, VRCTweenEase.Linear)
.SetLoops(-1, VRCTweenLoopType.Restart);
}

使用 VRCTweenPathType.CatmullRom 创建平滑曲线路径而不是直线段:

public GameObject camera;

public void StartCameraFlythrough()
{
Vector3[] cameraPath = new Vector3[] {
new Vector3(0, 2, 0),
new Vector3(5, 4, 3),
new Vector3(10, 2, 8),
new Vector3(15, 3, 5)
};

// Smooth curved path
camera.TweenPath(cameraPath, 6f, VRCTweenPathType.CatmullRom, false, 10, VRCTweenEase.InOutSine)
.OnComplete(this, nameof(OnFlythroughDone));
}

public void OnFlythroughDone()
{
Debug.Log("Camera flythrough complete!");
}
参数描述
waypointsVector3 位置数组(至少 2 个)。根据方法选择世界或局部空间。包含 NaN、Infinity 或极端值的路径点将被拒绝。参见输入验证。
pathTypeVRCTweenPathType.Linear 用于直线段,VRCTweenPathType.CatmullRom 用于平滑曲线。
closePath如果为 true,路径从最后一个路径点自动闭合回第一个。
resolutionCatmullRom 路径的曲线平滑度(默认 10,更高 = 更平滑)。Linear 忽略此参数。静默限制在 1-50 范围内。
tip

对于循环巡逻路线,设置 closePath 为 true 并使用 .SetLoops(-1, VRCTweenLoopType.Restart)。这将创建一个无缝循环,末端没有可见的跳跃。

UI 补间​

UI 补间作用于 Unity UI 组件。非常适合动画化菜单、HUD 和交互元素。

TweenColor 和 TweenFade (Graphic)​

Graphic 是 Image、Text、RawImage 和其他 UI 元素的基类。这些方法适用于所有它们:

public Image myImage;
public Text myText;

void Start()
{
// Fade an image to red
myImage.TweenColor(Color.red, 1f, VRCTweenEase.OutQuad);

// Fade text to transparent
myText.TweenFade(0f, 1f, VRCTweenEase.OutQuad);
}

TweenFade (CanvasGroup)​

淡入淡出整个 UI 面板和组:

public CanvasGroup menuPanel;

public void ShowMenu()
{
menuPanel.gameObject.SetActive(true);
menuPanel.TweenFade(1f, 0.5f, VRCTweenEase.OutQuad);
}

public void HideMenu()
{
menuPanel.TweenFade(0f, 0.5f, VRCTweenEase.OutQuad)
.OnComplete(this, nameof(OnMenuHidden));
}

public void OnMenuHidden()
{
menuPanel.gameObject.SetActive(false);
}

TweenValue (Slider)​

动画化滑块值,用于血量条、进度指示器等:

public Slider healthBar;

public void TakeDamage(float damage)
{
float newHealth = healthBar.value - damage;
healthBar.TweenValue(newHealth, 0.3f, VRCTweenEase.OutQuad);
}

TweenAnchorPos​

动画化 RectTransform 的锚定位置。这是在 Canvas 布局中移动 UI 元素的正确方式:

public RectTransform notificationPanel;

public void SlideIn()
{
// Slide from off-screen to center
notificationPanel.anchoredPosition = new Vector2(-500, 0);
notificationPanel.TweenAnchorPos(Vector2.zero, 0.5f, VRCTweenEase.OutQuad);
}

public void SlideOut()
{
notificationPanel.TweenAnchorPos(new Vector2(500, 0), 0.5f, VRCTweenEase.InQuad);
}

TweenSizeDelta​

动画化 RectTransform 的 sizeDelta(宽度和高度)。适用于调整 UI 面板大小、展开/折叠部分或动画化弹出窗口:

public RectTransform tooltip;

public void ExpandTooltip()
{
tooltip.TweenSizeDelta(new Vector2(400, 200), 0.3f, VRCTweenEase.OutQuad);
}

public void CollapseTooltip()
{
tooltip.TweenSizeDelta(Vector2.zero, 0.3f, VRCTweenEase.InQuad);
}

渲染器补间​

使用 MaterialPropertyBlock 动画化渲染器的材质属性。这是在 3D 对象上动画化材质属性的推荐方式——它避免创建材质实例,并且适用于 GPU 实例化。

TweenColor (Renderer)​

动画化渲染器的颜色。默认情况下,这会补间 _Color 着色器属性:

public Renderer myRenderer;

void Start()
{
// Tween to red over 1 second
myRenderer.TweenColor(Color.red, 1f, VRCTweenEase.OutQuad);
}

要补间不同的着色器属性,显式传递属性名称:

// Tween the emission color
myRenderer.TweenColor("_EmissionColor", Color.yellow, 1f, VRCTweenEase.OutQuad);

TweenFloat (Renderer)​

动画化渲染器的 float 着色器属性。适用于溶解效果、发光强度、裁剪值和其他着色器驱动的 VFX:

public Renderer myRenderer;

void Start()
{
// Dissolve effect
myRenderer.TweenFloat("_DissolveAmount", 1f, 2f, VRCTweenEase.InQuad);

// Adjust metallic
myRenderer.TweenFloat("_Metallic", 0.8f, 1f, VRCTweenEase.OutQuad);
}
tip

在材质检查器中检查着色器的属性名称。常见名称有主颜色的 _Color、发光的 _EmissionColor、_Metallic、_Glossiness 和 _Cutoff。如果属性没有产生可见变化,着色器可能使用了不同的属性名称。

灯光补间​

动画化 Light 组件属性,用于动态光照效果,如昼夜循环、闪烁灯光和响应式环境。

TweenIntensity (Light)​

动画化灯光的强度:

public Light myLight;

public void FadeOutLight()
{
myLight.TweenIntensity(0f, 2f, VRCTweenEase.OutQuad);
}

public void FlashLight()
{
myLight.TweenIntensity(5f, 0.1f, VRCTweenEase.OutQuad);
}

TweenColor (Light)​

动画化灯光的颜色:

public Light myLight;

void Start()
{
// Sunset color shift
myLight.TweenColor(new Color(1f, 0.5f, 0.2f), 3f, VRCTweenEase.InOutSine);
}

音频补间​

TweenVolume (AudioSource)​

淡入淡出音频音量:

public AudioSource musicSource;

public void FadeOutMusic()
{
musicSource.TweenVolume(0f, 2f, VRCTweenEase.OutQuad);
}

public void FadeInMusic()
{
musicSource.Play();
musicSource.TweenVolume(1f, 2f, VRCTweenEase.InQuad);
}

TweenPitch (AudioSource)​

动画化 AudioSource 的音高。典型范围为 -3 到 3,但接受任何有限值:

public AudioSource engineSource;

public void AccelerateEngine()
{
engineSource.TweenPitch(2f, 1f, VRCTweenEase.OutQuad);
}

public void DecelerateEngine()
{
engineSource.TweenPitch(0.5f, 1.5f, VRCTweenEase.InOutQuad);
}

精灵补间​

适用于 2D 游戏和基于精灵的 UI:

public SpriteRenderer mySprite;

void Start()
{
// Fade sprite color
mySprite.TweenColor(Color.blue, 1f, VRCTweenEase.OutQuad);

// Fade sprite to transparent
mySprite.TweenFade(0f, 1f, VRCTweenEase.OutQuad);
}