|
|
- //Update SC
- using UnityEngine;
- using System.Collections;
- [ExecuteInEditMode]
- public class T4MObjSC : MonoBehaviour {
- [HideInInspector]
- public string ConvertType = "";
- [HideInInspector]
- public bool EnabledLODSystem=true;
- [HideInInspector]
- public Vector3[] ObjPosition;
- [HideInInspector]
- public T4MLodObjSC[] ObjLodScript ;
- [HideInInspector]
- public int[] ObjLodStatus; //0=Occlude // 1=LOD1 // 2=LOD=2 // 3=LOD3
- [HideInInspector]
- public float MaxViewDistance= 60.0f;
- [HideInInspector]
- public float LOD2Start = 20.0f;
- [HideInInspector]
- public float LOD3Start = 40.0f;
- [HideInInspector]
- public float Interval = 0.5f;
- [HideInInspector]
- public Transform PlayerCamera;
- private Vector3 OldPlayerPos;
- [HideInInspector]
- public int Mode =1;
- [HideInInspector]
- public int Master;
- [HideInInspector]
- public bool enabledBillboard=true;
- [HideInInspector]
- public Vector3[] BillboardPosition;
- [HideInInspector]
- public float BillInterval = 0.05f;
- [HideInInspector]
- public int[] BillStatus; //0=Occlude // 1=Active
- [HideInInspector]
- public float BillMaxViewDistance= 30.0f;
- [HideInInspector]
- public T4MBillBObjSC[] BillScript ;
- [HideInInspector]
- public bool enabledLayerCul=true;
- [HideInInspector]
- public float BackGroundView = 1000f;
- [HideInInspector]
- public float FarView = 200.0f;
- [HideInInspector]
- public float NormalView = 60.0f;
- [HideInInspector]
- public float CloseView = 30.0f;
- float[] distances = new float[32];
- [HideInInspector]
- public int Axis =0;
- [HideInInspector]
- public bool LODbasedOnScript = true;
- [HideInInspector]
- public bool BilBbasedOnScript = true;
-
- public Material T4MMaterial;
- public MeshFilter T4MMesh;
-
- //ATS
- [HideInInspector]
- public Color TranslucencyColor= new Color(0.73f,0.85f,0.4f,1f);
- [HideInInspector]
- public Vector4 Wind = new Vector4(0.85f,0.075f,0.4f,0.5f);
- [HideInInspector]
- public float WindFrequency = 0.75f;
- [HideInInspector]
- public float GrassWindFrequency = 1.5f;
- [HideInInspector]
- public bool ActiveWind = false;
-
- public bool LayerCullPreview = false;
- public bool LODPreview = false;
- public bool BillboardPreview = false;
-
- public void Awake()
- {
- if (Master ==1){
- if (PlayerCamera == null && Camera.main)
- PlayerCamera = Camera.main.transform;
- else if (PlayerCamera == null && !Camera.main){
- Camera[] Cam = GameObject.FindObjectsOfType(typeof(Camera)) as Camera[];
- for (var b =0; b <Cam.Length;b++){
- if (Cam[b].GetComponent<AudioListener>()){
- PlayerCamera = Cam[b].transform;
- }
- }
- }
- if (enabledLayerCul){
- distances[26] = CloseView;
- distances[27] = NormalView;
- distances[28] = FarView;
- distances[29] = BackGroundView;
- PlayerCamera.GetComponent<Camera>().layerCullDistances = distances;
- }
-
- if (EnabledLODSystem && ObjPosition.Length>0 && Mode ==1){
- if(ObjLodScript[0].gameObject != null){
- if (LODbasedOnScript)
- InvokeRepeating("LODScript", Random.Range(0,Interval), Interval);
- else InvokeRepeating("LODLay", Random.Range(0,Interval), Interval);
- }
- }else if (EnabledLODSystem && ObjPosition.Length>0 && Mode ==2){
- if(ObjLodScript[0] != null){
- for (var i =0; i <ObjPosition.Length;i++){
- if (ObjLodScript[i] !=null){
- if (LODbasedOnScript)
- ObjLodScript[i].ActivateLODScrpt();
- else ObjLodScript[i].ActivateLODLay();
- }
- }
- }
- }
-
- if (enabledBillboard && BillboardPosition.Length>0){
- if(BillScript[0] != null){
- if (BilBbasedOnScript)
- InvokeRepeating("BillScrpt", Random.Range(0,BillInterval), BillInterval);
- else InvokeRepeating("BillLay", Random.Range(0,BillInterval), BillInterval);
- }
- }
- }
- } public Texture2D T4MMaskTex2d;
- public Texture2D T4MMaskTexd;
- void OnGUI(){
- if(Application.isPlaying == false && Master ==1){
- if (LayerCullPreview && enabledLayerCul){
- GUI.color = Color.green;
- GUI.Label(new Rect(0,0,200,200), "LayerCull Preview ON");
- }else{
- GUI.color = Color.red;
- GUI.Label(new Rect(0,0,200,200), "LayerCull Preview OFF");
- }
- if (LODPreview && ObjPosition.Length>0){
- GUI.color = Color.green;
- GUI.Label(new Rect(0,20,200,200), "LOD Preview ON");
- }else if (LODPreview && ObjPosition.Length==0){
- GUI.color = Color.red;
- GUI.Label(new Rect(0,20,200,200), "Activate the LOD First");
- }else{
- GUI.color = Color.red;
- GUI.Label(new Rect(0,20,200,200), "LOD Preview OFF");
- }
- if(BillboardPreview && BillboardPosition.Length>0){
- GUI.color = Color.green;
- GUI.Label(new Rect(0,40,200,200), "Billboard Preview ON");
- }else if (BillboardPreview && BillboardPosition.Length==0){
- GUI.color = Color.red;
- GUI.Label(new Rect(0,40,200,200), "Activate the Billboard First");
- }else{
- GUI.color = Color.red;
- GUI.Label(new Rect(0,40,200,200), "Billboard Preview OFF");
- }
- }
- }
- void LateUpdate () {
- if(ActiveWind){
- Color WindRGBA = Wind * ( (Mathf.Sin(Time.realtimeSinceStartup * WindFrequency)));
- WindRGBA.a = Wind.w;
- Color GrassWindRGBA = Wind * ( (Mathf.Sin(Time.realtimeSinceStartup * GrassWindFrequency)));
- GrassWindRGBA.a = Wind.w;
- Shader.SetGlobalColor("_Wind", WindRGBA);
- Shader.SetGlobalColor("_GrassWind", GrassWindRGBA);
- Shader.SetGlobalColor("_TranslucencyColor", TranslucencyColor);
- Shader.SetGlobalFloat("_TranslucencyViewDependency;", 0.65f);
- }
-
- if (PlayerCamera && Application.isPlaying == false && Master ==1){
- if (LayerCullPreview && enabledLayerCul){
- distances[26] = CloseView;
- distances[27] = NormalView;
- distances[28] = FarView;
- distances[29] = BackGroundView;
- PlayerCamera.GetComponent<Camera>().layerCullDistances = distances;
- }else{
- distances[26] = PlayerCamera.GetComponent<Camera>().farClipPlane;
- distances[27] = PlayerCamera.GetComponent<Camera>().farClipPlane;
- distances[28] = PlayerCamera.GetComponent<Camera>().farClipPlane;
- distances[29] = PlayerCamera.GetComponent<Camera>().farClipPlane;
- PlayerCamera.GetComponent<Camera>().layerCullDistances = distances;
- }
-
- if (LODPreview){
- if (EnabledLODSystem && ObjPosition.Length>0 && Mode ==1){
- if(ObjLodScript[0].gameObject != null){
- if (LODbasedOnScript)
- LODScript();
- else LODLay();
- }
- }else if (EnabledLODSystem && ObjPosition.Length>0 && Mode ==2){
- if(ObjLodScript[0] != null){
- for (var i =0; i <ObjPosition.Length;i++){
- if (ObjLodScript[i] !=null){
- if (LODbasedOnScript)
- ObjLodScript[i].AFLODScrpt();
- else ObjLodScript[i].AFLODLay();
- }
- }
- }
- }
- }
-
- if (BillboardPreview){
- if (enabledBillboard && BillboardPosition.Length>0){
- if(BillScript[0] != null){
- if (BilBbasedOnScript)
- BillScrpt();
- else BillLay();
- }
- }
- }
- }
- }
-
- void BillScrpt()
- {
- for (var j =0; j <BillboardPosition.Length;j++){
-
- if(Vector3.Distance(BillboardPosition[j], PlayerCamera.position) <= BillMaxViewDistance){
- if (BillStatus[j] != 1){
- BillScript[j].Render.enabled = true;
- BillStatus[j] = 1;
- }
- if (Axis == 0)
- BillScript[j].Transf.LookAt(new Vector3 (PlayerCamera.position.x,BillScript[j].Transf.position.y,PlayerCamera.position.z) , Vector3.up);
- else
- BillScript[j].Transf.LookAt(PlayerCamera.position, Vector3.up);
-
- }else if (BillStatus[j] != 0 && !BillScript[j].Render.enabled){
- BillScript[j].Render.enabled = false;
- BillStatus[j] = 0;
- }
- }
- }
-
- void BillLay()
- {
- for (var j =0; j <BillboardPosition.Length;j++){
- int Lay = BillScript[j].gameObject.layer;
- if(Vector3.Distance(BillboardPosition[j], PlayerCamera.position) <= distances[Lay]){
- if (Axis == 0)
- BillScript[j].Transf.LookAt(new Vector3 (PlayerCamera.position.x,BillScript[j].Transf.position.y,PlayerCamera.position.z) , Vector3.up);
- else
- BillScript[j].Transf.LookAt(PlayerCamera.position, Vector3.up);
- }
- }
- }
-
-
- void LODScript()
- {
- if (OldPlayerPos == PlayerCamera.position)
- return;
-
- OldPlayerPos = PlayerCamera.position;
- for (var i =0; i <ObjPosition.Length;i++){
-
- float distanceFromCamera = Vector3.Distance(new Vector3(ObjPosition[i].x,PlayerCamera.position.y,ObjPosition[i].z), PlayerCamera.position);
- if(distanceFromCamera <= MaxViewDistance ){
- if(distanceFromCamera < LOD2Start && ObjLodStatus[i] != 1){
- ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD3.enabled = false;
- ObjLodScript[i].LOD1.enabled = true;
- ObjLodStatus[i]=1;
- }else if (distanceFromCamera >= LOD2Start && distanceFromCamera < LOD3Start && ObjLodStatus[i] != 2){
- ObjLodScript[i].LOD1.enabled = ObjLodScript[i].LOD3.enabled = false;
- ObjLodScript[i].LOD2.enabled = true;
- ObjLodStatus[i]=2;
- }else if (distanceFromCamera >= LOD3Start && ObjLodStatus[i] != 3){
- ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD1.enabled = false;
- ObjLodScript[i].LOD3.enabled = true;
- ObjLodStatus[i]=3;
- }
- }else if(ObjLodStatus[i] != 0){
- ObjLodScript[i].LOD1.enabled = ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD3.enabled = false;
- ObjLodStatus[i]=0;
- }
- }
- }
-
- void LODLay()
- {
- if (OldPlayerPos == PlayerCamera.position)
- return;
-
- OldPlayerPos = PlayerCamera.position;
-
- for (var i =0; i <ObjPosition.Length;i++){
- float distanceFromCamera = Vector3.Distance(new Vector3(ObjPosition[i].x,PlayerCamera.position.y,ObjPosition[i].z), PlayerCamera.position);
-
- int Lay2 = ObjLodScript[i].gameObject.layer;
- if(distanceFromCamera <= distances[Lay2]+5){
- if(distanceFromCamera < LOD2Start && ObjLodStatus[i] != 1){
- ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD3.enabled = false;
- ObjLodScript[i].LOD1.enabled = true;
- ObjLodStatus[i]=1;
- }else if (distanceFromCamera >= LOD2Start && distanceFromCamera < LOD3Start && ObjLodStatus[i] != 2){
- ObjLodScript[i].LOD1.enabled = ObjLodScript[i].LOD3.enabled = false;
- ObjLodScript[i].LOD2.enabled = true;
- ObjLodStatus[i]=2;
- }else if (distanceFromCamera >= LOD3Start && ObjLodStatus[i] != 3){
- ObjLodScript[i].LOD2.enabled = ObjLodScript[i].LOD1.enabled = false;
- ObjLodScript[i].LOD3.enabled = true;
- ObjLodStatus[i]=3;
- }
- }
- }
- }
- }
|