繁体   English   中英

Unity对象将不会返回到原始位置

[英]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.htmlhttps://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM