Overview
Line Renderer 組件是 Unity 中用于繪制連續線段的工具。它通過在三維空間中的兩個或兩個以上的點的數組,并在每個點之間繪制一條直線。可以繪制從簡單的直線到復雜的螺旋線等各種圖形。
1. 連續性和獨立線條
-
連續性:Line Renderer 繪制的線條始終是連續的,即一條直線連接每兩個相鄰的點。
-
獨立線條:如果需要繪制多個完全分開的線段,應該使用多個 GameObject,每個 GameObject 配置一個獨立的 Line Renderer。
-
世界單位:Line Renderer 渲染的線條寬度不是以像素為單位,而是以世界單位為單位。這意味著線條的寬度會根據世界空間中的實際尺寸進行計算,而不是屏幕像素大小。
Getting started
這樣會在三維空間創建一個默認的Line.
三種編輯模式
None,Edit Points和Create Points.頂部有兩個開關,兩個開關都沒有選擇的情況下是None,點擊第一個就進入了Edit Points模式,再次點擊則回到None,第二個同理代表Create Points模式.
None模式
-
Simplify(簡化):
- 點擊 Simplify 按鈕后,Line Renderer 會根據設置的 Tolerance 值,使用 Ramer-Douglas-Peucker 算法 來簡化線條的點。這一算法會根據你設置的公差值,計算并刪除不必要的點,從而減少 Line Renderer 中的點數。
- 通過簡化,你可以顯著提高性能,尤其是在需要大量渲染線條的情況下,減少過多的點可以降低計算量。
-
Simplify Preview(簡化預覽):
- 啟用這個選項后,你可以在 Inspector 窗口中看到簡化操作的預覽效果。這意味著你可以實時查看簡化后的線條效果,而不必實際執行簡化操作。
-
Tolerance(公差):
- Tolerance 控制簡化過程中允許線條偏離原始線條的程度。換句話說,Tolerance 設置了簡化過程中允許的最大誤差。
- 0 的值表示沒有偏差,因此沒有簡化效果,線條保持原樣。
- 較高的正值表示允許更大的偏差,從而進行更多的簡化。例如,如果你設置一個較高的值,簡化后的線條會失去一些精度,但點的數量會顯著減少。
- 默認值是 1,表示有一定的簡化,但仍會保持較為平滑的曲線。
Edit Points模式
當設置為 Edit Points 時,Unity 會在 Scene 視圖中將 Line Renderer 的 Positions 數組 中的每個點表示為一個黃色球體。可以使用 移動工具 (Move tool) 來移動這些點,從而調整線條的形狀。
左鍵套索一個或者多個點
-
Show Wireframe(顯示線框):
- 啟用此選項后,Unity 會在 Scene 視圖中繪制一個線框,幫助你可視化線條的形狀。這個線框將幫助你更清晰地查看并調整線條的構成。
-
Subdivide Selected(細分選中的點):
- 當你選中兩個或更多相鄰的點時,Subdivide Selected 按鈕會變得可用。點擊此按鈕后,Unity 會在選中的相鄰點之間插入一個新點,從而細分這兩個點之間的線段,使線條更加平滑。
Create Points模式
當設置為 Create Points 時,可以在 Scene 視圖 中點擊以將新點添加到 Line Renderer 的 Positions 數組 的末尾。通過鼠標點擊或射線檢測的方式來添加新的點,這讓編輯變得更加直觀和方便。
- Input(輸入方式):
- 選擇你希望使用的輸入方式來創建點。
- Mouse Position(鼠標位置):根據鼠標在 Scene 視圖中的位置創建新點。
- Physics Raycast(物理射線檢測):根據射線投射在 Scene 中的碰撞位置來創建新點。Unity 會在射線碰撞的點上創建新點。
- Layer Mask(層掩碼):
- 當輸入方式設置為 Physics Raycast 時,你可以使用此屬性來指定射線檢測時所用的層。它幫助你過濾掉不需要的對象,僅創建射線與特定層上的物體碰撞時的點。
- Min Vertex Distance(最小頂點距離):
- 當你在 Scene 視圖中拖動鼠標以創建點時,Line Renderer 會在鼠標拖動的距離超過此值時才創建一個新點。這樣可以避免過于密集的點,使線條更簡潔。
- Offset(偏移):
- 這個屬性決定了創建點時的偏移量:
- 如果輸入方式設置為 Mouse Position,則偏移是相對于 Scene 攝像機的。
- 如果輸入方式設置為 Physics Raycast,則偏移是相對于射線的法線方向。
- 這個屬性決定了創建點時的偏移量:
Line settings
1. Loop(閉環)
- 啟用此選項后,Line Renderer 會將線條的第一個點與最后一個點連接起來,形成一個閉合的環形線條。
2. Positions(位置)
- 一個 Vector3 數組,用于定義 Line Renderer 需要連接的點。每個點都會形成線條的一個頂點。
3. Width(寬度)
- 設置線條的寬度值和曲線值,以控制線條沿著其長度的寬度。
橫坐標對應線長,縱坐標對應寬度.
4. Color(顏色)
- 定義一個漸變來控制線條沿其長度的顏色變化。
- Unity 會在每個頂點處從顏色漸變中采樣,并在相鄰的頂點之間進行線性插值。通過增加更多頂點,可以更精確地逼近復雜的顏色漸變效果。
5. Corner Vertices(轉角頂點)
- 控制繪制轉角時所使用的額外頂點數量。增加此值可以使線條的轉角看起來更加圓滑。
6. End Cap Vertices(端點頂點)
- 控制繪制端點時所使用的額外頂點數量。增加此值可以使線條的端點看起來更加圓滑。
7. Alignment(對齊方式)
- 設置線條面朝的方向。
- View:線條朝向攝像機。線條會始終朝向攝像機。也就是說,不管攝像機在哪里,線條的“前方”總是面向攝像機。這個設置通常用于確保線條始終面向玩家或視角的方向,常見于需要根據攝像機角度動態調整的場景中。
- TransformZ:線條朝向其 Transform 組件的 Z 軸。線條會根據其 Transform 組件 的 Z 軸 來確定朝向。這意味著線條會沿著 GameObject 的 Z 軸 繪制,不會隨攝像機的移動而改變方向。這個設置適用于你希望線條保持固定方向,并且不受攝像機角度影響的場景。
8. Texture Mode(紋理模式)
- 控制紋理如何應用到線條上。
- Stretch:將紋理一次性貼圖到整個線條長度。
- Tile:根據線條的世界單位長度重復紋理。可以通過 Material.SetTextureScale 來設置紋理的平鋪頻率。
- DistributePerSegment:假設所有頂點均勻分布,紋理會被映射一次,覆蓋整個線條的長度。
- RepeatPerSegment:沿著線條重復紋理,每個線段重復一次。可以通過 Material.SetTextureScale 來調整紋理的平鋪頻率。
9. Shadow Bias(陰影偏差)
- 設置將陰影從光源偏移的量,以去除由于將體積近似為廣告板幾何體而導致的陰影偽影。
10. Generate Lighting Data(生成光照數據)
- 啟用此選項后,Unity 會在構建線條幾何體時包含法線和切線信息,從而使材質能夠使用場景的光照。
11. Use World Space(使用世界空間)
- 如果啟用,則將 Positions 數組中的點視為世界空間坐標。如果禁用,則點的位置相對于附加此組件的 GameObject 的Transform進行計算(即局部空間)。
Materials
組件使用的的全部材質列表
Lighting
陰影和全局光照相關的設置.
Line Renderer 組件中的相關設置
-
Cast Shadows(投射陰影)
-
說明:該屬性用于指定 Line Renderer 是否會在有適當光源時投射陰影。
-
選項:
- On:該 Line Renderer 會投射陰影,只要有合適的光源照射。
- Off:該 Line Renderer 不會投射陰影。
- Two-sided:該 Line Renderer 會投射雙面陰影,這意味著即使是單面物體(例如平面或四邊形)也可以在光源位于其背后時投射陰影。
- Shadows Only(僅陰影):啟用此選項后,Line Renderer 僅投射陰影,而本身不會被渲染出來。
注意:如果啟用了 Baked Global Illumination(烘焙全局光照)或 Enlighten Realtime Global Illumination(Enlighten 實時全局光照),要支持雙面陰影,材質必須支持 Double Sided Global Illumination(雙面全局光照)。
-
-
Receive Shadows(接收陰影)
- 說明:該屬性控制 Line Renderer 是否會接收投射到它上的陰影。只有在啟用了 Baked Global Illumination 或 Enlighten Realtime Global Illumination 時,此設置才會生效。
- 對應API:此屬性對應于
Renderer.receiveShadows
API。
-
Contribute Global Illumination(貢獻全局光照)
- 說明:啟用此屬性后,Line Renderer 會參與全局光照計算(通常在光照烘焙時進行)。這使得它在 Baked Global Illumination 或 Enlighten Realtime Global Illumination 計算時考慮進來。
- 對應API:啟用此選項會在 GameObject 的 Static Editor Flags 中啟用 Contribute GI 標志,并與
StaticEditorFlags.ContributeGI
API 對應。
-
Receive Global Illumination(接收全局光照)
- 說明:此屬性決定 Line Renderer 是否會接收來自光照貼圖或運行時光照探針的全局光照數據。只有啟用了 Contribute Global Illumination 屬性時,才可以編輯此選項。
- 對應API:此屬性與
MeshRenderer.receiveGI
API 對應。
其他的光照和陰影設置:
- Lightmaps(光照貼圖):控制是否使用光照貼圖來接收全局光照。
- Light Probes(光照探針):控制是否使用光照探針接收全局光照數據。
- Prioritize Illumination(優先光照):啟用此選項可以確保該渲染器始終參與 Enlighten 實時全局光照 計算,確保遠距離發光物體的影響不會被排除。
主要影響 Line Renderer 如何與場景中的光源、陰影、光照貼圖、全局光照等互動。如果?Line Renderer 需要在光照環境中表現更為真實或者需要影響場景的光照計算,這些設置會非常有用。
這是 Line Renderer 組件 中關于 光照探針 (Light Probes) 和 反射探針 (Reflection Probes) 的設置部分。以下是這些設置的詳細解釋和翻譯:
Probes(探針)
Light Probes(光照探針)
此屬性控制 Line Renderer 如何使用場景中的光照探針系統。光照探針可以提供環境中的光照信息,通常用于間接光照或實時光照數據。
-
Off(關閉):
- 說明:禁用光照探針。Line Renderer 將不會使用任何插值的光照探針數據。
-
Blend Probes(混合光照探針):
- 說明:啟用插值光照探針(默認值)。Line Renderer 將使用一個插值后的光照探針來提供光照信息。
-
Use Proxy Volume(使用代理體積):
- 說明:啟用此選項時,Line Renderer 會使用一個3D網格形式的插值光照探針。它通過代理體積來決定光照的插值方式。
-
Custom Provided(自定義提供):
- 說明:通過 MaterialPropertyBlock 從材質中提取光照探針的著色器統一值。這允許您自定義光照探針的行為。
-
Proxy Volume Override(代理體積覆蓋):
- 說明:設置一個其他 GameObject,該 GameObject 必須具有 Light Probe Proxy Volume 組件。啟用此選項后,Line Renderer 將使用該代理體積組件中的光照探針數據。
注意:此選項只有在 Light Probes 設置為 Use Proxy Volume 時才可見。
Reflection Probes(反射探針)
此屬性控制 Line Renderer 如何接收來自反射探針的反射信息。反射探針通常用于提供場景中反射光的詳細信息,適用于反射效果的渲染。
- Off(關閉):
- 說明:禁用反射探針。Unity 將使用默認的天空盒來處理反射,而不使用反射探針數據。
- Blend Probes(混合反射探針):
- 說明:啟用反射探針,并且僅在多個反射探針之間進行混合。這在室內環境中尤其有用,在這種環境中,角色可能會在不同的光照條件之間切換。
- Blend Probes and Skybox(混合反射探針和天空盒):
- 說明:啟用反射探針,并支持反射探針和默認天空盒之間的混合。這適用于室外環境,可以使得反射更加自然。
- Simple(簡單):
- 說明:啟用反射探針,但在兩個重疊的反射體積之間沒有混合。適用于簡單的反射效果,不需要復雜的過渡。
Anchor Override(錨點覆蓋)
-
說明:此設置指定 Unity 使用哪個 Transform 來確定在使用光照探針或反射探針時的插值位置。默認情況下,Unity 使用 Renderer 幾何體的邊界框中心來確定插值位置。
-
對應 API:此屬性對應于 Renderer.probeAnchor API。
總結:
這些設置控制 Line Renderer 如何與光照探針和反射探針互動,從而影響其光照和反射效果的渲染。根據場景的光照需求,可以啟用或禁用這些探針功能,或選擇不同的探針插值模式,以實現更精確的光照和反射表現。
Additional Settings
Motion Vectors(運動向量)
-
說明:設置是否使用運動向量來跟蹤 Renderer 每個像素在屏幕空間中的運動。這些運動信息可以用于應用后處理效果,如運動模糊。
-
注意:并非所有平臺都支持運動向量。可以查看 SystemInfo.supportsMotionVectors 來確認是否支持此功能。
-
對應 API:此屬性對應于 Renderer.motionVectorGenerationMode API。
運動模式選項:
- Camera Motion Only(僅攝像機運動):僅跟蹤攝像機的運動。
- Per Object Motion(每個對象的運動):使用特定的通道來跟蹤該 Renderer 的運動。
- Force No Motion(強制不跟蹤運動):不跟蹤任何運動。
Dynamic Occlusion(動態遮擋)
- 說明:啟用動態遮擋時,Unity 的遮擋剔除系統會在 Renderer 被靜態遮擋物(如墻壁)阻擋時將其剔除,不進行渲染。
- 默認:動態遮擋默認啟用。
- 應用場景:對于一些特殊效果,例如繪制角色的輪廓在墻后,可以禁用動態遮擋來確保該效果被正確渲染。
Sorting Layer(排序層)
- 說明:設置該 Renderer 所在的 Sorting Layer,用于確定渲染順序。這個屬性通常用于 2D 渲染系統,但在 3D 場景中也可通過設置不同的排序層來控制顯示的先后順序。
Order in Layer(層級中的順序)
- 說明:設置該 Renderer 在 Sorting Layer 中的渲染順序。較大的值會覆蓋較小值的渲染,適用于多個渲染對象之間的排序。
總結:
這些附加設置為 Line Renderer 提供了進一步的控制選項,主要用于調整渲染行為和效果。包括:
- 運動向量 用于后處理效果,如運動模糊;
- 動態遮擋 用于提高渲染性能,避免渲染被遮擋的物體;
- 排序層 和 層級中的順序 用于控制渲染順序,尤其在處理多個 2D 或 3D 渲染對象時非常有用。
常用API
1. 基本屬性和方法
-
positionCount: 獲取或設置
Line Renderer
中點的數量(即數組的大小)。lineRenderer.positionCount = 5; // 設置 5 個點
-
SetPosition(int index, Vector3 position): 設置線條在指定索引處的點的位置。
lineRenderer.SetPosition(0, new Vector3(0, 0, 0)); // 設置第一個點的位置
-
GetPosition(int index): 獲取指定索引處的點的位置。
Vector3 position = lineRenderer.GetPosition(0); // 獲取第一個點的位置
-
widthMultiplier: 控制線條的寬度比例。
lineRenderer.widthMultiplier = 0.1f; // 設置線條的寬度
-
startWidth 和 endWidth: 控制線條起始和結束處的寬度。
lineRenderer.startWidth = 0.1f; // 起始寬度 lineRenderer.endWidth = 0.1f; // 結束寬度
-
startColor 和 endColor: 控制線條的起始和結束顏色。
lineRenderer.startColor = Color.red; // 起始顏色 lineRenderer.endColor = Color.green; // 結束顏色
-
loop: 設置線條是否應該連接回起始點形成閉環。
lineRenderer.loop = true; // 設置為閉合
2. 控制材質和紋理
-
material: 設置
Line Renderer
的材質。lineRenderer.material = new Material(Shader.Find("Sprites/Default"));
-
textureMode: 設置紋理的模式,控制紋理如何應用在整個線條上。
lineRenderer.textureMode = LineTextureMode.Stretch; // 拉伸紋理
-
alignment: 控制線條的朝向。
lineRenderer.alignment = LineAlignment.Local; // 根據對象的本地坐標軸
3. 顏色和漸變
- colorGradient: 使用漸變來控制線條顏色。
Gradient gradient = new Gradient(); gradient.SetKeys(new GradientColorKey[] { new GradientColorKey(Color.red, 0.0f), new GradientColorKey(Color.blue, 1.0f) },new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(0.0f, 1.0f) } ); lineRenderer.colorGradient = gradient;
4. 控制線條的細節
-
numCornerVertices: 設置繪制線條角落時使用的額外點的數量,用于使角落更加圓滑。
lineRenderer.numCornerVertices = 10; // 設置角落平滑度
-
numCapVertices: 設置線條末端的點數,以創建圓形端點。
lineRenderer.numCapVertices = 10; // 設置端點的平滑度
-
generateLightingData: 啟用后,生成用于照明計算的法線和切線。
lineRenderer.generateLightingData = true;
5. 動態更新
- enabled: 啟用或禁用
Line Renderer
的渲染功能。lineRenderer.enabled = true; // 啟用 Line Renderer lineRenderer.enabled = false; // 禁用 Line Renderer
示例代碼
using UnityEngine;public class LineRendererExample : MonoBehaviour
{public LineRenderer lineRenderer;void Start(){// 設置 Line Renderer 屬性lineRenderer.positionCount = 4; // 4個點lineRenderer.SetPosition(0, new Vector3(0, 0, 0)); // 第一個點lineRenderer.SetPosition(1, new Vector3(1, 0, 0)); // 第二個點lineRenderer.SetPosition(2, new Vector3(1, 1, 0)); // 第三個點lineRenderer.SetPosition(3, new Vector3(0, 1, 0)); // 第四個點lineRenderer.startWidth = 0.1f; // 起始寬度lineRenderer.endWidth = 0.1f; // 結束寬度lineRenderer.startColor = Color.red; // 起始顏色lineRenderer.endColor = Color.green; // 結束顏色lineRenderer.loop = true; // 閉合線條// 設置漸變色Gradient gradient = new Gradient();gradient.SetKeys(new GradientColorKey[] { new GradientColorKey(Color.red, 0.0f), new GradientColorKey(Color.blue, 1.0f) },new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(0.0f, 1.0f) });lineRenderer.colorGradient = gradient;}
}