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; } }
/// <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); }