Unity对象不会return到原来的位置
Unity object will not return to original position
好的,所以我正在尝试统一制作一个 2D 平台游戏,我目前正在尝试在第一个级别 return 制作一辆汽车,使其到达障碍物后的原始位置标记 "Return"。下面是我一直试图用来实现这一点的代码:
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 and 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 物理则为 Rigidbody,如果是 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;
}
}
}
好的,所以我正在尝试统一制作一个 2D 平台游戏,我目前正在尝试在第一个级别 return 制作一辆汽车,使其到达障碍物后的原始位置标记 "Return"。下面是我一直试图用来实现这一点的代码:
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 and 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 物理则为 Rigidbody,如果是 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;
}
}
}