自学 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);
- }
- }
来源: https://www.cnblogs.com/Beginstory/p/12634278.html