我一直在做一个项目,包括示例化一个球体,然后传送到它的位置时,球员击中任何对象,我标记为“地板”。我是相对新的编程,所以任何帮助是感激。
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Floor")
{
script.canShoot = true;
isTriggered = true;
player.transform.position = teleportLocation;
Destroy(gameObject);
Debug.Log("hit floor");
}
我的“teleportLocation”只是目前球体的恒定位置。
目前我面临的问题是移动玩家,我已经用一个立方体代替了玩家,这个立方体在设置位置时确实起作用。这是我示例化抛射体的脚本:
Vector3 dir = mouse.transform.position - transform.position;
if (!disabled)
{
GameObject instance = Instantiate(orbPrefab, orbShooter.transform.position, orbPrefab.transform.rotation);
instance.GetComponent<Rigidbody>().AddForce(dir * power);
instance.transform.position = new Vector3(0, 0, 0);
}
我唯一能够成功将玩家传送到宝珠的方法就是通过这个脚本:
public class teleport : MonoBehaviour
{
public Vector3 tpPos;
public GameObject testOrb;
// Start is called before the first frame update
void Start()
{
}
void Update()
{
tpPos = testOrb.transform.position;
if (Input.GetKeyDown(KeyCode.E))
{
transform.position = tpPos;
}
}
}
当我按下“E”键时,我可以将玩家移动到一个球体(它不是一个示例化的对象,而是一个通过点击移动的普通游戏对象),这似乎是有效的。问题似乎不在于碰撞检测或转换位置,而是示例化。如果有人知道一种可以将我的玩家传送到示例化球体的方法,这将是很有帮助的。
以上涉及到我尝试过的不同的事情。
1条答案
按热度按时间des4xlb01#
找到了解决方案,只是涉及到创建一个方法内的脚本附加到球员,改变球员变换位置的球体。然后该方法被调用的球体脚本内,当它与地板碰撞。问题似乎是与传送被调用的脚本内的某些原因,希望其他人能理解,如果他们也有这个问题。