[英]Teleporting to a projectile - Moving the player error
我一直在从事一个项目,涉及实例化一个球体,然后在击中我用“地板”标记的任何 object 时将玩家传送到它的位置。 我对编程比较陌生,因此非常感谢您的帮助。
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Floor")
{
script.canShoot = true;
isTriggered = true;
player.transform.position = teleportLocation;
Destroy(gameObject);
Debug.Log("hit floor");
}
目前,我的“teleportLocation”只是球体常量 position。
目前我面临的问题是移动播放器,我用播放器替换了一个在设置 position 时确实有效的立方体。这是我用于实例化射弹的脚本:
Vector3 dir = mouse.transform.position - transform.position;
if (!disabled)
{
GameObject instance = Instantiate(orbPrefab, orbShooter.transform.position, orbPrefab.transform.rotation);
instance.GetComponent<Rigidbody>().AddForce(dir * power);
instance.transform.position = new Vector3(0, 0, 0);
}
我能够成功将玩家传送到球体的唯一方法是通过这个脚本:
public class teleport : MonoBehaviour
{
public Vector3 tpPos;
public GameObject testOrb;
// Start is called before the first frame update
void Start()
{
}
void Update()
{
tpPos = testOrb.transform.position;
if (Input.GetKeyDown(KeyCode.E))
{
transform.position = tpPos;
}
}
}
当我按下“E”时,我可以将玩家移动到一个球体(这不是实例化的 object 而是通过单击移动的普通游戏 object),这似乎有效。 问题似乎不在于碰撞检测或变换位置,而是在于实例化。 如果有人知道可以将我的玩家传送到实例化的球体的方法,那将会很有帮助。
以上涉及我尝试过的不同事情......
找到了解决方案,该解决方案仅涉及在附加到播放器的脚本内部创建一个方法,该方法将播放器转换 position 更改为球体。 当它与地板碰撞时,然后在 orb 脚本内部调用该方法。 问题似乎出在脚本内部出于某种原因调用传送的位置,希望其他人也能理解是否也有此问题。
很抱歉回答晚了,我一直在有限的时间范围内完成项目(通常每个项目 5 周或更短时间),并且一旦我解决了它就继续前进太快了。 我记得这个问题是由于脚本中动作发生的顺序造成的。 我不完全确定,但我只能说:
我想让我的玩家射击一个球体(通过实例化)然后让他们传送到球体(我认为这可以通过简单地设置player.transform.position = orb.transform.position
来完成
然而,这没有效果。 然后我尝试以不同的方式设置播放器 position 并解决问题是碰撞还是其他原因造成的。 碰撞非常好。
在此之后,我最后的努力是在玩家脚本(附加到玩家对象)中创建一个子例程 / function,然后从 orb 脚本调用 function(当它撞击地板时)。
我没想到这会起作用,但它确实起作用了,所以我只能怀疑这个问题是被调用的顺序中的某种错误? 我不完全确定,但如果您需要进一步详细说明,我很乐意这样做:感谢您的耐心等待 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.