void OnEnable() { _manager = FindObjectOfType <ManipulatorManager>(); if (_manager != null) { _manager.Add(this); } }
void Update() { int numManipulators = Mathf.Min(_manipulators.Count, MAX_MANIPULATORS); for (int i = 0; i < numManipulators; i++) { Manipulator manipulator = _manipulators[i]; _anchorpositions[i] = manipulator.transform.position; _hardnesses[i] = manipulator.hardness; _radii[i] = manipulator.transform.lossyScale.magnitude; Quaternion rotation = manipulator.handle.rotation * Quaternion.Inverse(manipulator.transform.rotation); float angle; Vector3 axis; rotation.ToAngleAxis(out angle, out axis); if (angle == 0.0f) { axis = new Vector3(1, 0, 0); angle = 0.0001f; } _rotations[i] = axis * (Mathf.Deg2Rad * angle); _scaleFactors[i] = Mathf.Max(Mathf.Max(manipulator.handle.transform.lossyScale.x / manipulator.transform.lossyScale.x, manipulator.handle.transform.lossyScale.y / manipulator.transform.lossyScale.y), manipulator.handle.transform.lossyScale.z / manipulator.transform.lossyScale.z) - 1; _translations[i] = manipulator.handle.transform.position - manipulator.transform.position; } Shader.SetGlobalInt(ShaderParamaters.numManipulatorsID, numManipulators); Shader.SetGlobalVectorArray(ShaderParamaters.anchorPositionsID, _anchorpositions); Shader.SetGlobalFloatArray(ShaderParamaters.hardnessesID, _hardnesses); Shader.SetGlobalFloatArray(ShaderParamaters.radiiID, _radii); Shader.SetGlobalVectorArray(ShaderParamaters.RotationsID, _rotations); Shader.SetGlobalVectorArray(ShaderParamaters.TranslationsID, _translations); Shader.SetGlobalFloatArray(ShaderParamaters.ScaleFactorsID, _scaleFactors); ManipulatorManager.SetKeyword(ShaderParamaters.VISUALIZE_FALLOFF, _visualizeFalloff); ManipulatorManager.SetKeyword(ShaderParamaters.DEBUG_NORMALS, _debugNormals); ManipulatorManager.SetKeyword(ShaderParamaters.CORRECT_NORMALS, _correctNormals); }