В моей игре есть переключатель. На переключателе есть триггер, чтобы определить, когда игрок касается, чтобы он / она мог щелкнуть его, нажав «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
if(Input.GetKeyDown(KeyCode.E))
для обновления (с добавленным условием, имеющим сохраненное столкновение с игроком? - person sowrd299   schedule 21.04.2016