unity3d - 将游戏对象从 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);
}
}
解决方案
随便调用 Spawn/Start 方法有几种方式:
gameObject.AddComponent<onClickSpawnMove>();
将再次调用 Start 方法。Instantiate
已经附加了 onClickSpawnMove 脚本的预制件。gameObject.SendMessage("Start");
也许,但很少见到。
您可以添加日志或断点以检查何时调用 Spawn / Start 方法。
打印哈希码将帮助您了解不同的onClickSpawnMove
实例。
您可以单击控制台中的消息以知道GameObject
是哪个。
void Start()
{
Spawn();
Debug.Log("Start " + this.GetHashCode(), this);
}
推荐阅读
- netlogo - 如何访问随机选择的海龟/代理集的原语 - 一般方式 - NetLogo
- php - 如何将 MySQL REPLACE 迁移到 TYPO3 QueryBuilder?
- java - 使用 oracle 对象参数调用 oracle 存储过程
- html - 无法将 div 中的纯文本与文本溢出一起垂直对齐:省略号
- python - 如何解决烧瓶中的这个坏键错误?
- oop - 具有 ORM 到数据库和许多非数据库方法的类的一般设计是什么?
- .net-standard-2.0 - 无法在 .NET Standard2 中使用 System.ServiceModel.ServiceHost
- angular - 以角度显示推送通知
- flutter - 在 dart 中绕过 POST 请求的客户端证书选择(颤振)
- powershell - 寻找通配符字符串,然后将其写入输出