Unity - игрок обнаруживается в триггере только при движении

В моей игре есть переключатель. На переключателе есть триггер, чтобы определить, когда игрок касается, чтобы он / она мог щелкнуть его, нажав «E».

Странно то, что я могу активировать переключатель только тогда, когда игрок движется, я использую addforce для движения.

Ниже приведен код моего плеера и моего переключателя. Я также прикрепил папку моего проекта, так что если кто-то захочет потратить время и попробовать, он может это сделать. Скорость воспроизведения составляет 100% времени для меня.

Очевидно, это не ожидаемый результат, игрок должен иметь возможность активировать переключатель, даже если он стоит на месте.

ДВИЖЕНИЕ ИГРОКА.CS:

using UnityEngine;
 using System.Collections;

 public class PlayerMovement : MonoBehaviour {

     private Rigidbody2D R2Dplayer;
     private bool grounded = true;
     [SerializeField] private Animator anim;

     // Use this for initialization
     void Start () {
         R2Dplayer = GetComponent<Rigidbody2D>();
     }

     // Update is called once per frame
     void Update () {
         anim.SetFloat("speed", Mathf.Abs(R2Dplayer.velocity.x));
         if(Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.Space)) {
             if(grounded == true) {
                 R2Dplayer.AddForce (new Vector2(0,7.5f), ForceMode2D.Impulse);
             }
         }
         if(Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) {
             R2Dplayer.AddForce (new Vector2(-0.2f,0), ForceMode2D.Impulse);
             if (R2Dplayer.transform.rotation == new Quaternion (0.0f, 0.0f, 0.0f, 1.0f)) {
                 R2Dplayer.transform.Rotate (0, 180, 0);
             }
         }
         if(Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) {

         }
         if(Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) {
             R2Dplayer.AddForce (new Vector2(0.2f,0), ForceMode2D.Impulse);
             if (R2Dplayer.transform.rotation == new Quaternion (0.0f, -1.0f, 0.0f, 0.0f)) {
                 R2Dplayer.transform.Rotate (0, 180, 0);
             }
         }
     }

     void OnTriggerEnter2D(Collider2D c) {
         if(c.tag == "JumpTrigger") {
             grounded = true;
         }
     }

     void OnTriggerExit2D(Collider2D c) {
         if(c.tag == "JumpTrigger") {
             grounded = false;
         }
     }
 }

ПЕРЕКЛЮЧАТЕЛЬ.CS:

using UnityEngine;
 using System.Collections;

 public class Switch : MonoBehaviour {

     [SerializeField] public bool switchPressed = false;
     private SpriteRenderer sr;
     [SerializeField] private Sprite on, off;

     // Use this for initialization
     void Start () {
         sr = GetComponent<SpriteRenderer> ();
     }

     // Update is called once per frame
     void Update () {

     }

     void OnTriggerStay2D(Collider2D c) {
         if(c.tag == "Player") {
             if(Input.GetKeyDown(KeyCode.E)) {
                 if(switchPressed == false) {
                     sr.sprite = on;
                     switchPressed = true;
                 }
                 else if(switchPressed == true) {
                     sr.sprite = off;
                     switchPressed = false;
                 }

             }
         }
     }
 }

ZIP моего проекта, который можно загрузить из Dropbox: https://www.dropbox.com/s/85anfa4287mciiy/Final.zip?dl=0


person jon    schedule 21.04.2016    source источник
comment
Пробовали ли вы использовать логическую систему, которую вы использовали с JumpTriggers, для сохранения, если игрок сталкивается с триггером, а затем перемещать блок if(Input.GetKeyDown(KeyCode.E)) для обновления (с добавленным условием, имеющим сохраненное столкновение с игроком?   -  person sowrd299    schedule 21.04.2016
comment
Я думаю, вы можете проверить физику столкновения и триггера.   -  person tim    schedule 21.04.2016


Ответы (1)


Это то, что вы хотите? введите описание изображения здесь Статический коллайдер/жесткий коллайдер не может активировать другой статический коллайдер/жесткое тело/кинематический rb

Надеюсь, это поможет.

person tim    schedule 21.04.2016