Unity控制物体左右摆动

今天要写一个控制台子随时间左右移动的脚本,就像是左右摆动的移动靶一样,在这里记录一下

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

public class StageSwing : MonoBehaviour
{
    private float _distance;
    private const float _maxDistance = 1f;
    private float _speed = 0.0f;
    private const float _addSpeed = 1f;
    private const float _maxSpeed = 10f;
    private Vector3 _startPos;

    // Start is called before the first frame update
    void Start()
    {
        _startPos = transform.position;
        _speed = _maxSpeed;
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        if(_distance > 0f && _speed > 0f)
        {
            _speed -= _addSpeed;
        }
        else if(_distance > 0f && _speed < 0f)
        {
            _speed -= _addSpeed;
        }
        else if (_distance <= 0f && _speed < 0f)
        {
            _speed += _addSpeed;
        }
        else if (_distance <= 0f && _speed > 0f)
        {
            _speed += _addSpeed;
        }
        else if(_speed == 0f)
        {
            if(_distance > 0)
            {
                _speed -= _addSpeed;
            }
            if(_distance < 0)
            {
                _speed += _addSpeed;
            }
        }
        Debug.Log("_distance: " + _distance);
        Debug.Log("_speed: " + _speed);
        transform.Translate(Vector3.right * Time.deltaTime * _speed);
        Vector3 tmp = transform.position - _startPos;
        _distance = tmp.x + tmp.z;
    }
}

要注意这里要使用FixedUpdate,因为如果用Update的话每一帧持续的时间不一样长,也就导致物体运动的距离不一样长了,这也证明了FixedUpdate比较适合做控制。


版权声明:本文为weixin_41319239原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。