unity学习———2D人物的移动

unity学习———2D人物的移动


代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class zyplayercontrol : MonoBehaviour
{   //获取玩家本体
    public GameObject Player;


    //设置移动
    public float movespeed=2.0f; //真实速度
    public float MoveSpeed = 0f;
    public float vertical = 0f;
    public float horizontal = 0f;
    public float hor;
    public float ver;

   //玩家状态
    public bool IsMove = false;//玩家是否在移动

    //物体的刚体
    private Rigidbody2D rig;
   


    void Start()
    {
        //获取rigidbody组件
        rig = Player.GetComponent<Rigidbody2D>();
        //获取物体的ActualState
        
    }

    // Update is called once per frame
    private void FixedUpdate()
    {
        Move();//移动
    }

    //玩家的移动
    private void Move()
    {
        //按键接受水平
        horizontal = Input.GetAxisRaw("Horizontal");
        hor = horizontal * MoveSpeed;
         
        //按键接受竖直
        vertical = Input.GetAxisRaw("Vertical");
        ver = vertical * MoveSpeed;
        
        
        //当按键按下的时候改变速度使其运动
        if (Input.GetKey(KeyCode.D)|| Input.GetKey(KeyCode.A))
        {
            MoveSpeed = movespeed;
            rig.velocity = new Vector2(hor, rig.velocity.y);
        }
        
       //上下运动
        if (Input.GetKey(KeyCode.W)||Input.GetKey(KeyCode.S))
        {
            MoveSpeed = movespeed;
            rig.velocity = new Vector2(rig.velocity.x,ver );
        }

        //当没有按下的时候复原递减 
        //其实这里可以直接把MoveSpeed改为0,这里想起速度递减的作用但是没有起到
        if (MoveSpeed != 0)
            MoveSpeed -= 0.5f;
            
        if (horizontal == 0)
            rig.velocity = new Vector2(hor, rig.velocity.y);

        if (vertical == 0)
            rig.velocity = new Vector2(rig.velocity.x,ver);

    }
}

这段代码的结果是当WASD或上下左右的时候人物会动,当同时按下两个相邻的方向的时候他会向这两个方向的中间方向移动,当同时按下相对的两个方向的时候他就会停止不动,这算是个bug但是达到了我想要的结果。
因为我现在做的是俯视版的没有跳跃系统,也没有重力系统。如果想加跳跃的话就把上下移动删掉添,加一个方法当按下空格的时候给物体一个想上的力就行了,但是前提是要在物体的刚体上添加重力。

 if (Input.GetKey(KeyCode.Backspace))
        {
         	//JumpSpeed是跳跃时给的想上的力类型为float
             rig.velocity = new Vector2(rig.velocity.x, JumpSpeed);
        }

初学unity,所写不当还请指出。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值