U_类似飞毯载人运动的实现

类似飞毯载人运动的实现

using System;
using UnityEngine;

public class FlyingCarpetMove : MonoBehaviour {
    public float t;
    public bool dir;
    public float speed;
    public float cubeSpeed;
    public GameObject MoveWithItem;

    private Vector3 off;
    private float tempT;

    private void Start() {
        off = transform.position - MoveWithItem.transform.position;
    }

    void Update() {
        // 飞毯移动
        MoveEvent();
        // 伴随移动
        MoveWith();
    }

    private void MoveEvent() {
        if (tempT < t) {
            if (dir) {
                transform.Translate(transform.forward * speed);
            } else {
                transform.Translate(-transform.forward * speed);
            }
            tempT += Time.deltaTime;
        } else {
            dir = !dir;
            tempT = 0;
        }
    }

    private void MoveWith() {
        var tempOff = transform.position - MoveWithItem.transform.position;
        if (tempOff != off) {
            MoveWithItem.transform.position = transform.position - off;
        }

        if (Input.GetKey(KeyCode.W)) {
            transform.Translate(transform.forward * cubeSpeed);
        }

        if (Input.GetKey(KeyCode.S)) {
            transform.Translate(-transform.forward * cubeSpeed);
        }

        if (Input.GetKey(KeyCode.A)) {
            transform.Translate(-transform.right * cubeSpeed);
        }

        if (Input.GetKey(KeyCode.D)) {
            transform.Translate(transform.right * cubeSpeed);
        }

        off = transform.position - MoveWithItem.transform.position;
    }
}

posted @ 2022-04-26 11:38  匿鱼  阅读(159)  评论(0)    收藏  举报