[Unity 2D] Unity CharacterController2D

我老师说,好记性不如烂笔头

我说,老师你刚说啥 :>

  正好最近在看2D的骨骼动画那块,然后看着看着,发现自己好像没怎么做过2D游戏(应该做过,忘记了),随便从官方商店拿了一套资源,做一个小游戏,回忆一下,毕竟我老师说,温故而知新

  每次开始写游戏,移动,动画,音效,关卡等等等就来了,然鹅这些都是重复的代码,3D中官方给了CharacterController,Add完事,试着去搜一下CharacterController2D,没有。。。直接在2D Sprite上面加上CharacterController。。。好像也不行,本着有问题找百度的学习态度,找了一个比较好的CharacterController2D Demo

  但是,直接加上那肯定不行,怎么也得改一改方法名,抄一遍。。。哈哈哈

  对了先附上Demo:https://github.com/prime31/CharacterController2D  (这不是我的哦)

=====================================================================

  • 键盘控制动画播放
 1 void Update()
 2     {
 3         if( _controller.isGrounded )
 4             _velocity.y = 0;
 5 
 6         if( Input.GetKey( KeyCode.RightArrow ) )
 7         {
 8             normalizedHorizontalSpeed = 1;
 9             if( transform.localScale.x < 0f )
10                 transform.localScale = new Vector3( -transform.localScale.x, transform.localScale.y, transform.localScale.z );
11 
12             if( _controller.isGrounded )
13                 _animator.Play( Animator.StringToHash( "Run" ) );
14         }
15         else if( Input.GetKey( KeyCode.LeftArrow ) )
16         {
17             normalizedHorizontalSpeed = -1;
18             if( transform.localScale.x > 0f )
19                 transform.localScale = new Vector3( -transform.localScale.x, transform.localScale.y, transform.localScale.z );
20 
21             if( _controller.isGrounded )
22                 _animator.Play( Animator.StringToHash( "Run" ) );
23         }
24         else
25         {
26             normalizedHorizontalSpeed = 0;
27 
28             if( _controller.isGrounded )
29                 _animator.Play( Animator.StringToHash( "Idle" ) );
30         }
学霸的试卷
 1 void Update()
 2     {
 3         if (_isGround) _velocity.y = 0;
 4 
 5         float tempH = Input.GetAxis("Horizontal");
 6         float tempV = Input.GetAxis("Vertical");
 7 
 8         if (Mathf.Abs(tempH) > 0.01f)
 9         {
10             normalizedHorizontalSpeed = (int)Mathf.Sign(tempH);
11             if (onwerSpr.flipX != normalizedHorizontalSpeed < 0) 
12             {
13                 onwerSpr.flipX = !onwerSpr.flipX;
14             }
15 
16             if(_isGround) onwerAnim.Play(runID);
17         }
18         else 
19         {
20             normalizedHorizontalSpeed = 0;
21             if(_isGround) onwerAnim.Play(idleID);
22         }
学渣抄的答案

  作为一个经验老道的学渣,抄是一门学问,怎么可能让老师发现

  原代码是以按下左右键,导致习惯了CS,CF,QQ飞车,PUBG,lol。。。等等的我,在运行demo的时候,以为demo是有问题的。所以本着利己的宗旨,我把左右移动改用获取x轴的位移;

  而播放动画原文是在每次播放动画时都要转化动画对应的HashID,我改用,在Start里面获取并保存对应HashID;

  人物的转向,原文是用改变缩放的形式,我改用了SpriteRanderer的转向;

  这样是不是看起来就不像抄的了。。hhhh,好好学,好好看 :> (借楼说一句,每次我都想录个屏,发一个效果演示AVI图,然鹅MacQQ这个录屏我到现在也没整明白怎么用,开始之后00:00:00就不动,可能是我不配吧,最终还是一个人扛下了所有。。。)

  • 键盘控制移动

学渣还在研究学霸的试卷中,待更新。。。

原文地址:https://www.cnblogs.com/lovewaits/p/13177170.html