【问题标题】:Change the controls of a player after a collision?碰撞后改变玩家的控制?
【发布时间】:2015-05-27 11:37:48
【问题描述】:

所以基本上玩家的动作都很好。直到他碰到一个物体。当玩家与某个物体发生碰撞时,我想改变玩家的动作。例如:Homer Simpson 正在四处奔跑,但当他击中 duff 时,他的动作会发生几秒钟的变化。

到目前为止,这是我的代码:

using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour {
    public float speed = 1.0f;
    public int score = 0;
    public bool gameOverRed = false;
    public float size = 1f;
    public float duffSpeed = 1.0f;
    private float timer;
    private bool hitDuff = false;
void start() {
    timer = 0.0f;
}
// Update is called once per frame 
void Update () {

    if (hitDuff) {
        timer += Time.deltaTime;

        if (timer > 5.0) {
            start ();
            duffMovement ();
            hitDuff = false;
        }
    } else {
        movement ();
    }

}

public void OnCollisionEnter2D(Collision2D coll)
{

    if(coll.gameObject.CompareTag("Cube")) {
        speed -= 2;
        score++;
        transform.localScale += new Vector3(size, size, 0);

    }

    if(coll.gameObject.CompareTag("Duff")){
        hitDuff = true;
    }

}

private void movement()
{

    if (Input.GetKey (KeyCode.D)) {
        transform.rigidbody2D.velocity = (new Vector2 (speed, 0));
    }
    if (Input.GetKey (KeyCode.A)) {
        transform.rigidbody2D.velocity = (new Vector2 (-speed, 0));

    }
    if (Input.GetKey (KeyCode.S)) {
        transform.rigidbody2D.velocity = (new Vector2 (0, -speed));
    }
    if (Input.GetKey (KeyCode.W)) {
        transform.rigidbody2D.velocity = (new Vector2 (0, speed));
    }
    if (Input.GetKey (KeyCode.S) && Input.GetKey (KeyCode.A)) {
        transform.rigidbody2D.velocity = (new Vector2 (-speed, -speed));
    }
    if (Input.GetKey (KeyCode.S) && Input.GetKey (KeyCode.D)) {
        transform.rigidbody2D.velocity = (new Vector2 (speed, -speed));
    }
    if (Input.GetKey (KeyCode.W) && Input.GetKey (KeyCode.D)) {
        transform.rigidbody2D.velocity = (new Vector2 (speed, speed));
    }
    if (Input.GetKey (KeyCode.W) && Input.GetKey (KeyCode.A)) {
        transform.rigidbody2D.velocity = (new Vector2 (-speed, speed));
    }
    if (speed <= 20) {
        speed = 20;
    }
}

    private void duffMovement() {

                if (Input.GetKey (KeyCode.D)) {
                transform.rigidbody2D.velocity = (new Vector2 (-speed, 0));
                }
                if (Input.GetKey (KeyCode.A)) {
                transform.rigidbody2D.velocity = (new Vector2 (speed, 0));  
                }
                if (Input.GetKey (KeyCode.S)) {
                transform.rigidbody2D.velocity = (new Vector2 (0, speed));
                }
                if (Input.GetKey (KeyCode.W)) {
                transform.rigidbody2D.velocity = (new Vector2 (0, -speed));
                }
                if (Input.GetKey (KeyCode.S) && Input.GetKey (KeyCode.A)) {
                transform.rigidbody2D.velocity = (new Vector2 (-speed, speed));
                }
                if (Input.GetKey (KeyCode.S) && Input.GetKey (KeyCode.D)) {
                transform.rigidbody2D.velocity = (new Vector2 (speed, speed));
                }
                if (Input.GetKey (KeyCode.W) && Input.GetKey (KeyCode.D)) {
            transform.rigidbody2D.velocity = (new Vector2 (speed, speed));
                }
                if (Input.GetKey (KeyCode.W) && Input.GetKey (KeyCode.A)) {
                transform.rigidbody2D.velocity = (new Vector2 (-speed, -speed));
                }

    }


}

当我运行它时会发生什么,我击中了 duff,然后我的播放器继续朝该方向移动(无法使用 duffMovement() 方法)几秒钟,然后我又可以了。

【问题讨论】:

    标签: c# unity3d monodevelop unity3d-2dtools


    【解决方案1】:

    在您想要使用的时间段过后,您正在执行您的 duff 运动;

    if (hitDuff) {
            timer += Time.deltaTime;
            duffMovement();
    
            if (timer > 5.0) {
                start ();
                hitDuff = false;
            }
    }
    

    【讨论】:

    • 有史以来最好的回答。
    猜你喜欢
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    相关资源
    最近更新 更多