当前位置: 首页 > news >正文

学习游戏制作记录(改进剑投掷状态)7.28

 1.实现玩家瞄准状态的实时翻转

PlayerAimSwordState脚本:

    Vector2 mouseposition=Camera.main.ScreenToWorldPoint(Input.mousePosition);//鼠标位置

    if (_Player.transform.position.x < mouseposition.x && _Player.facingDir == -1)//位置检测
_Player.Flip();

    else if (_Player.transform.position.x > mouseposition.x && _Player.facingDir == 1)
_Player.Flip();
}//Update()中调用

2.实现进入接剑状态,并实现接剑的翻转和接住剑的冲击力

Player脚本:

public float SwordReturnImpact;//击退力

    public void CatchTheSword()//之前叫clearTheSword,改一下名字
{
stateMachine.ChangeState(CatchSword);//进入接剑状态
Destroy(sword);
}

在接剑动画的最后一帧上添加帧事件调用函数AnimationTrigger()

它会见TriggerCalled设置为True

PlayerCatchSwordState脚本:

public GameObject sword;//剑组件

    public override void Enter()
{
base.Enter();

        sword = _Player.sword;

        if (_Player.transform.position.x < sword.transform.position.x && _Player.facingDir == -1)//翻转
_Player.Flip();

        else if (_Player.transform.position.x > sword.transform.position.x && _Player.facingDir == 1)
_Player.Flip();

        rb.velocity = new Vector2(_Player.SwordReturnImpact * -_Player.facingDir, rb.velocity.y);//给玩家一个后退力
}

    public override void Update()
{
base.Update();

        if(TriggerCalled)//动画结束后进入待机状态
{
_PlayerStateMachine.ChangeState(_Player.idleState);
}
}

3.修复瞄准同时按下移动键的滑动和接剑时按移动会抵消冲击力的bug

在PlayerAimSwordState脚本和PlayerCatchSwordState脚本的Exit()中加上:


      _Player.StartCoroutine("BusyFor",.2f);//是玩家退出状态时进入0.2秒的忙碌状态,这状态下不能行走,关于这个协程,在我之前的文章里有出现

4.修复剑在即将碰到敌人或地面时按下返回键会行下掉的bug

Sword_Skill_Control脚本:

    public void ReturnSword()
{
rb.constraints = RigidbodyConstraints2D.FreezeAll;//锁定xyz即可
// rb.isKinematic=false;保持它为非运动学
transform.parent = null;

        isReturning = true;
}

剑在敌人后返回后会击中敌人,但我们目前还未添加剑的伤害函数

在OnTriggerEnter2D中添加

        if (isReturning)
{
return;
}

这样就直接返回,无任何影响

5.修复玩家奔跑时进入瞄准会滑动的bug

PlayerAimSwordState脚本:

_Player.SetZeroVelocity();//Update中调用设值速度为0

今天的内容比较少,希望大家可以把脚本代码进行一些整理。

http://www.lryc.cn/news/602742.html

相关文章:

  • 四、计算机组成原理——第7章:输入/输出系统
  • Unity_UI_NGUI_组合控件2
  • 数论1.01
  • socketpair函数详解
  • MCU+RTOS调试
  • STM32-基本定时器
  • JavaScript手录-排序算法篇
  • 二分查找的「左右为难」:如何优雅地找到数组中元素的首尾位置
  • 城阳区奥赛暑假公益班第三次入门组初赛模拟赛
  • 把振动数据转成音频并播放
  • 提取apk中的各种语言翻译成表格,python脚本
  • Lakehouse: Unifying DW Advanced Analytics in Open Platforms
  • 《Java 程序设计》第 8 章 - Java 常用核心类详解
  • 未授权访问漏洞 总结
  • 阿里云【免费试用】Elasticsearch 智能运维 AI 助手
  • python毕业设计案例:基于python django的抖音数据分析与可视化系统,可视化有echarts,算法包括lstm+朴素贝叶斯算法
  • Flutter渲染引擎:Impeller和Skia
  • 低成本嵌入式Linux开发方案:通过配置文件实现参数设置
  • R语言与作物模型(以DSSAT模型为例)融合应用高级实战技术
  • 亚远景-“过度保守”还是“激进创新”?ISO/PAS 8800的99.9%安全阈值之争
  • 11.Dockerfile简介
  • 神经网络CNN、RNN、Transform
  • Avalonia的自定义边框窗口
  • opencv 模块裁剪 按需安装指定模块
  • 火线、零线、地线
  • ICPC 2024 网络赛(I)
  • 网络与信息安全有哪些岗位:(3)安全运维工程师
  • C++算法实例精讲
  • Solidity基础(教程④-ERC-4626收益金库)
  • nvim编辑器