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

发布于:2025-07-29 ⋅ 阅读:(14) ⋅ 点赞:(0)

 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

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


网站公告

今日签到

点亮在社区的每一天
去签到