在游戏对象上运行一次脚本

本文关键字:一次 脚本 游戏 对象 运行 | 更新日期: 2023-09-27 18:22:09

我有一个脚本,它使用Unity引擎的lerp功能处理游戏对象随时间的转换。

public class MovePiece : MonoBehaviour {
    Vector3 startPoint;
    Vector3 endPoint;
    float speed = 1;
    float startTime;
    float journeyLength;
    void Start() {
        startPoint = gameObject.GetComponent<Transform>().position;
        endPoint = startPoint + new Vector3(20, 0, 0); //Will make this a variable eventually
        startTime = Time.time;
        journeyLength = Vector3.Distance(startPoint, endPoint);
    }
    void Update() {
        float distCovered = (Time.time - startTime) * speed;
        float fracJourney = distCovered / journeyLength;
        transform.position = Vector3.Lerp(startPoint, endPoint, fracJourney);
    }
}

但是,我只希望在单击游戏对象时运行一次,然后在该对象完成移动后将其从该对象分离,以便下次单击其他对象时可以再次运行。

我在相机上附加了一个光线投射设置,可以选择游戏对象,我只是不知道如何在选定的对象上运行这个脚本!

我该怎么做?

在游戏对象上运行一次脚本

重命名Start方法

void Start() { ... }

到其他组件可以公开访问的东西,例如:

public void BeginMove() { ... }

然后,让您的Raycast脚本调用您的新函数。您需要访问被点击的GameObject的MovePiece组件:

...
GameObject hitObject = raycastHit.collider.gameObject;
MovePiece hitObjectMovePiece = hitObject.getComponent<MovePiece>();
hitObjectMovePiece.BeginMove();

您可能还想在动画中引入布尔锁。以下是您的代码可能的样子。

    public class MovePiece : MonoBehaviour {
    Vector3 startPoint;
    Vector3 endPoint;
    float speed = 1;
    float startTime;
    float journeyLength;
    // Animation lock
    private bool moving = false;
    public void BeginMove() {
        startPoint = gameObject.GetComponent<Transform>().position;
        endPoint = startPoint + new Vector3(20, 0, 0); //Will make this a variable eventually
        startTime = Time.time;
        journeyLength = Vector3.Distance(startPoint, endPoint);
        moving = true;
    }
    void Update() {
        if(!moving)
            return;
        float distCovered = (Time.time - startTime) * speed;
        float fracJourney = distCovered / journeyLength;
        transform.position = Vector3.Lerp(startPoint, endPoint, fracJourney);
        if(fracJourney >= 1.0f)
            moving = false;
    }
}

我希望这能有所帮助!祝你好运。