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,所写不当还请指出。