zoukankan      html  css  js  c++  java
  • [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就不动,可能是我不配吧,最终还是一个人扛下了所有。。。)

    • 键盘控制移动

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

  • 相关阅读:
    svn使用教程各种杂七杂八!
    Python+Django+Eclipse 在Windows下快速网站
    Python Django 框架开发
    【多肉】播种育苗 友情推荐:教你如何买到真种子
    (十一)Json文件配置
    (十)命令行配置
    (九)配置介绍
    visual studio 注释模板
    使用批处理自动发布IIS站点,基于IIS7及以上
    Win10系统无法安装可选功能提示错误代码0x800F081F的解决方法
  • 原文地址:https://www.cnblogs.com/lovewaits/p/13177170.html
Copyright © 2011-2022 走看看