好的,所以我正在努力制作一个统一的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.html和https://docs.unity3d.com/ScriptReference/Vector3.html。
答案 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;
}
}
}