예제 #1
0
        // Called each time before FBBIK solves
        protected override void OnModifyOffset()
        {
            // Go through all the warps...
            for (int i = 0; i < warps.Length; i++)
            {
                float warpWeight = GetWarpWeight(i);

                // Get the offset form warpFrom to warpTo
                Vector3 offset = warps[i].warpTo.position - warps[i].warpFrom.position;

                // Add that offset to the effector (using positionOffset additively, because it will be reset to Vector3.zero by FBBIK after each update)
                switch (effectorMode)
                {
                case EffectorMode.PositionOffset:
                    ik.solver.GetEffector(warps[i].effector).positionOffset += offset * warpWeight * weight;
                    break;

                case EffectorMode.Position:
                    ik.solver.GetEffector(warps[i].effector).position       = ik.solver.GetEffector(warps[i].effector).bone.position + offset;
                    ik.solver.GetEffector(warps[i].effector).positionWeight = weight * warpWeight;
                    break;
                }
            }

            // Switching modes safely, weighing out effector positionWeights
            if (lastMode == EffectorMode.Position && effectorMode == EffectorMode.PositionOffset)
            {
                foreach (Warp warp in warps)
                {
                    ik.solver.GetEffector(warp.effector).positionWeight = 0f;
                }
            }

            lastMode = effectorMode;
        }
예제 #2
0
		// Called each time before FBBIK solves
		protected override void OnModifyOffset() {
			// Go through all the warps...
			for (int i = 0; i < warps.Length; i++) {
				float warpWeight = GetWarpWeight(i);

				// Get the offset form warpFrom to warpTo
				Vector3 offset = warps[i].warpTo.position - warps[i].warpFrom.position;

				// Add that offset to the effector (using positionOffset additively, because it will be reset to Vector3.zero by FBBIK after each update)
				switch(effectorMode) {
				case EffectorMode.PositionOffset:
					ik.solver.GetEffector(warps[i].effector).positionOffset += offset * warpWeight * weight;
					break;
				case EffectorMode.Position:
					ik.solver.GetEffector(warps[i].effector).position = ik.solver.GetEffector(warps[i].effector).bone.position + offset;
					ik.solver.GetEffector(warps[i].effector).positionWeight = weight * warpWeight;
					break;
				}
			}

			// Switching modes safely, weighing out effector positionWeights
			if (lastMode == EffectorMode.Position && effectorMode == EffectorMode.PositionOffset) {
				foreach (Warp warp in warps) {
					ik.solver.GetEffector(warp.effector).positionWeight = 0f;
				}
			}
			
			lastMode = effectorMode;
		}
예제 #3
0
		protected override void Start() {
			base.Start();

			lastMode = effectorMode;
		}
예제 #4
0
        protected override void Start()
        {
            base.Start();

            lastMode = effectorMode;
        }