publicevent EventHandler<BindablePropertyChangedEventArgs> propertyChanged; privatevoidNotify([CallerMemberName] string name = "") { propertyChanged?.Invoke(this, new BindablePropertyChangedEventArgs(name)); } }
绑定(一次性建立,之后自动同步)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
var vm = new PlayerViewModel(); root.dataSource = vm;
var bar = root.Q<ProgressBar>("healthBar"); bar.SetBinding("value", new DataBinding { dataSourcePath = new PropertyPath(nameof(PlayerViewModel.HealthRatio)), bindingMode = BindingMode.ToTarget });
var label = root.Q<Label>("healthLabel"); label.SetBinding("text", new DataBinding { dataSourcePath = new PropertyPath(nameof(PlayerViewModel.Health)), bindingMode = BindingMode.ToTarget });
Batches draw calls by grouping objects that use the same shader variant, reducing SetPass calls Shader properties stored in GPU buffers instead of individual material constants
Both can be used together in SRP, but SRP Batcher takes precedence when enabled. For optimal performance in modern Unity projects, prefer SRP Batcher with proper shader setup.
Both Dynamic Batching and SRP Batcher are triggered automatically in Unity when their conditions are met:
Unity automatically detects and performs Dynamic Batching on compatible objects at runtime
SRP batcher automatically batches during render loop when objects use compatible shader variants enabled in the render pipeline settings (Window → Rendering → Render Pipeline → Universal Render Pipeline → General → SRP Batcher)
┌─────────────────────────────────────────────┐ │ R G B A │ │ Position.r Position.g Position.b Depth │ │ 或仅使用 Depth 作为单通道 │ └─────────────────────────────────────────────┘