Example #1
0
    public void Anim(CutterTarget originCutterTarget, CutterTarget cutterTarget)
    {
        Vector3 vector = cutterTarget.Renderer.bounds.center - originCutterTarget.Renderer.bounds.center;

        switch (adPattern)
        {
        case 0:
            cutterTarget.transform.position += vector.normalized * 0.01f;
            float   power = 10f;
            Vector3 force = vector.normalized * power;
            force.x *= 1f;
            force.y *= 2f;
            cutterTarget.Rigidbody.AddForce(force, ForceMode.Acceleration);
            break;

        case 1:
            cutterTarget.Rigidbody.isKinematic = true;
            bool    isRight = vector.x > 0;
            Vector3 target  = isRight ? rightDishTf.position : leftDishTf.position;
            target.y += cutterTarget.Renderer.bounds.size.y / 2f;
            Vector3[] path = new Vector3[2];
            path[0]    = (cutterTarget.transform.position + target) / 2f;
            path[0].y += Mathf.Abs(path[0].y) / 2f;
            path[1]    = target;
            cutterTarget.transform.DOPath(path, Duration).SetEase(Ease.OutBounce);
            break;

        default:
            break;
        }
    }
Example #2
0
        /// <summary>
        /// Add Victime component to sub objects.
        /// </summary>
        public void Add(GameObject[] cuttedObjects, MeshCutter.CutterPlane blade, Slicer parent)
        {
            // カット後の移動方向を調べるために平面を作成する
            Vector3 position = cuttedObjects[0].transform.TransformPoint(blade.Position);
            Vector3 normal   = cuttedObjects[0].transform.TransformDirection(blade.Normal);
            Plane   plane    = new Plane(normal, position);

            Vector3 center = Vector3.zero;

            for (int i = 0; i < cuttedObjects.Length; i++)
            {
                GameObject cutObj = cuttedObjects[i];

                CutterTarget cutterTarget = cutObj.AddComponent <CutterTarget>();
                cutterTarget.Mesh = cutObj.transform;

                Slicer victim = cutObj.AddComponent <Slicer>();
                cutObj.AddComponent <BoxCollider>();
                victim.Sequencer = this;
                victim.CutTarget = cutterTarget;
                victim.Root      = cutObj.transform.parent;
                _slicerList.Add(victim);

                Renderer renderer = cutObj.GetComponent <Renderer>();
                Vector3  checkPos = renderer.bounds.center;
                center += checkPos;
                bool side = plane.GetSide(checkPos);
                if (side)
                {
                    parent.Inherit(victim, plane.normal * _speed);
                }
                else
                {
                    parent.Inherit(victim, -plane.normal * _speed);
                }
            }

            // オブジェクトの中心にエフェクトを表示
            center /= cuttedObjects.Length;

            GameObject effect = GameObject.Instantiate(_effectPrefab, center, Quaternion.identity);

            effect.transform.forward = normal;
            _effectList.Add(effect);
        }