自学unity2D独立游戏开发,第一篇自学笔记。在场景中添加角色,并给角色添加Rigidbody2D刚体组件、collection2D碰撞体组件,c#脚本组件控制人物移动和跳跃。c#脚本组件内容如下,我进行了详细的注释,以便后用,想学习的朋友可以参考一下。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerControl : MonoBehaviour { private Rigidbody2D m_PlayerRb;// 人物刚体 private float m_FacingRight = 1;//角色是否面向右方 private float m_MoveInputDirection;//方向输入 public float m_MoveSpeed;//移动速度 private Vector3 m_Velocity = Vector3.zero; private float m_MovementSmoothing = .05f;//移动平滑速度 public Transform m_GroundCheck;//地面检查 public bool m_Grounded=true;//是否站在地面上主要用于跳跃是判断 public float m_JumpForce = 15f;//跳跃力量 public float groundCheckRadius = 0.2f;//地面检测半径 public LayerMask m_WhatisGround;//检测碰撞的层 [SerializeField]private float jumpFactor; private void Awake() { m_PlayerRb = GetComponent<Rigidbody2D>();//获取角色刚体 } private void Update() { //获取角色图片大小sp.bounds.extents.y m_Grounded = Physics2D.OverlapCircle(m_GroundCheck.position, groundCheckRadius, m_WhatisGround); Vector3 m_mousePostion = Input.mousePosition;//获取鼠标位置 m_mousePostion = Camera.main.ScreenToWorldPoint(m_mousePostion);//转换成世界坐标 // 因为是2D,用不到z轴。使将z轴的值为0,这样鼠标的坐标就在(x,y)平面上了 m_mousePostion.z = 0; //根据鼠标位置翻转角色 if (m_mousePostion.x-transform.position.x < 0 && m_FacingRight == 1) { Flip(); } else if (m_mousePostion.x - transform.position.x > 0 && m_FacingRight == -1) { Flip(); } #region 左右移动相关 //获取键盘输入,表示左右输入 按键A或D或向左箭头向右箭头 m_MoveInputDirection = Input.GetAxisRaw("Horizontal"); #endregion #region 跳跃相关 //判断是否按下跳跃键,并角色在地面上 if (Input.GetButtonDown("Jump")&&m_Grounded) { m_Grounded = false;//跳跃后,是否在地面为否 m_PlayerRb.velocity = Vector2.up * m_JumpForce;//角色向上跳跃 } BetterJump(); #endregion } private void FixedUpdate() { if (m_MoveInputDirection!=0)//表示玩家按下了左右方向键 { //移动角色 Vector3 targetVelocity = new Vector2(m_MoveSpeed * m_MoveInputDirection, m_PlayerRb.velocity.y); m_PlayerRb.velocity = Vector3.SmoothDamp(m_PlayerRb.velocity, targetVelocity, ref m_Velocity, m_MovementSmoothing); } } /// <summary> /// 角色翻转 /// </summary> void Flip() { m_FacingRight *= -1; transform.Rotate(0.0f, 180.0f, 0.0f); } /// <summary> /// 角色跳跃,长按高跳,短按低跳 /// </summary> private void BetterJump() { //角色跳起后下落阶段 if (m_PlayerRb.velocity.y<0) { m_PlayerRb.velocity += Vector2.up * Physics2D.gravity.y * jumpFactor*Time.deltaTime;//不停的增加重力,手感更强使游戏更有可玩性 } else if (m_PlayerRb.velocity.y>0&&!Input.GetButton("Jump"))//角色跳起阶段,并放弃按跳跃键 { m_PlayerRb.velocity += Vector2.up * Physics2D.gravity.y * jumpFactor * Time.deltaTime; } } private void OnDrawGizmos() { //地面检测方法划线显示,便于观察 Gizmos.color = Color.red; Gizmos.DrawWireSphere(m_GroundCheck.position, groundCheckRadius); } }