学习游戏制作记录(改进剑投掷状态)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
今天的内容比较少,希望大家可以把脚本代码进行一些整理。