源战役客户端
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

312 řádky
10 KiB

před 1 měsícem
  1. //Update SC
  2. using UnityEngine;
  3. using System.Collections;
  4. [ExecuteInEditMode]
  5. public class T4MObjSC : MonoBehaviour {
  6. [HideInInspector]
  7. public string ConvertType = "";
  8. [HideInInspector]
  9. public bool EnabledLODSystem=true;
  10. [HideInInspector]
  11. public Vector3[] ObjPosition;
  12. [HideInInspector]
  13. public T4MLodObjSC[] ObjLodScript ;
  14. [HideInInspector]
  15. public int[] ObjLodStatus; //0=Occlude // 1=LOD1 // 2=LOD=2 // 3=LOD3
  16. [HideInInspector]
  17. public float MaxViewDistance= 60.0f;
  18. [HideInInspector]
  19. public float LOD2Start = 20.0f;
  20. [HideInInspector]
  21. public float LOD3Start = 40.0f;
  22. [HideInInspector]
  23. public float Interval = 0.5f;
  24. [HideInInspector]
  25. public Transform PlayerCamera;
  26. private Vector3 OldPlayerPos;
  27. [HideInInspector]
  28. public int Mode =1;
  29. [HideInInspector]
  30. public int Master;
  31. [HideInInspector]
  32. public bool enabledBillboard=true;
  33. [HideInInspector]
  34. public Vector3[] BillboardPosition;
  35. [HideInInspector]
  36. public float BillInterval = 0.05f;
  37. [HideInInspector]
  38. public int[] BillStatus; //0=Occlude // 1=Active
  39. [HideInInspector]
  40. public float BillMaxViewDistance= 30.0f;
  41. [HideInInspector]
  42. public T4MBillBObjSC[] BillScript ;
  43. [HideInInspector]
  44. public bool enabledLayerCul=true;
  45. [HideInInspector]
  46. public float BackGroundView = 1000f;
  47. [HideInInspector]
  48. public float FarView = 200.0f;
  49. [HideInInspector]
  50. public float NormalView = 60.0f;
  51. [HideInInspector]
  52. public float CloseView = 30.0f;
  53. float[] distances = new float[32];
  54. [HideInInspector]
  55. public int Axis =0;
  56. [HideInInspector]
  57. public bool LODbasedOnScript = true;
  58. [HideInInspector]
  59. public bool BilBbasedOnScript = true;
  60. public Material T4MMaterial;
  61. public MeshFilter T4MMesh;
  62. //ATS
  63. [HideInInspector]
  64. public Color TranslucencyColor= new Color(0.73f,0.85f,0.4f,1f);
  65. [HideInInspector]
  66. public Vector4 Wind = new Vector4(0.85f,0.075f,0.4f,0.5f);
  67. [HideInInspector]
  68. public float WindFrequency = 0.75f;
  69. [HideInInspector]
  70. public float GrassWindFrequency = 1.5f;
  71. [HideInInspector]
  72. public bool ActiveWind = false;
  73. public bool LayerCullPreview = false;
  74. public bool LODPreview = false;
  75. public bool BillboardPreview = false;
  76. public void Awake()
  77. {
  78. if (Master ==1){
  79. if (PlayerCamera == null && Camera.main)
  80. PlayerCamera = Camera.main.transform;
  81. else if (PlayerCamera == null && !Camera.main){
  82. Camera[] Cam = GameObject.FindObjectsOfType(typeof(Camera)) as Camera[];
  83. for (var b =0; b <Cam.Length;b++){
  84. if (Cam[b].GetComponent<AudioListener>()){
  85. PlayerCamera = Cam[b].transform;
  86. }
  87. }
  88. }
  89. if (enabledLayerCul){
  90. distances[26] = CloseView;
  91. distances[27] = NormalView;
  92. distances[28] = FarView;
  93. distances[29] = BackGroundView;
  94. PlayerCamera.GetComponent<Camera>().layerCullDistances = distances;
  95. }
  96. if (EnabledLODSystem && ObjPosition.Length>0 && Mode ==1){
  97. if(ObjLodScript[0].gameObject != null){
  98. if (LODbasedOnScript)
  99. InvokeRepeating("LODScript", Random.Range(0,Interval), Interval);
  100. else InvokeRepeating("LODLay", Random.Range(0,Interval), Interval);
  101. }
  102. }else if (EnabledLODSystem && ObjPosition.Length>0 && Mode ==2){
  103. if(ObjLodScript[0] != null){
  104. for (var i =0; i <ObjPosition.Length;i++){
  105. if (ObjLodScript[i] !=null){
  106. if (LODbasedOnScript)
  107. ObjLodScript[i].ActivateLODScrpt();
  108. else ObjLodScript[i].ActivateLODLay();
  109. }
  110. }
  111. }
  112. }
  113. if (enabledBillboard && BillboardPosition.Length>0){
  114. if(BillScript[0] != null){
  115. if (BilBbasedOnScript)
  116. InvokeRepeating("BillScrpt", Random.Range(0,BillInterval), BillInterval);
  117. else InvokeRepeating("BillLay", Random.Range(0,BillInterval), BillInterval);
  118. }
  119. }
  120. }
  121. } public Texture2D T4MMaskTex2d;
  122. public Texture2D T4MMaskTexd;
  123. void OnGUI(){
  124. if(Application.isPlaying == false && Master ==1){
  125. if (LayerCullPreview && enabledLayerCul){
  126. GUI.color = Color.green;
  127. GUI.Label(new Rect(0,0,200,200), "LayerCull Preview ON");
  128. }else{
  129. GUI.color = Color.red;
  130. GUI.Label(new Rect(0,0,200,200), "LayerCull Preview OFF");
  131. }
  132. if (LODPreview && ObjPosition.Length>0){
  133. GUI.color = Color.green;
  134. GUI.Label(new Rect(0,20,200,200), "LOD Preview ON");
  135. }else if (LODPreview && ObjPosition.Length==0){
  136. GUI.color = Color.red;
  137. GUI.Label(new Rect(0,20,200,200), "Activate the LOD First");
  138. }else{
  139. GUI.color = Color.red;
  140. GUI.Label(new Rect(0,20,200,200), "LOD Preview OFF");
  141. }
  142. if(BillboardPreview && BillboardPosition.Length>0){
  143. GUI.color = Color.green;
  144. GUI.Label(new Rect(0,40,200,200), "Billboard Preview ON");
  145. }else if (BillboardPreview && BillboardPosition.Length==0){
  146. GUI.color = Color.red;
  147. GUI.Label(new Rect(0,40,200,200), "Activate the Billboard First");
  148. }else{
  149. GUI.color = Color.red;
  150. GUI.Label(new Rect(0,40,200,200), "Billboard Preview OFF");
  151. }
  152. }
  153. }
  154. void LateUpdate () {
  155. if(ActiveWind){
  156. Color WindRGBA = Wind * ( (Mathf.Sin(Time.realtimeSinceStartup * WindFrequency)));
  157. WindRGBA.a = Wind.w;
  158. Color GrassWindRGBA = Wind * ( (Mathf.Sin(Time.realtimeSinceStartup * GrassWindFrequency)));
  159. GrassWindRGBA.a = Wind.w;
  160. Shader.SetGlobalColor("_Wind", WindRGBA);
  161. Shader.SetGlobalColor("_GrassWind", GrassWindRGBA);
  162. Shader.SetGlobalColor("_TranslucencyColor", TranslucencyColor);
  163. Shader.SetGlobalFloat("_TranslucencyViewDependency;", 0.65f);
  164. }
  165. if (PlayerCamera && Application.isPlaying == false && Master ==1){
  166. if (LayerCullPreview && enabledLayerCul){
  167. distances[26] = CloseView;
  168. distances[27] = NormalView;
  169. distances[28] = FarView;
  170. distances[29] = BackGroundView;
  171. PlayerCamera.GetComponent<Camera>().layerCullDistances = distances;
  172. }else{
  173. distances[26] = PlayerCamera.GetComponent<Camera>().farClipPlane;
  174. distances[27] = PlayerCamera.GetComponent<Camera>().farClipPlane;
  175. distances[28] = PlayerCamera.GetComponent<Camera>().farClipPlane;
  176. distances[29] = PlayerCamera.GetComponent<Camera>().farClipPlane;
  177. PlayerCamera.GetComponent<Camera>().layerCullDistances = distances;
  178. }
  179. if (LODPreview){
  180. if (EnabledLODSystem && ObjPosition.Length>0 && Mode ==1){
  181. if(ObjLodScript[0].gameObject != null){
  182. if (LODbasedOnScript)
  183. LODScript();
  184. else LODLay();
  185. }
  186. }else if (EnabledLODSystem && ObjPosition.Length>0 && Mode ==2){
  187. if(ObjLodScript[0] != null){
  188. for (var i =0; i <ObjPosition.Length;i++){
  189. if (ObjLodScript[i] !=null){
  190. if (LODbasedOnScript)
  191. ObjLodScript[i].AFLODScrpt();
  192. else ObjLodScript[i].AFLODLay();
  193. }
  194. }
  195. }
  196. }
  197. }
  198. if (BillboardPreview){
  199. if (enabledBillboard && BillboardPosition.Length>0){
  200. if(BillScript[0] != null){
  201. if (BilBbasedOnScript)
  202. BillScrpt();
  203. else BillLay();
  204. }
  205. }
  206. }
  207. }
  208. }
  209. void BillScrpt()
  210. {
  211. for (var j =0; j <BillboardPosition.Length;j++){
  212. if(Vector3.Distance(BillboardPosition[j], PlayerCamera.position) <= BillMaxViewDistance){
  213. if (BillStatus[j] != 1){
  214. BillScript[j].Render.enabled = true;
  215. BillStatus[j] = 1;
  216. }
  217. if (Axis == 0)
  218. BillScript[j].Transf.LookAt(new Vector3 (PlayerCamera.position.x,BillScript[j].Transf.position.y,PlayerCamera.position.z) , Vector3.up);
  219. else
  220. BillScript[j].Transf.LookAt(PlayerCamera.position, Vector3.up);
  221. }else if (BillStatus[j] != 0 && !BillScript[j].Render.enabled){
  222. BillScript[j].Render.enabled = false;
  223. BillStatus[j] = 0;
  224. }
  225. }
  226. }
  227. void BillLay()
  228. {
  229. for (var j =0; j <BillboardPosition.Length;j++){
  230. int Lay = BillScript[j].gameObject.layer;
  231. if(Vector3.Distance(BillboardPosition[j], PlayerCamera.position) <= distances[Lay]){
  232. if (Axis == 0)
  233. BillScript[j].Transf.LookAt(new Vector3 (PlayerCamera.position.x,BillScript[j].Transf.position.y,PlayerCamera.position.z) , Vector3.up);
  234. else
  235. BillScript[j].Transf.LookAt(PlayerCamera.position, Vector3.up);
  236. }
  237. }
  238. }
  239. void LODScript()
  240. {
  241. if (OldPlayerPos == PlayerCamera.position)
  242. return;
  243. OldPlayerPos = PlayerCamera.position;
  244. for (var i =0; i <ObjPosition.Length;i++){
  245. float distanceFromCamera = Vector3.Distance(new Vector3(ObjPosition[i].x,PlayerCamera.position.y,ObjPosition[i].z), PlayerCamera.position);
  246. if(distanceFromCamera <= MaxViewDistance ){
  247. if(distanceFromCamera < LOD2Start && ObjLodStatus[i] != 1){
  248. ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD3.enabled = false;
  249. ObjLodScript[i].LOD1.enabled = true;
  250. ObjLodStatus[i]=1;
  251. }else if (distanceFromCamera >= LOD2Start && distanceFromCamera < LOD3Start && ObjLodStatus[i] != 2){
  252. ObjLodScript[i].LOD1.enabled = ObjLodScript[i].LOD3.enabled = false;
  253. ObjLodScript[i].LOD2.enabled = true;
  254. ObjLodStatus[i]=2;
  255. }else if (distanceFromCamera >= LOD3Start && ObjLodStatus[i] != 3){
  256. ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD1.enabled = false;
  257. ObjLodScript[i].LOD3.enabled = true;
  258. ObjLodStatus[i]=3;
  259. }
  260. }else if(ObjLodStatus[i] != 0){
  261. ObjLodScript[i].LOD1.enabled = ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD3.enabled = false;
  262. ObjLodStatus[i]=0;
  263. }
  264. }
  265. }
  266. void LODLay()
  267. {
  268. if (OldPlayerPos == PlayerCamera.position)
  269. return;
  270. OldPlayerPos = PlayerCamera.position;
  271. for (var i =0; i <ObjPosition.Length;i++){
  272. float distanceFromCamera = Vector3.Distance(new Vector3(ObjPosition[i].x,PlayerCamera.position.y,ObjPosition[i].z), PlayerCamera.position);
  273. int Lay2 = ObjLodScript[i].gameObject.layer;
  274. if(distanceFromCamera <= distances[Lay2]+5){
  275. if(distanceFromCamera < LOD2Start && ObjLodStatus[i] != 1){
  276. ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD3.enabled = false;
  277. ObjLodScript[i].LOD1.enabled = true;
  278. ObjLodStatus[i]=1;
  279. }else if (distanceFromCamera >= LOD2Start && distanceFromCamera < LOD3Start && ObjLodStatus[i] != 2){
  280. ObjLodScript[i].LOD1.enabled = ObjLodScript[i].LOD3.enabled = false;
  281. ObjLodScript[i].LOD2.enabled = true;
  282. ObjLodStatus[i]=2;
  283. }else if (distanceFromCamera >= LOD3Start && ObjLodStatus[i] != 3){
  284. ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD1.enabled = false;
  285. ObjLodScript[i].LOD3.enabled = true;
  286. ObjLodStatus[i]=3;
  287. }
  288. }
  289. }
  290. }
  291. }