控制人物左右移动,同时加入左右移动人物翻转控制。
有两种方法:
1.更新 x的速度,通过速度正负判断翻转。(注释的代码)
2.获取位置帧,通过位置帧和初始帧的大小判断是否翻转。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player: MonoBehaviour
{
Rigidbody2D rigidbody2d;
// Start is called before the first frame update
SpriteRenderer spriteRenderer;
public float speedX; //X方向的速度
void Start()
{
//获取刚体属性
rigidbody2d = transform.GetComponent<Rigidbody2D>();
//
spriteRenderer =transform.GetComponent<SpriteRenderer>();
}
// Update is called once per frame
void Update()
{
// if(Input.GetKey(KeyCode.A)){
// SetSpeedX(-speedX);
// }
// if(Input.GetKey(KeyCode.D)){
// SetSpeedX(speedX);
// }
// if(!Input.GetKey(KeyCode.A)&&!Input.GetKey(KeyCode.D)){
// SetSpeedX(0);
// }
//由于是只控制左右,因此Y值拿刚体默认的速度值即可
Vector2 movement = new Vector2(Input.GetAxisRaw("Horizontal"), rigidbody2d.velocity.y);
Vector2 startPos = rigidbody2d.position;
Vector2 targetPos = rigidbody2d.position + movement * Time.deltaTime * speedX;
if(targetPos.x < startPos.x)
{
spriteRenderer.flipX = true;
}
else
{
spriteRenderer.flipX = false;
}
rigidbody2d.MovePosition(targetPos);
}
#region 控制速度方法
public void SetSpeedX(float x){
if(x<0)
{
//控制翻转
spriteRenderer.flipX=true;
}else if(x>0){
spriteRenderer.flipX=false;
}
rigidbody2d.velocity = new Vector2(x,rigidbody2d.velocity.y);
}
public void SetSpeedY(float y){
rigidbody2d.velocity = new Vector2(rigidbody2d.velocity.x,y);
}
#endregion
}