- Unity Game Optimization
- Dr. Davide Aversa Chris Dickinson
- 264字
- 2021-06-24 12:13:07
Disabling objects by distance
In other situations, we may want components or GameObjects to be disabled after they are far enough away from the player such that they may be barely visible, but too far away to matter. A good candidate for this type of activity is roaming Non-Player Character creatures: we want to see them at a distance, but where we don't need them to process anything, and therefore they can sit idle until we get closer.
The following code is a simple coroutine that periodically checks the total distance from a given target object and disables itself if it strays too far away from it:
[SerializeField] GameObject _target;
[SerializeField] float _maxDistance;
[SerializeField] int _coroutineFrameDelay;
void Start() {
StartCoroutine(DisableAtADistance());
}
IEnumerator DisableAtADistance() {
while(true) {
float distSqrd = (transform.position - _target.transform.position).sqrMagnitude;
if (distSqrd < _maxDistance * _maxDistance) {
enabled = true;
} else {
enabled = false;
}
for (int i = 0; i < _coroutineFrameDelay; ++i) {
yield return new WaitForEndOfFrame();
}
}
}
We should assign the player's character object (or whatever object we want it to compare with) to the _target field in the Inspector window, define the maximum distance in _maxDistance, and modify the frequency with which the coroutine is invoked using the _coroutineFrameDelay field. Anytime the object goes further than _maxDistance distance away from the object assigned to _target, it will be disabled. It will be re-enabled if it returns within that distance.
A subtle performance-enhancing feature of this implementation is comparing against distance-squared instead of the raw distance. This leads us conveniently to our next section.
- Cross-platform Desktop Application Development:Electron,Node,NW.js,and React
- Python網絡爬蟲從入門到實踐(第2版)
- VSTO開發入門教程
- Spring Cloud、Nginx高并發核心編程
- Object-Oriented JavaScript(Second Edition)
- Raspberry Pi 2 Server Essentials
- Kinect for Windows SDK Programming Guide
- 大學計算機基礎實驗指導
- 詳解MATLAB圖形繪制技術
- Red Hat Enterprise Linux Troubleshooting Guide
- C++程序設計教程(第2版)
- Flink技術內幕:架構設計與實現原理
- Advanced Python Programming
- Java從入門到精通(視頻實戰版)
- Sitecore Cookbook for Developers