|
?/????
?????????????Unity+
https://zhuanlan.zhihu.com/gdguide
????Unity???????(?)
????
?????????????????????????????????????????????
????????5???????????????????????????????
?????????????????????????
?????????????????????????????????Substitute????????????????????
???????DoorManager?????????????????
- <p>public class DoorManager:MonoBehaviour</p><p>
- </p><p>{</p><p>
- </p><p>public Transform mainCamera;//????</p><p>
- </p><p>public Transform[]substitutes;//??</p><p>
- </p><p>public Transform[]Cameras;//?????</p><p>
- </p><p>public Door[]doors;//???</p>
复制代码
???????????
???????????????????
- <p>void SetSubstitutePos()//?????????</p><p>
- </p><p>{</p><p>
- </p><p>//????????????????</p><p>
- </p><p>substitutes[0].position=substitutes[1].position=mainCamera.position;</p><p>
- </p><p>substitutes[0].rotation=substitutes[1].rotation=mainCamera.rotation;</p><p>
- </p><p>//??????????????????????</p><p>
- </p><p>Cameras[1].localPosition=substitutes[0].localPosition;</p><p>
- </p><p>Cameras[1].localRotation=substitutes[0].localRotation;</p><p>
- </p><p>Cameras[0].localPosition=substitutes[1].localPosition;</p><p>
- </p><p>Cameras[0].localRotation=substitutes[1].localRotation;</p><p>
- </p><p>//????????????????????</p><p>
- </p><p>substitutes[2].position=Cameras[1].position;</p><p>
- </p><p>substitutes[2].rotation=Cameras[1].rotation;</p><p>
- </p><p>substitutes[3].position=Cameras[0].position;</p><p>
- </p><p>substitutes[3].rotation=Cameras[0].rotation;</p><p>
- </p><p>//??????????????????????</p><p>
- </p><p>Cameras[2].localPosition=substitutes[3].localPosition;</p><p>
- </p><p>Cameras[2].localRotation=substitutes[3].localRotation;</p><p>
- </p><p>Cameras[3].localPosition=substitutes[2].localPosition;</p><p>
- </p><p>Cameras[3].localRotation=substitutes[2].localRotation;</p><p>
- </p><p>}</p>
复制代码
?????LateUpdate????
????????????????????????????????????????????????????????
?????
??????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????Door????????????
- <p>public class Door:MonoBehaviour</p><p>
- </p><p>{</p><p>
- </p><p>public float angle;//????</p><p>
- </p><p>public void OpenDoor(Vector3 pos,Quaternion rota)//????????????</p><p>
- </p><p>{</p><p>
- </p><p>//?????????</p><p>
- </p><p>transform.position=pos;</p><p>
- </p><p>transform.rotation=rota;</p><p>
- </p><p>transform.Rotate(0,angle,0);</p><p>
- </p><p>}</p>
复制代码
??????????????????angle?????????180????????????DoorManager??????
- <p>Transform[]walls=new Transform[2];//??????????</p><p>
- </p><p>int number=0;//???</p><p>
- </p><p>public void AddWall(Transform wall)//?????</p><p>
- </p><p>{</p><p>
- </p><p>int i=number%2;</p><p>
- </p><p>if(walls<i>!=null)//?????????????</p><p>
- </p><p>ShowWall(walls<i>,true);</p><p>
- </p><p>walls<i>=wall;</p><p>
- </p><p>if(number>0)</p><p>
- </p><p>{</p><p>
- </p><p>ShowWall(walls<i>,false);//????</p><p>
- </p><p>if(number==1)</p><p>
- </p><p>ShowWall(walls[0],false);</p><p>
- </p><p>}</p><p>
- </p><p>OpenDoor(i);//?????</p><p>
- </p><p>number++;</p><p>
- </p><p>}</p><p>
- </p><p>void ShowWall(Transform wall,bool b)//???</p><p>
- </p><p>{</p><p>
- </p><p>wall.GetComponent<BoxCollider>().isTrigger=!b;//?????</p><p>
- </p><p>wall.GetComponent<SpriteRenderer>().enabled=b;//?????</p><p>
- </p><p>}</p><p>
- </p><p>void OpenDoor(int i)//?????</p><p>
- </p><p>{</p><p>
- </p><p>doors<i>.OpenDoor(walls<i>.position,walls<i>.rotation);</p><p>
- </p><p>pm.startColor=i==0?Color.red:Color.blue;</p><p>
- </p><p>}</p>
复制代码
AddWall?????????????
??????????????????????????????????????????????????????????????????
?????????????????????????????????????????
- <p>public class Bullet:MonoBehaviour//??</p><p>
- </p><p>{</p><p>
- </p><p>public float speed;</p><p>
- </p><p>Rigidbody rig;</p><p>
- </p><p>DoorManager dm;//??????</p><p>
- </p><p>Transform wall;</p><p>
- </p><p>bool open=true;//????????????</p><p>
- </p><p>void Start()</p><p>
- </p><p>{</p><p>
- </p><p>rig=GetComponent<Rigidbody>();</p><p>
- </p><p>dm=FindObjectOfType<DoorManager>();</p><p>
- </p><p>}</p><p>
- </p><p>void Update()</p><p>
- </p><p>{</p><p>
- </p><p>rig.velocity=transform.forward*Time.deltaTime*speed;//??</p><p>
- </p><p>//??????????????????????</p><p>
- </p><p>if(Mathf.Abs(transform.position.z)>8||Mathf.Abs(transform.position.x)>5)</p><p>
- </p><p>gameObject.SetActive(false);</p><p>
- </p><p>}</p><p>
- </p><p>void OnCollisionEnter(Collision other)//????</p><p>
- </p><p>{</p><p>
- </p><p>if(other.collider.CompareTag("Wall"))</p><p>
- </p><p>{</p><p>
- </p><p>//???????????????????????</p><p>
- </p><p>if(open&&wall!=other.transform)</p><p>
- </p><p>{</p><p>
- </p><p>open=false;</p><p>
- </p><p>wall=other.transform;</p><p>
- </p><p>dm.AddWall(other.transform);</p><p>
- </p><p>Invoke("ColdOpen",0.2f);//0.2??????</p><p>
- </p><p>}</p><p>
- </p><p>}</p><p>
- </p><p>gameObject.SetActive(false);</p><p>
- </p><p>}</p><p>
- </p><p>void ColdOpen()</p><p>
- </p><p>{</p><p>
- </p><p>open=true;</p><p>
- </p><p>}</p>
复制代码
???????????DoorManager???????????????
????
?????????????????????
?????????????????????????????????????????????????????????????
?????????????????????????????????????????substitute????substitute?????????????????????substitute???????????????????DoorManager????
- <p>void DeliveryPlayer()//????</p><p>
- </p><p>{</p><p>
- </p><p>if(number>=2)//???????????</p><p>
- </p><p>{</p><p>
- </p><p>DeliveryCondition(0,substitutes[0].localPosition.z>0);</p><p>
- </p><p>DeliveryCondition(1,substitutes[1].localPosition.z<0);</p><p>
- </p><p>}</p><p>
- </p><p>}</p><p>
- </p><p>void DeliveryCondition(int i,bool b)//??????</p><p>
- </p><p>{</p><p>
- </p><p>int j=Mathf.Abs(i-1);//???????</p><p>
- </p><p>//????????????(???)?????</p><p>
- </p><p>if(Mathf.Abs(substitutes<i>.localPosition.x)<0.3f&&Mathf.Abs(substitutes<i>.localPosition.y)<1&&b)</p><p>
- </p><p>{</p><p>
- </p><p>//????????????</p><p>
- </p><p>player.position=Cameras[j].position;</p><p>
- </p><p>Quaternion r=Cameras[j].rotation;</p><p>
- </p><p>player.rotation=new Quaternion(player.rotation.x,r.y,player.rotation.z,r.w);</p><p>
- </p><p>}</p><p>
- </p><p>}</p><p></p>
复制代码
?DeliveryPlayer?????LateUpdate??????
????
???????????????????????????????????????????????????????????????????????????????????????????????????????DoorManager??
- <p>public void DeliveryBullet(Transform bullet,Transform wall)//????</p><p>
- </p><p>{</p><p>
- </p><p>bullet.parent=wall;//???????????</p><p>
- </p><p>//???????????</p><p>
- </p><p>Vector3 lp=bullet.localPosition;</p><p>
- </p><p>Quaternion lr=bullet.localRotation;</p><p>
- </p><p>//????????????</p><p>
- </p><p>if(wall==walls[0])</p><p>
- </p><p>bullet.parent=walls[1];</p><p>
- </p><p>else</p><p>
- </p><p>bullet.parent=walls[0];</p><p>
- </p><p>//????????????????</p><p>
- </p><p>bullet.localPosition=new Vector3(-lp.x,lp.y,-lp.z);</p><p>
- </p><p>bullet.localRotation=lr;</p><p>
- </p><p>bullet.Rotate(0,180,0,Space.World);</p><p>
- </p><p>}</p><p>
- </p><p>??????????????????</p><p>
- </p><p>void OnTriggerEnter(Collider other)//????</p><p>
- </p><p>{</p><p>
- </p><p>wall=other.transform;//???????</p><p>
- </p><p>if(wall!=transform.parent)//?????(?)????????</p><p>
- </p><p>dm.DeliveryBullet(transform,wall);//????</p><p>
- </p><p>}</p><p></p>
复制代码
?????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????Door???????????
- <p>Vector3 pos;//??</p><p>
- </p><p>Vector3 scale;//??</p><p>
- </p><p>public float angle;//????</p><p>
- </p><p>public Transform CopyDoor;//??????</p><p>
- </p><p>void Start()</p><p>
- </p><p>{</p><p>
- </p><p>//?????????</p><p>
- </p><p>pos=transform.position;</p><p>
- </p><p>scale=transform.localScale;</p><p>
- </p><p>}</p><p>
- </p><p>void Update()</p><p>
- </p><p>{</p><p>
- </p><p>//??????</p><p>
- </p><p>if(pos!=transform.position)</p><p>
- </p><p>{</p><p>
- </p><p>//?????????</p><p>
- </p><p>pos=transform.position;</p><p>
- </p><p>transform.localScale=Vector3.zero;</p><p>
- </p><p>}</p><p>
- </p><p>//??????</p><p>
- </p><p>transform.localScale=Vector3.Lerp(transform.localScale,scale,Time.deltaTime*10);</p><p>
- </p><p>if(CopyDoor.gameObject.activeInHierarchy)//?????????????</p><p>
- </p><p>ShowPrefabDoor();</p><p>
- </p><p>}</p><p>
- </p><p>void DisplayDoor()//????</p><p>
- </p><p>{</p><p>
- </p><p>//??????????????????</p><p>
- </p><p>CopyDoor.position=pos;</p><p>
- </p><p>CopyDoor.rotation=transform.rotation;</p><p>
- </p><p>CopyDoor.localScale=scale;</p><p>
- </p><p>CopyDoor.gameObject.SetActive(true);</p><p>
- </p><p>}</p><p>
- </p><p>void ShowPrefabDoor()//??????</p><p>
- </p><p>{</p><p>
- </p><p>//????</p><p>
- </p><p>CopyDoor.localScale=Vector3.Lerp(CopyDoor.localScale,Vector3.zero,Time.deltaTime*10);</p><p>
- </p><p>if(CopyDoor.localScale.x<0.1f)//?????????</p><p>
- </p><p>CopyDoor.gameObject.SetActive(false);</p><p>
- </p><p>}</p>
复制代码
????????????
??????????????????????????????
??
???????????????????????????
???DoorManager????????????????????????????????
- <p>void SwitchCameraDepth()//???????????</p><p>
- </p><p>{</p><p>
- </p><p>//????????????????????????Z????,??????????</p><p>
- </p><p>if(Mathf.Abs(substitutes[0].localPosition.y-substitutes[1].localPosition.y)<0.1f)</p><p>
- </p><p>{</p><p>
- </p><p>if(Mathf.Abs(substitutes[0].localPosition.z)<Mathf.Abs(substitutes[1].localPosition.z))</p><p>
- </p><p>SetDepth(Cameras[0],Cameras[1]);</p><p>
- </p><p>else</p><p>
- </p><p>SetDepth(Cameras[1],Cameras[0]);</p><p>
- </p><p>}</p><p>
- </p><p>else//?????????????????Y????,?????????????</p><p>
- </p><p>{</p><p>
- </p><p>if(Mathf.Abs(substitutes[0].localPosition.y)<Mathf.Abs(substitutes[1].localPosition.y))</p><p>
- </p><p>SetDepth(Cameras[0],Cameras[1]);</p><p>
- </p><p>else</p><p>
- </p><p>SetDepth(Cameras[1],Cameras[0]);</p><p>
- </p><p>}</p><p>
- </p><p>}</p><p>
- </p><p>void SetDepth(Transform camera1,Transform camera2)//???????????????</p><p>
- </p><p>{</p><p>
- </p><p>camera1.GetComponent<Camera>().depth=-3;</p><p>
- </p><p>camera2.GetComponent<Camera>().depth=-2;</p><p>
- </p><p>}</p><p></p>
复制代码
????LateUpdate???????????????
???????????????????????????
???????????????
?????????????????????????????????????????????????????????????????????
????????????????????????????????????
??????????
?????????????????????????????????????????????
??????????????????????????????
https://github.com/wushupei/TransmissionGate.gitgithub.com
???????????????Unity?????????
http://levelpp.com/
????????
https://space.bilibili.com/38043731/#/
??QQ????869551769
|
|