简体   繁体   中英

Unity rotate object around local axis

I am trying to rotate an object around it's local axis (In this case a humanoid index finger) with my custom editor.

public float amount;

void OnGUI() {
    amount = EditorGUILayout.Slider("Rotate Amount", amount, 0, 100);
    index1.transform.localEulerAngles = new Vector3(0, 0, amount);
}

The issue I am having is when I move the slider, the finger rotates down and forward so the tips of the fingers point outwards, when in theory they should point towards the elbow.

I think I am using the wrong type of transform here, so what should I do to use the right transform?

旋转1 旋转2 旋转3

Try to use:

index1.transform.Rotate(new Vector3(0, 0, amount), Space.World);

or

index1.transform.Rotate(new Vector3(0, 0, amount), Space.Self);

Hope it solves your problem :)

There may be 2 parts to this:

  1. Getting the current rotation of the object on the local z-axis, here's one way to do that. https://stackoverflow.com/a/47841408/228738
  2. Using the current rotation value to find the amount of rotation to apply to the object.

code for step #2

var currentZEuler = zRotation(this.transform.rotation).eulerAngles.z;
var deltaZEuler = amount - deltaZEuler;
index1.transform.Rotate(0, 0, deltaZEuler, Space.Self);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM