内置补间类型
每个内置 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!");
}
| 参数 | 描述 |
|---|---|
| waypoints | Vector3 位置数组(至少 2 个)。根据方法选择世界或局部空间。包含 NaN、Infinity 或极端值的路径点将被拒绝。参见输入验证。 |
| pathType | VRCTweenPathType.Linear 用于直线段,VRCTweenPathType.CatmullRom 用于平滑曲线。 |
| closePath | 如果为 true,路径从最后一个路径点自动闭合回第一个。 |
| resolution | CatmullRom 路径的曲线平滑度(默认 10,更高 = 更平滑)。Linear 忽略此参数。静默限制在 1-50 范围内。 |
对于循环巡逻路线,设置 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);
}
在材质检查器中检查着色器的属性名称。常见名称有主颜色的 _Color、发光的 _EmissionColor、_Metallic、_Glossiness 和 _Cutoff。如果属性没有产生可见变化,着色器可能使用了不同的属性名称。