#c# #unity3d
Вопрос:
Я создаю сценарий на лифте, который должен телепортировать игрока, когда он находится рядом с ним, и нажать e
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class interactible : MonoBehaviour
{
public Transform player;
public Transform pos;
private bool collide;
void Start()
{
collide = false;
}
void OnCollisionEnter2D(Collision2D collider)
{
collide = true;
}
void OnCollisionExit2D(Collision2D collider)
{
collide = false;
}
void Update()
{
if (Input.GetKeyDown("e") amp;amp; collide)
{
player.position = pos.position;
}
}
}
Я определил как игрока, так и pos, сделал 2d-коллайдер для лифта и установил «is trigger» на true
.
Что я делаю не так?
Ответ №1:
Ваша проблема в том, что 2 триггера не могут сталкиваться, только триггеры и коллайдеры могут работать друг с другом.
ОБНОВЛЕНИЕ: Основная проблема оказалась в том, что, когда вы имеете дело с триггерами, вам нужно использовать OnTriggerEnter2D
вместо OnCollisionEnter2D
Комментарии:
1. Что ты имеешь в виду?
2. Ваш игрок должен быть не триггером, триггеры не могут запускать другие триггеры, потому что они ищут коллайдеры
3. если это то, что вы говорите, у моего плеера нет «триггера», установленного на true, но у лифта есть, поэтому он должен работать.
4. о, я просто забыл, что мне нужно использовать жесткое тело, не так ли?
5. @swisscheez84 Я запрыгну на свой компьютер, и мы обсудим это в чате
Ответ №2:
Input.GetKeyDown
примите перечисление, так и должно быть
if(Input.GetKeyDown(KeyCode.E) amp;amp; collide)
Комментарии:
1. это не потому, что я убрал «amp;amp; столкновение», и это сработало, когда я нажал «e»
2. OnCollisionEnter() срабатывает на долю секунды, поэтому трудно зафиксировать нажатие клавиши одновременно, поэтому попробуйте использовать OnTriggerStay или использовать LineCast.