将gameObject从A移动到B

时间:2019-01-22 10:14:18

标签: unity3d

我正在尝试对游戏对象movingObject的动画/从其生成位置转换为destination。我认为问题出在IncrementPosition函数的实现中。

不是将一个多维数据集从A移动到B。脚本会生成多个多维数据集,直到到达B。您能看到我要去哪里了吗?

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

public class onClickSpawnMove : MonoBehaviour
{
    public float speed;
    public GameObject randomSpawn;

    private GameObject movingObject;
    private Vector3 destination;

    void Start()
    {
        Spawn();
    }

    void Update()
    {
        SetDestination(movingObject.transform.position);
        if (destination != movingObject.transform.position) {
            IncrementPosition();
        }
    }

    void IncrementPosition()
    {

        float delta = speed * Time.deltaTime;
        Vector3 currentPosition = movingObject.transform.position;
        Vector3 nextPosition = Vector3.MoveTowards(currentPosition, destination, delta);

        movingObject.transform.position = nextPosition;
    }

    void Spawn() {
        Vector3 spawnPosition = new Vector3(10, 0, 0);
        movingObject = Instantiate(randomSpawn, spawnPosition, Quaternion.identity);
    }

    public void SetDestination(Vector3 value)
    {
        destination = new Vector3(20, 0, 0);
    }
}

1 个答案:

答案 0 :(得分:0)

有几种方法可以随意调用Spawn / Start方法:

  1. gameObject.AddComponent<onClickSpawnMove>();将再次调用Start方法。

  2. Instantiate是已经附加了onClickSpawnMove脚本的预制件。

  3. gameObject.SendMessage("Start");也许但很少见。

您可以添加日志或断点以检查何时调用Spawn / Start方法。

打印哈希码将帮助您了解不同的onClickSpawnMove实例。

然后您可以在控制台中单击该消息以了解哪个GameObject

void Start()
{
    Spawn();
    Debug.Log("Start " + this.GetHashCode(), this);
}