3DRPG游戏开发核心功能04

您所在的位置:网站首页 scriptableobject用法 3DRPG游戏开发核心功能04

3DRPG游戏开发核心功能04

#3DRPG游戏开发核心功能04| 来源: 网络整理| 查看: 265

主要技术:Scripts Object 数值文件,角色升级系统,JSON数据保存

Scripts Object 数值文件

CharacterData 人物数值

生命数值

在菜单中创建数值文件类型

[CreateAssetMenu(fileName ="New Data", menuName = "Character Stats/Data")]

生命基础数值类型(玩家和敌人各一个)

12345678910111213141516# CharacterData_SO[CreateAssetMenu(fileName ="New Data", menuName = "Character Stats/Data")]public class CharacterData_SO : ScriptableObject{ [Header("Stats Info")] // 最大血量 public int maxHealth; // 当前血量 public int currentHealth; // 基础防御 public int baseDefence; // 当前防御 public int currentDefence; [Header("Kill")] public int killPoint;}

读取数据类型:用属性的方法读写给GameObject(挂载该脚本给玩家和敌人)

12345678910111213141516171819202122232425262728293031# CharacterStatespublic class CharacterStates : MonoBehaviour{ public CharacterData_SO characterData; public AttackData_SO attackData; // 可读 可写 // 最大生命值 public int MaxHealth { get { if (characterData != null) return characterData.maxHealth; else return 0; } set { characterData.maxHealth = value; } } // 当前生命值 public int CurrentHealth { get{ if (characterData != null) return characterData.currentHealth; else return 0; } set{ characterData.currentHealth = value; } } // 基础防御力 public int BaseDefence { get{if (characterData != null) return characterData.baseDefence; else return 0; } set{ characterData.baseDefence = value; } } // 当前防御力 public int CurrentDefence { get{ if (characterData != null) return characterData.currentDefence; else return 0; } set{ characterData.currentDefence = value; } }}

使用

123456789101112# PlayerControllerpublic class PlayerController : MonoBehaviour{ private CharacterStates characterStates; void Awake() { characterStates = GetComponent(); } void Start() { characterStates.MaxHealth = 2; } 攻击数值

在菜单创建攻击数值模板

[CreateAssetMenu(fileName = "New Attack", menuName = "Attack/Attack Data")]

攻击数值类型(玩家和敌人各一个)

123456789101112131415161718[CreateAssetMenu(fileName = "New Attack", menuName = "Attack/Attack Data")]public class AttackData_SO : ScriptableObject{ //攻击距离 public float attackRange; //远程距离 public float skillRange; //冷却时间 public float coolDown; //最小攻击值 public float minDange; // 最大攻击值 public float maxDamage; // 暴击 public float criticalMultiplier; //暴击率 public float criticalChance;}

使用 characterStates.attackData.attackRange

1234567# Player Controller//修改攻击范围参数,持续不断循环>攻击范围,武器长度while (Vector3.Distance(attackTarget.transform.position, transform.position) > characterStates.attackData.attackRange){ agent.destination = attackTarget.transform.position; // 点击目标 yield return null;} 1234567891011121314151617# Enemy Controller// 近战bool TargetInAttackRange(){ if (attackTarget != null) return Vector3.Distance(attackTarget.transform.position, transform.position)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3