Unity对象不会返回原始位置

时间:2017-12-14 00:04:46

标签: c# unity5

好的,所以我正在努力制作一个统一的2D平台游戏,我现在正试图让一辆车在第一级回到它的原始位置后,它到达一个带有“返回”标签的障碍。以下是我一直试图用来实现的代码:

using UnityEngine;
using System.Collections;

public class Return : MonoBehaviour
{

Vector3 originalPos;

void Start()
{
    originalPos = new Vector3(75f, -.01f);

}
void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "Return")
    {
        gameObject.transform.position = originalPos;
    }

}
}    

代码没有做任何事情,汽车只是经过我设置的障碍。任何信息都会有所帮助,虽然我更喜欢c#。请注意,我仍然主要是一个菜鸟,我从中学到的网站是:https://answers.unity.com/questions/1359710/i-want-to-reset-my-object-to-its-original-position.htmlhttps://docs.unity3d.com/ScriptReference/Vector3.html

1 个答案:

答案 0 :(得分:0)

正如@Hristo评论的那样,你需要确保汽车和障碍物都附有碰撞器。当您使用OnTriggerEnter时,汽车对撞机(在检查器中)还需要选中isTrigger框(设置为true)。

我怀疑,因为你的游戏是2D游戏,你可能正在使用2D碰撞器和物理(你应该使用它)。如果是这种情况,则必须使用void OnTriggerEnter2D(Collider2D other)来访问2D对撞机,并且汽车和障碍物都需要连接到其游戏对象的2D碰撞器(例如Box Collider 2D)。汽车再次需要选中isTrigger框(设置为true)。

另外,请确保您的车身附有刚体(如果是3D物理则为刚体,如果是2D则为Rigidbody2D)。然后在检查器中将Body Type指定为Kinematic。这使得触发器能够与其他碰撞器相互作用,并且由于它是运动学的,所以它不会受到重力和所有碰撞的影响。

对于2D对撞机和物理,您的代码将更改为:

using UnityEngine;
using System.Collections;

public class Return : MonoBehaviour
{

Vector3 originalPos;

void Start()
{
    originalPos = new Vector3(75f, -.01f);

}
void OnTriggerEnter2D(Collider2D other)
{
    if (other.gameObject.tag == "Return")
    {
        transform.position = originalPos;
    }

}
}