Example #1
0
    private void OnEnable()
    {
        rigid = GetComponent <Rigidbody>();
        transform.localPosition = Vector3.zero;
        transform.localRotation = Quaternion.identity;
        FallParent       = transform.parent.parent.parent.GetChild(2);//这里永远是GameMode最初节点的child
        ParentMesh       = new Mesh();
        MeshA            = new Mesh();
        MeshB            = new Mesh();
        FallMesh         = new Mesh();
        StayMesh         = GetComponent <MeshFilter>();
        StayMeshCollider = GetComponent <MeshCollider>();

        storage    = ObjectStorage.Instance;
        ParentMesh = storage.DefaultMesh;
        storage.RenewMesh(ParentMesh, MeshA);
        storage.RenewMesh(ParentMesh, MeshB);
        StayMesh.mesh = ParentMesh;
        StayMeshCollider.sharedMesh = StayMesh.mesh;

        rigid.isKinematic = true;
        Fail = false;
    }
Example #2
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());
    }