目錄
什么是表面效應器 2D?
🎯 它是做什么的?
🧪 從第一性原理解釋它是怎么工作的
📦 重要參數解釋
為什么不直接用 Rigidbody(剛體)來控制運動??
所以什么時候該用哪個?
一個小例子(滑雪坡)
?? 使用技巧和注意事項
什么是表面效應器 2D?
Surface Effector 2D 是一個會沿著表面施加力的組件,用來讓物體在上面自動滑動或運動。
換句話說,它就像是一個會主動“推動”在它上面的東西向某個方向滑動的表面。
🎯 它是做什么的?
Surface Effector 2D 主要用在下面這些地方:
-
制作 傳送帶(物體放上去自己動)
-
制作 滑雪坡 或 水滑道(滑板、人物會自動沿地面滑動)
-
做 流水 或 風力效果(模擬表面流體推動作用)
它是 基于物理的力作用器,不會直接改物體位置,而是通過 施加力或速度 來影響物體運動。
🧪 從第一性原理解釋它是怎么工作的
我們要先明白:Unity 中所有基于 2D 物理的交互,底層其實都歸結為「力(force)與摩擦(friction)」的系統。
?? Surface Effector 2D 具體做了什么?
-
它依附于一個 Collider 2D(通常是 Box Collider 2D 或 Edge Collider 2D),表示一個“表面”。
-
在這個表面上的剛體(Rigidbody 2D)接觸到它之后:
-
它會對接觸體施加一個 沿著表面切線方向的速度(不是力)
-
可以讓物體沿表面自動滑動或被傳送
-
-
表面本身也可以設定摩擦力,這決定了物體在滑動時會不會很容易停下來。
📦 重要參數解釋
參數 | 中文解釋 | 類比 |
---|---|---|
Speed | 施加在接觸剛體上的滑動速度(單位是單位/秒) | 像傳送帶的移動速度 |
Force Scale | 控制速度施加的強度(0 到 1) | 越小越容易被摩擦抵消 |
Use Contact Force | 是否僅對正在接觸的物體施加速度 | 打開 = 必須貼著它才滑動;關閉 = 離它近也可能受影響 |
Collider | 通常你需要用一個 Collider(Box/Edge)掛上這個 Effector 才能起效 | 像地面或者傳送帶的形狀 |
?
?
為什么不直接用 Rigidbody(剛體)來控制運動??
Rigidbody 是“誰要動”;Surface Effector 是“環境讓你動”。?
Rigidbody 2D(剛體):
-
是“運動的物體自身”;
-
它自己根據外力(力、速度、碰撞等)來決定運動方式;
-
如果你用腳本或輸入控制它,比如
AddForce()
、velocity = ...
,你是在主動讓它動。
?舉例:
rb.velocity = new Vector2(10f, 0f); // 主動讓物體向右跑
這就像是你在操控一個滑板車:你踩一下滑板車,它就動了。它的運動完全取決于你輸入的命令或外力。?
Surface Effector 2D:
-
是“作用在地面或表面上的運動影響器”;
-
它不會直接控制物體,而是對接觸到它的物體施加表面速度;
-
被影響的物體必須要有 Rigidbody,才能接收這個“滑動影響”。
📦 舉例:
你做了一個斜坡(Edge Collider),掛上 Surface Effector 2D,速度設置為 5。任何帶 Rigidbody2D 的物體只要碰到這個坡,就像站在傳送帶上,自動往下滑。你不需要寫任何代碼控制物體本身!
所以什么時候該用哪個?
用 Rigidbody:
-
玩家控制角色的輸入(跳、跑)
-
敵人 AI 自主運動
-
飛行、跳躍、被彈起、加速等復雜運動邏輯
用 Surface Effector 2D:
-
自動傳送帶
-
滑雪道或滑梯(角色自動滑動)
-
模擬流體(比如水流、冰面、風吹)
?
一個小例子(滑雪坡)
你做一個滑雪游戲,角色是一塊帶有 Rigidbody2D 的滑板。
你畫了一條山坡軌跡(比如用 Edge Collider 2D),然后加一個 Surface Effector 2D:
-
設置
Speed = 10
-
設置
Force Scale = 1
-
確保角色的 Collider 是和山坡發生接觸?
?
👉 效果:滑板放上去,不需要控制,它就會自動“順著坡”滑下來!
?
?? 使用技巧和注意事項
-
Collider 必須啟用
Used By Effector
否則掛了 Surface Effector 也不會生效。
-
剛體必須有摩擦或貼近接觸
如果 Rigidbody2D 與表面沒有實際“貼上”,就不會被施加速度。
-
Effector 不會自動旋轉速度方向
它的滑動方向是 沿著 Collider 局部坐標系的 X 軸方向,所以如果你的地面是傾斜的,就會根據局部 X 向施加速度。