当精灵在精灵上方移动时,如何使其变慢?

时间:2019-09-30 22:06:07

标签: c# unity3d

我有一个名为“ Player”的游戏对象,我的地图由短草和长草组成。如果我的播放器在长草上,我希望它放慢速度。另一个问题是我的游戏中有多个Long grass游戏对象。这是它们的屏幕截图:

https://imgur.com/hUq4baV

这就是我当前的移动代码:

public class PlayerMovement : MonoBehaviour
{

    public Sprite Up;
    public Sprite Down;
    public Sprite Right;
    public Sprite Left;
    public float speed;
    private SpriteRenderer sr;


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

        Vector3 move;

        if (Input.GetKey(KeyCode.W))
        {
            GetComponent<SpriteRenderer>().sprite = Up;
            move = new Vector2(0, speed * Time.deltaTime);

            transform.position += move;
        }
        if (Input.GetKey(KeyCode.A))
        {
            GetComponent<SpriteRenderer>().sprite = Left;
            move = new Vector2(speed * Time.deltaTime, 0);

            transform.position -= move;
        }
        if (Input.GetKey(KeyCode.D))
        {
            GetComponent<SpriteRenderer>().sprite = Right;
            move = new Vector2(speed * Time.deltaTime, 0);

            transform.position += move;
        }
        if (Input.GetKey(KeyCode.S))
        {
            GetComponent<SpriteRenderer>().sprite = Down;
            move = new Vector2(0,speed * Time.deltaTime);

            transform.position -= move;
        }
    }
}

// All my code does is that on each WASD, it changes to a different sprite and moves it.

请多加解释,因为我是一个初学者。

2 个答案:

答案 0 :(得分:3)

  1. 使用对撞机,例如boxcolliders来检测玩家是否在碰草。
  2. 在播放器上使用标签
  3. 在草地上使用oncollisionenter2d()方法
 void OnCollisionEnter2D(Collision2D col)  {
     if(col.tag == "PlayerTag") {
         playerScriptWhereSpeedIsLocated.speed = 1 //the speed you want
     } }

答案 1 :(得分:1)

对此的一种解决方案是使用2D Trigger Colliders

假设您的播放器具有某种2D碰撞器,则可以将触发器碰撞器附加到草对象上,然后当玩家通过添加{{3}输入/释放该触发器时,可以将消息发送到PlayerMovement脚本}和OnTriggerEnter2D方法添加到PlayerMovement类。这是一个可能如何工作的示例:

void OnTriggerEnter2D(Collider2D col)
{
    // You can use gameObject.tag to determine what type of object we're colliding with
    if(col.gameObject.tag == "LongGrass"){
        speed = .8f;
    }
}

void OnTriggerExit2D(Collider2D col)
{
    if(col.gameObject.tag == "LongGrass"){
        speed = 1f;
    }
}

如果您有OnTriggerExit2D,我鼓励您研究 麻烦以这种方式检测碰撞。您还需要确保正确标记草才能使该方法起作用。