今天要写一个控制台子随时间左右移动的脚本,就像是左右摆动的移动靶一样,在这里记录一下
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版权协议,转载请附上原文出处链接和本声明。