Adaptive Cutaway in Unity
MainScript.cs
Go to the documentation of this file.
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4 using UnityEngine.UI;
5 
6 public class MainScript : MonoBehaviour
7 {
8  public GameObject houseModel;
9  public Material cutMaterial;
10 
11  public Shader coneCutoutShader;
12  public Slider slider;
13 
14 
15  private float speed = 5;
16  private float rotateSpeed = 1;
17 
18  private float rotX;
19  private float rotY;
20 
21  private float moveFB;
22  private float moveLR;
23 
24  public GameObject player;
25 
29  void Start()
30  {
31  Cursor.visible = false;
32  Shader.SetGlobalVector("_MyBoxWorldPos", new Vector4(3.39f, -61.63f, -34.26f, 1f));
33  slider = GameObject.Find("Slider").GetComponent<Slider>();
34  Shader.SetGlobalFloat("_MyConeAngle", slider.value);
35  slider.enabled = false;
36 
37  for (int i = 0; i < houseModel.transform.childCount; i++)
38  {
39  GameObject houseObj = houseModel.transform.GetChild(i).gameObject;
40  MeshRenderer objRenderer = houseObj.GetComponent<MeshRenderer>();
41  if (objRenderer == null) continue;
42 
43  Material[] originalMaterials = new Material[objRenderer.materials.Length];
44  Material[] cutoutMaterials = new Material[objRenderer.materials.Length];
45  for (int j = 0; j < objRenderer.materials.Length; j++)
46  {
47  // set coneCutoutShader for every material
48  objRenderer.materials[j].shader = coneCutoutShader;
49  }
50  }
51  }
52 
56  void Update()
57  {
58  if (Input.GetKey(KeyCode.LeftControl))
59  {
60  Cursor.visible = true;
61  slider.enabled = true;
62  Shader.SetGlobalFloat("_MyConeAngle", GameObject.Find("Slider").GetComponent<Slider>().value);
63 
64  }
65  else
66  {
67  slider.enabled = false;
68  Cursor.visible = false;
69 
70  moveFB = Input.GetAxis("Vertical") * speed;
71  moveLR = Input.GetAxis("Horizontal") * speed;
72 
73  // rotate view
74  rotX = Input.GetAxis("Mouse X") * rotateSpeed;
75  rotY = Input.GetAxis("Mouse Y") * rotateSpeed;
76 
77  Vector3 movement = new Vector3(moveFB, 0, -moveLR);
78 
79  transform.Rotate(-rotY, 0, 0);
80 
81  player.transform.Rotate(0, rotX, 0);
82  player.transform.Translate(movement * Time.deltaTime);
83  }
84 
85 
86 
87  if (Input.GetKey("q"))
88  {
89  player.transform.Translate(new Vector3(0, 5, 0) * Time.deltaTime);
90  }
91  if (Input.GetKey("y"))
92  {
93  player.transform.Translate(new Vector3(0, -5, 0) * Time.deltaTime);
94  }
95 
96  }
97 }
float moveFB
Definition: MainScript.cs:21
float rotateSpeed
Definition: MainScript.cs:16
float moveLR
Definition: MainScript.cs:22
GameObject houseModel
Definition: MainScript.cs:8
void Update()
Definition: MainScript.cs:56
float speed
Definition: MainScript.cs:15
void Start()
Definition: MainScript.cs:29
float rotX
Definition: MainScript.cs:18
GameObject player
Definition: MainScript.cs:24
Shader coneCutoutShader
Definition: MainScript.cs:11
float rotY
Definition: MainScript.cs:19
Material cutMaterial
Definition: MainScript.cs:9
Slider slider
Definition: MainScript.cs:12