[Unity]DND规则RPG制作&学习日志3-种族&职业

[Unity]DND规则RPG制作&学习日志3-种族&职业DND 广受欢迎的原因之一 便是玩家在其中扮演的角色极其丰富的多样性 可供玩家选择的种族多达 9 种 而且每个种族还细分为多个亚种

大家好,欢迎来到IT知识分享网。

前言

种种原因最近时间紧张。。。本次基础实现了角色的种族与职业选择,以及角色的起名。

简介

DND广受欢迎的原因之一,便是玩家在其中扮演的角色极其丰富的多样性,可供玩家选择的种族多达9种,而且每个种族还细分为多个亚种。角色的职业选择也多达12种,每个职业在到达一定等级后也可选择更加细致的副职方向,并且一个角色可选择兼职其他职业。

本次仅简单实现了职业和种族的选择,不包括种族亚种、职业副职和兼职的选择。

[Unity]DND规则RPG制作&学习日志3-种族&职业

种族

多元宇宙中的智慧种族并非都适合成为受玩家控制的冒险者角色。矮人、精灵、半身人以及人类是在冒险小队中最常见的种族。龙裔、侏儒、半精灵、半兽人以及提夫林则较少成为冒险者。卓尔,作为一种精灵亚种也属于比较少见的例子。

你所选定的种族关系到该角色的方方面面,并决定了你的角色在其冒险生涯中始终贯彻的某些基本素质。当你做出决定时,请务必记住你想要扮演的角色是何种类型。例如,半身人非常适合成为行藏隐匿的游荡者;矮人可以是个顽强的战士;而精灵则更适合成为掌握奥术魔法的大师。

[Unity]DND规则RPG制作&学习日志3-种族&职业

可选择的种族有人类、精灵、矮人、龙裔、侏儒、半精灵、半兽人、半身人、提夫林。由于还未构建详细的角色特质,所以目前仅仅只是选择角色的种族而已。

职业

 职业是对角色能做何事最主要的概括。它不仅仅是一项专业,还是该角色躬行实践所有行为的定义。职业的概念塑造了你对世界的思考和互动方法,以及你与多元宇宙中其他人或力量的关联。例如一名牧师可能自认作一名忠心的奴仆,并协助推进某神祇的计划,或是参与到各种神能的阴谋斗争中。因而牧师可能会认识一些与其拥有共同信仰的教士、圣武士和信徒。

[Unity]DND规则RPG制作&学习日志3-种族&职业 以上为DND规则中所有职业及其简介。 以下为实现的效果图

[Unity]DND规则RPG制作&学习日志3-种族&职业

[Unity]DND规则RPG制作&学习日志3-种族&职业

同样,由于暂时未构建详细的角色特质,目前仅能选择职业而已。

源码

character.cs 

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public enum CharacterAbility { Strength, Dexterity, Constitution, Intelligence, Wisdom, Charisma } [Serializable] public class Ability { public int abilityScore; public CharacterAbility ability; public int Mod { get { int mod = abilityScore - 10; mod += mod < 0 ? -1 : 0; return mod / 2; } } public Ability(CharacterAbility ability, int abilityScore) { this.ability = ability; this.abilityScore = abilityScore; } } public enum CharacterSkill { Athlethics, Thievery, Stealth, History, Arcane, Perception, Survival, Persuasion, Bluff } [Serializable] public class Skill { public CharacterSkill skill; public CharacterAbility abilityMod; public bool trained; public int bonus; public Skill(CharacterSkill skill, CharacterAbility ability, bool trained = false, int bonus = 0) { this.skill = skill; this.abilityMod = ability; this.bonus = bonus; this.trained = trained; } public int GetSkillValue(Character character) { int v = character.GetAbilityMod(abilityMod); v += bonus; v += trained ? 4 : 0; return v; } } [CreateAssetMenu] public class Character : ScriptableObject { public string Name; public Race race; public Class classOfCharacter; public List<Ability> abilities; public List<Skill> skills; [SerializeField] SkillList skillBaseStructure; internal void ChangeAbilityScore(int by, CharacterAbility ability) { Ability a = abilities[(int)ability]; a.abilityScore += by; if (a.abilityScore < 1) a.abilityScore = 1; } [ContextMenu("Generate Character")] public void GenerateCharacterBase() { abilities = new List<Ability>(); abilities.Add(new Ability(CharacterAbility.Strength, 10)); abilities.Add(new Ability(CharacterAbility.Dexterity, 10)); abilities.Add(new Ability(CharacterAbility.Constitution, 10)); abilities.Add(new Ability(CharacterAbility.Intelligence, 10)); abilities.Add(new Ability(CharacterAbility.Wisdom, 10)); abilities.Add(new Ability(CharacterAbility.Charisma, 10)); skills = new List<Skill>(); for (int i = 0; i < skillBaseStructure.skills.Count; i++) { Skill s = skillBaseStructure.skills[i]; skills.Add(new Skill(s.skill, s.abilityMod)); } } internal int GetAbilityMod(CharacterAbility abilityMod) { return abilities[(int)abilityMod].Mod; } internal Skill GetSkill(CharacterSkill skill) { return skills[(int)skill]; } internal void TrainSkill(CharacterSkill skill) { Skill skillToTrain = GetSkill(skill); skillToTrain.trained = !skillToTrain.trained; } } 

characterSettingPanel.cs

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class CharacterSettingPanel : MonoBehaviour { [SerializeField] TMPro.TMP_InputField nameTextField; CharacterPanel characterPanel; [SerializeField] TMPro.TMP_Dropdown classDropDown; [SerializeField] TMPro.TMP_Dropdown raceDropDown; [SerializeField] ListOfRaces listOfRaces; [SerializeField] ListOfClasses listOfClasses; private void Awake() { characterPanel = GetComponentInParent<CharacterPanel>(); } private void Start() { UpdateNameField(); UpdateDropDownLists(); } private void UpdateDropDownLists() { classDropDown.ClearOptions(); List<string> classesOptions = new List<string>(); for (int i = 0; i < listOfClasses.classes.Count; i++) { classesOptions.Add(listOfClasses.classes[i].Name); } classDropDown.AddOptions(classesOptions); if (characterPanel.character.classOfCharacter != null) { classDropDown.value = listOfClasses.classes.IndexOf(characterPanel.character.classOfCharacter); } raceDropDown.ClearOptions(); List<string> raceOptions = new List<string>(); for (int i = 0; i < listOfRaces.races.Count; i++) { raceOptions.Add(listOfRaces.races[i].Name); } raceDropDown.AddOptions(raceOptions); if (characterPanel.character.race != null) { raceDropDown.value = listOfRaces.races.IndexOf(characterPanel.character.race); } } public void UpdateCharacterClass() { characterPanel.character.classOfCharacter = listOfClasses.classes[classDropDown.value]; } public void UpdateCharacterRace() { characterPanel.character.race = listOfRaces.races[raceDropDown.value]; } private void UpdateNameField() { nameTextField.text = characterPanel.character.Name; } public void UpdateCharacterName() { characterPanel.character.Name = nameTextField.text; } } 

Race.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu] public class Race : ScriptableObject { public string Name; } 

ListOfRaces.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu] public class ListOfRaces : ScriptableObject { public List<Race> races; } 

Class.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu] public class Class : ScriptableObject { public string Name; } 

ListOfClasses.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu] public class ListOfClasses : ScriptableObject { public List<Class> classes; } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/140376.html

(0)
上一篇 2025-05-27 13:15
下一篇 2025-05-27 13:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信