类银河恶魔城学习记录-2-3-Enemy-SkeletonIdle和Move P49的错误示范

//注意:本文章中将update写成了updata导致其无法正常运行,在参考过程中请务必将其改正

Enemy.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : Entity
{
    //以下全为受保护的对象
    public Rigidbody2D rb { get; private set; }
    public Animator anim { get; private set; }
    //设置可读属性
   
    public EnemyStateMachine stateMachine { get; private set; }//定义敌人状态机类
    //唤醒控制器
    protected override void Awake()
    {
        base.Awake();
      
        stateMachine = new EnemyStateMachine();//创建敌人状态机类
    }
    //持续更新敌人配置
    protected override void Updata()
    {
        base.Updata();

        stateMachine.currentState.Update();
    }
}

 SkeletonIdleState.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SkeletonIdleState : EnemyState
{
    EnemySkeleton enemy;
    public SkeletonIdleState(Enemy _enemyBase,EnemyStateMachine _stateMacine , string _animBoolName, EnemySkeleton _enemy) : base(_enemyBase,_stateMacine, _animBoolName)
    {
        enemy = _enemy;
    }

    public override void Enter()
    {
        base.Enter();
        stateTimer = 1f;
    }

    public override void Exit()
    {
        base.Exit();
    }

    public override void Update()
    {
        base.Update();
        if (stateTimer < 0)
        {
            stateMachine.ChangeState(enemy.moveState);
        }
    }

 
}

 SkeletonMoveState.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SkeletonMoveState : EnemyState
{
    private EnemySkeleton enemy;
    public SkeletonMoveState( Enemy _enemyBase,EnemyStateMachine _stateMacine, string _animBoolName, EnemySkeleton _enemy) : base(_enemyBase,_stateMacine, _animBoolName)
    {
        this.enemy = _enemy;
    }

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

      
    }

    public override void Exit()
    {
        base.Exit();
    }

    public override void Update()
    {
        base.Update();
        enemy.SetVelocity(2 * enemy.facingDir, enemy.rb.velocity.y);
        if(enemy.IsWallDetected()||!enemy.IsGroundDetected())
        {
            enemy.Flip();
            stateMachine.ChangeState(enemy.idleState);
        }
    }
}

 EnemySkeleton.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemySkeleton : Enemy

{
    #region States
    public SkeletonIdleState idleState { get; private set; }
    public SkeletonMoveState moveState { get; private set; }
    #endregion
    protected override void Awake()
    {
        base.Awake();
        idleState = new SkeletonIdleState(this,stateMachine, "Idle",this);
        moveState = new SkeletonMoveState(this,stateMachine, "Move",this);
    }

    protected override void Start()
    {
        base.Start();
    }

    protected override void Updata()
    {
        base.Updata();
    }
}
报错信息与解决方案

The same field name is serialized multiple times in the class or its parent class. This is not supported: Base(EnemySkeleton) <rb>k__BackingField

报错,子脚本和 父脚本 具有 相同 名字 和类型 的变量。

错误原因,Enemy继承了Entity时并未将

  1. public Rigidbody2D rb { get; private set; }

  2. public Animator anim { get; private set; }删除

解决方法:

把子脚本 或者 父脚本 的int 类型 的同名变量test_更改其中的一个 名字,使其 都不重名。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值