首页 > 解决方案 > 将游戏对象从 A 移动到 B

问题描述

我正在尝试将游戏对象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);
    }
}

标签: unity3d

解决方案


随便调用 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);
}

推荐阅读