L-System is a rewriting system used mainly to model the development of plants. L-Systems in Unity enables you to rapidly create plants in your Unity games.
Add LSystemExecutor to a game object in your scene. Set a L-System definition (e.g., "Assets/Defs/3D Tree 1.txt") and rendering properties. Start the game.
// 3D Tree 1.txt
axiom=F
angle=22.5
number of derivations=3
F=(1)F[-&^F][^++&F]||F[--&^F][+&F]
L-System processing is divided into three phases: parsing, derivation and interpretation. L-System on Unity's API map each phase to a static class.
Method:
LSystemParser.Parse()
Input:
- l-system definition [string]
Output:
- axiom [string]
- angle [float]
- derivations [int]
- productions [Dictionary<string, List<Production>>]
Example:
string axiom;
float angle;
int derivations;
Dictionary<string, List<Production>> productions;
LSystemParser.Parse(
file.text,
out axiom,
out angle,
out derivations,
out productions);
Method:
LSystemDeriver.Derive()
Input:
- axiom [string]
- angle [float]
- derivations [int]
- productions [Dictionary<string, List<Production>>]
Output:
- moduleString [string]
Example:
string moduleString;
LSystemDeriver.Derive(
axiom,
angle,
derivations,
rules,
out moduleString);
Method:
LSystemInterpreter.Interpret()
Input:
- num. segment axial samplers [int]
- num. segment radial samplers [int]
- segment width [float]
- segment height [float]
- leaf size [float]
- leaf axial density [int]
- leaf radial density [int]
- use foliage [bool]
- narrow branches [bool]
- leaf material [UnityEngine.Material]
- trunk material [UnityEngine.Material]
- angle [float]
- moduleString [string]
Output:
- leaves [UnityEngine.GameObject]
- trunk [UnityEngine.GameObject]
Example:
GameObject leaves, trunk;
LSystemInterpreter.Interpret(
segmentAxialSamples,
segmentRadialSamples,
segmentWidth,
segmentHeight,
leafSize,
leafAxialDensity,
leafRadialDensity,
useFoliage,
narrowBranches,
leafMaterial,
trunkMaterial,
angle,
moduleString,
out leaves,
out trunk);