Example #1
0
    private void OnTriggerExit(Collider other)
    {
        if (Fail)
        {
            if (storage.Player.transform.parent != transform.parent)
            {
                return;
            }
            storage.Player.transform.SetParent(transform.parent.parent.parent);
            storage.PlayerStat.IsGrounded = false;
            storage.PlayerStat.stat       = VStat.Falling;
            return;
        }
        storage.PresentFall.Value.transform.SetParent(transform);
        storage.PresentFall.Value.transform.localPosition = Vector3.zero;
        FallingPart  = storage.PresentFall.Value;
        FallFilter   = storage.PresentInfo.Value.FallFilter;
        FallCollider = storage.PresentInfo.Value.FallCollider;
        storage.RenewFall();

        var Slide = (other.transform.position - transform.position);

        //这里要分两种情况,垂直X的和垂直Z的 先写了垂直Z的
        if (other.transform.parent.localRotation.eulerAngles.y == 90f)
        {
            OnCutZ(Slide);
            storage.RenewMesh(CompareMeshParaZ(MeshA, MeshB), StayMesh.mesh);
        }
        else
        {
            OnCutX(Slide);
            storage.RenewMesh(CompareMeshParaX(MeshA, MeshB), StayMesh.mesh);
        }
        FallFilter.mesh         = FallMesh;
        FallCollider.sharedMesh = FallMesh;
        FallCollider.convex     = true;
        FallingPart.SetActive(true);
        StartCoroutine(FallRecycle(FallingPart));
        //激活这个子物体,几秒后再关掉
        //关掉的时间应该小于第二次碰到激光的时间
        //或者建立第三个对象池用于存储fallingparts?
        storage.RenewMesh(StayMesh.mesh, MeshA);
        storage.RenewMesh(StayMesh.mesh, MeshB);
        StayMeshCollider.sharedMesh = StayMesh.mesh;
        StartCoroutine(EleRecycle());
    }