ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2D人物移动代码

2021-12-05 09:04:25  阅读:180  来源: 互联网

标签:rigidbody isGround 代码 private 2D velocity new 移动 animator


private GameObject rigid;
private Vector2 input;
private Vector2 mousePos; //鼠标的位置
public float Speed;//人物的移动速度一般设为 public 可以随时调节
Private Animator Ani; //获取动画让人物的移动逼真

void Start()
{
//在开始的时候获取这些组件
animantor = GetComponent<Animator>();
rigidbody = GetComponent<Rigidbody2D>();
}

void Update()
{
input.x = Input.GetAxisRaw("Horizontal");
input.y = Input.GetAxisRaw("Vertical");

rigid.velocity = input.normalized*speed;//normalized 单位向量,防止因为同时键入w d使得向
//量相加
mousePso = Camera.main.ScreenToWorldPoint(Input.mousePosition);
  if (mousePso.x > transform.position.x)
        {
            transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0));
        }
        else 
        {
            transform.rotation = Quaternion.Euler(new Vector3(0, 180, 0));
        }
}
If(input !=Vector2.zero )
{
Ani.SetBool("Ismoving", true);//ismoving 移动控制参数
}
Else
{
Ani.SetBool("Ismoving", false);
}

上述代码适用于2D开放地图,在该地图中人物不可以跳跃只能上下左右走动。

Public float movespeed;
Private float jumpspeed;
 [Range(0, .3f)]
 [SerializeField] private float checkRadius = .2f;
 private Rigidbody2D rigidbody;
 private Animator animator;
//声明是否能进行 二段跳
 private bool DoubleJump=true;
//获取输入信息
private float inputX;
[SerializeField] private bool isGround = true;
[SerializeField] private LayerMask layer;
Void start()
{
    rigidbody = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}

Void update()
{
//返回值是-1,1 是瞬间变换没有变换过程
inputX = Input.GetAxisRaw(“Horizontal”);
//画个圆 参数(圆的圆心,圆的半径,与那个层级接触)
isGround = Physics2D.OverlapCircle(transform.position, checkRadius, layer);
Move();
Jump(); 
Flip();

}
Private void Flip()
{
If(inputX==-1)
{
Transform.localScale = new Vector3(-1,1,1);
}
else if(inputX==1)
{
Transform.localScale = new Vector3(1,1,1);
}
}
Private void Jump(){ 
If(! isGround && Input.GetButtonDown("Jump")) 
{
 DoubleJump = true;
 rigidbody.velocity = new Vector2(0, jumpSpeed );
animator.SetTrigger("Jump");
}
If(isGround && Input.GetButtonDown("Jump")&&DoubleJump ) //二段跳 一般可以设置第二 //次跳跃的高度稍微比第一次低一点
{
rigidbody.velocity = new Vector2(0, jumpSpeed );
animator.SetTrigger("Jump");
DoubleJump = false;
}
}

Privete void Move()
{
 rigidbody.velocity = new Vector2(inputX * moveSpeed, rigidbody.velocity.y);
animator.SetBool("isGround", isGround);
animator.SetFloat("Horizontal", rigidbody.velocity.x);
 animator.SetFloat("Vertical", rigidbody.velocity.y);
}

适用于可以跳跃的2D游戏

标签:rigidbody,isGround,代码,private,2D,velocity,new,移动,animator
来源: https://blog.csdn.net/m0_52021450/article/details/121725251

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有