Как бы я временно повернул объект на оси z в Unity3D? - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь сделать анимацию удара в Unity3D для персонажа, мне нужно повернуть руку на оси z, но анимировать ее, я везде искал решение. Ничто не похоже на работу. Вот что у меня есть:

PlayerMotor:

public void Punch() {
    arm.transform.Rotate(0, Time.deltaTime, 0);
    arm.transform.position= new Vector3(arm.position.x, arm.position.y, arm.position.z + .01f);
}

public void PunchReturn() {
    arm.transform.Rotate(0, -Time.deltaTime, 0);
    arm.transform.position = new Vector3(arm.position.x, arm.position.y, arm.position.z - .01f);
}

PlayerController:

if (Input.GetMouseButtonDown(0)) {
    // Does punching animation
    Debug.Log("punching");
    for (int i = 0; i < 50; i++) motor.Punch();
    for (int i = 0; i < 50; i++) motor.PunchReturn();
}

1 Ответ

0 голосов
/ 06 января 2019

Я согласен с "троллингчар", сопрограммы или аниматор это путь. Если вы хотите попробовать с сопрограммами:

сделать этот метод:

// this runs "in parallel" to the rest of your code.
// the yield statements will not freeze your app.
IEnumerator AnimationCoroutine(){
    for (int i = 0; i < 50; i++) {
        motor.Punch(); // rotate a little bit
        yield return null; // waits for one frame
    }
    for (int i = 0; i < 50; i++) {
        motor.PunchReturn(); // rotate a little bit
        yield return null; // waits for one frame
    }
}

и вызовите его из контроллера

if (Input.GetMouseButtonDown(0)) {
    // Does punching animation
    Debug.Log("punching");
    StartCoroutine(AnimationCoroutine());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...