umworldorder
@umworldorder (とん らい)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

回転中のObjectを一定時間だけ停止したい

したいこと

回転中のObjectをある角度の時に一定時間だけ静止したいです。
例えばObjectのx角度が45の時に1秒だけ停止させたいです。
方法がわかる方いますか?

該当するソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateDown : MonoBehaviour
{
    [SerializeField] private float _angleSpeed = 135;
    [SerializeField] private Vector3 _axis = Vector3.right;

    private Transform _transform;

    private void Awake()
    {
        _transform = transform;
    }
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.DownArrow))
        {
        var angle = _angleSpeed * Time.deltaTime;

        _transform.rotation = Quaternion.AngleAxis(angle, _axis) * _transform.rotation;
        GameObject Field = GameObject.Find("Field");
         if (Field.transform.localEulerAngles.y == 45)
         {
            
         }
        }
    }
}

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

0

1Answer

こんな感じでいかがでしょうか?
(45度回転する毎に1秒休止します。)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateDown : MonoBehaviour {

    // 角速度
    [SerializeField] private float _angleSpeed = 135f;
    // 休止時間(秒)
    [SerializeField] private float _intervalTime = 1.0f;
    // 回転軸
    [SerializeField] private Vector3 _axis = Vector3.right;
    // 休止する回転角度
    [SerializeField] private float _intervalAngle = 45f;


    // 休止の(残り)時間
    private float intervalTime = 0f;
    // 最後の休止からの回転角
    private float totalEularAngles = 0f;

    // フレーム毎の処理
    void Update () {
        if (intervalTime > 0f) {
            // 休止中なら休止時間を消費
            intervalTime -= Time.deltaTime;
        }
        if (intervalTime <= 0f) {
            // 休止中でない(なくなった)なら
            if (Input.GetKey (KeyCode.DownArrow)) {
                // このフレームの回転角度を算出
                var angle = _angleSpeed * Time.deltaTime;
                // 角度分、自身を回転させる
                transform.rotation *= Quaternion.AngleAxis (angle, _axis);
                // 最後に休止してからの回転角度を算出して_intervalAngle度以上なら
                totalEularAngles += angle;
                if (totalEularAngles >= _intervalAngle) {
                    // 45度を減ずる
                    totalEularAngles -= _intervalAngle;
                    // 時間をセットして休止に入る
                    intervalTime = _intervalTime;
                }
            }
        }
    }
}
0Like

Your answer might help someone💌