[英]Unity object will not return to original position
好的,所以我试图统一制作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 。
正如@Hristo所说,您需要确保汽车和障碍物都附有对撞机。 在使用OnTriggerEnter时,汽车对撞机(在检查器中)还需要选中isTrigger框(设置为true)。
我怀疑,因为您的游戏是2D的,所以您可能正在使用2D碰撞器和物理(应该这样做)。 如果是这种情况,则必须使用void OnTriggerEnter2D(Collider2D other)
来访问2D碰撞器,并且汽车和障碍物都需要附加到其游戏对象的2D碰撞器(例如Box Collider 2D)。 汽车再次需要将isTrigger框选中(设置为true)。
另外,请确保您已在汽车上附加了刚体(如果是3D物理,则为刚体;如果是2D,则为Rigidbody2D)。 然后在检查器中将“身体类型”设置为“运动学”。 这使触发器能够与其他对撞机进行交互,并且因为它是运动学上的,所以不受重力和所有运动的影响。
对于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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.