- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 unity 项目越来越大,我有点害怕。
我创建了一个具有大量协同工作的脚本的播放器。 (最近它会更大。)这是它的样子。
播放器的所有脚本都继承自一个基本脚本,该脚本仅包含一些 protected 静态变量,这些变量可以从所有其他脚本更改,因此我可以从任何单个脚本检查播放器的任何状态。
其中一些:
public class BasicCharacter : MonoBehaviour
{
protected static Rigidbody2D rb2d;
protected static CharacterRenderer characterRenderer;
protected static Vector2 directionLookingAt;
protected static Vector2 movement;
protected static Vector2 attackPos;
protected static bool hasDashedAttack = false;
protected static bool hasFinalizerAttack = false;
protected static bool isUsingMovementSkills = false;
protected static bool isStringingAttacks = false;
...
这是我如何调用其中一些变量作为执行其他一些操作的条件的示例:
private GameObject GetAttackAnimation()
{
if(hasFinalizerAttack)
{
return empoweredAttackVFX;
}
else if (hasDashedAttack)
{
return dashedAttackVFX;
}
else if (isAttackCharged)
{
return chargedAttackVFX;
}
return basicAttackVFX;
}
我担心的是,我觉得我在这里做的工作不够干净和漂亮。我认为这是面对这个问题的更好方式。在我的代码中,我必须记住玩家在引入新游戏机制之前可能处于的每一种可能状态。
我有几个问题:
我是否需要一个 PlayerManager 来跟踪可能的行为?
有没有办法不将每个脚本都添加到游戏对象中,这样它看起来更干净?
BasicCharacter 脚本是否可持续?
最佳答案
角色的某些部分可以通过使用 ScriptableObjects ( https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/scriptable-objects ) 变得更加模块化,它们不一定会降低复杂性(游戏很复杂,你必须接受这一点)但它们可以至少帮助整理你的播放器 Controller 并将你的功能分散到不同的更独立的类中,这些类方便地内置到 Unity 的编辑器中,允许你拖放它们,更重要的是,从你的主要播放器预制件中单独编辑它们,允许您可以避免“巨大的脚本数据墙”问题。
例如,在这种情况下,我会将能力数据和增益/恶意数据分离到 ScriptableObjects 中。您可以在那里设置任何您想要的类层次结构,并将它们作为单独的游戏 Assets 修改给您的核心玩家(如果您投入足够的工作,您甚至可以使它们足够模块化以供敌人和您的玩家使用,这很漂亮方便!)
一旦你设置了你的脚本对象,你就可以给它们一些基本功能,比如'OnTick'、'OnTakeDamage'、'OnActivate'等等,甚至有一些内部状态,比如'IsSkillActive'等等,然后你只需存储它们作为播放器对象上的列表或字典,并遍历它们。一个快速的伪代码可能是:
bool canInput = true;
foreach(Ability in Abilities)
{
if (Ability.IsSkillActive())
{
canInput = false; //still in the middle of an active ability
break;
}
}
if (canInput)
{
//Do allow player to have input here.
}
或者你可以:
class DamageOverTimeDebuff : ScriptableObject
{
int damagePerTick = 1;
OnTick(PlayerObject afflictedPlayer)
{
afflictedPlayer.TakeDamage(1);
}
}
通过这种方式,您可以使能力和效果更加模块化,并通过组合构建您的玩家,而不是为每个场景都使用 if 语句。
也就是说,需要权衡取舍,这会提高您的抽象级别,从而使极其具体的行为或特殊的边缘情况更难实现。您可能还会花费大量时间为只用于一种效果的减益效果或能力编写特定函数,在这种情况下,这只是额外的工作。
这只是一种可能的策略,您描述的问题是每个游戏都必须面对并以不同方式处理的问题。也许 ScriptableObjects 可以帮助您将功能分解成更小的东西,也许它们只是妨碍您的额外样板。这取决于您游戏的具体需求。
关于c# - 如何正确地继续将多个脚本添加到游戏对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55443249/
我有 powershell 脚本。通过调度程序,我运行 bat 文件,该文件运行 PS1 文件。 BAT文件 Powershell.exe -executionpolicy remotesigned
什么更快? 或者 $.getScript('../js/SOME.js', function (){ ... // with $.ajaxSetup({ cache: true });
需要bash脚本来显示文件 #!/bin/bash my_ls() { # save current directory then cd to "$1" pushd "$1" >/dev/nu
我有一个输入 csv 文件,实际上我需要在输入文件中选择第 2 列和第 3 列值,并且需要转换两个值的时区(从 PT 到 CT),转换后我需要替换转换后的时区值到文件。 注意: 所有输入日期值都在太平
我正在使用/etc/init.d/httpd 作为 init.d 脚本的模板。我了解文件中发生的所有内容,但以下行除外: LANG=$HTTPD_LANG daemon --pidfile=${pid
我有以下选择: python runscript.py -O start -a "-a "\"-o \\\"-f/dev/sda1 -b256k -Q8\\\" -l test -p maim\""
我对 shell 脚本完全陌生,但我需要编写一个 shell 脚本来检查文件是否存在,然后移动到另一个位置 这是我写的: 一旦设备崩溃,我就会在/storage/sdcard1/1 中收集日志 #!/
我正在使用 bash 脚本从文本文件中读取数据。 数据: 04:31 Alex M.O.R.P.H. & Natalie Gioia - My Heaven http://goo.gl/rMOa2q
这是单击按钮时运行的 javascript 的结尾 xmlObj.open ('GET', /ajax.php, true); xmlObj.send (''); } 所以这会执行根目录中的php脚本
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我需要将文件转换为可读流以通过 api 上传,有一个使用 fs.createReadStream 的 Node js 示例。任何人都可以告诉我上述声明的 python 等价物是什么? 例子 const
我有一个 shell 脚本 cron,它从同一目录调用 python 脚本,但是当这个 cron 执行时,我没有从我的 python 脚本中获得预期的输出,当我手动执行它时,我的 python 脚本的
如何使 XMLHttpRequest (ajax) 调用的 php 脚本安全。 我的意思是,不让 PHP 文件通过直接 url 运行,只能通过脚本从我的页面调用(我不想向未登录的用户显示数据库结果,并
我正在尝试添加以下内容 我正在使用经典的 asp。但我不断收到的错误是“一个脚本 block 不能放在另一个脚本 block 内。”我尝试了此处的 document.write 技术:Javasc
如何从另一个 PHP 脚本(如批处理文件)中运行多个 PHP 脚本?如果我了解 include 在做什么,我认为 include 不会起作用;因为我正在运行的每个文件都会重新声明一些相同的函数等。我想
我想创建具有动态内容的网页。我有一个 HTML 页面,我想从中调用一个 lua 脚本 如何调用 lua 脚本? ? ? 从中检索数据?我可以做类似的事情吗: int xx = 0; xx
我删除了我的第一个问题,并重新编写了更多细节和附加 jSfiddle domos。 我有一个脚本,它运行查询并返回数据,然后填充表。表中的行自动循环滚动。所有这些工作正常,并通过使用以下代码完成。然而
我尝试使用 amp 脚本,但收到此错误: “[amp-script] 脚本哈希未找到。amp-script[script="hello-world"].js 必须在元[name="amp-script
我有一个读取输入的 Shell 脚本 #!/bin/bash echo "Type the year that you want to check (4 digits), followed by [E
我正在从 nodejs 调用 Lua 脚本。我想传递一个数组作为参数。我在 Lua 中解析该数组时遇到问题。 下面是一个例子: var script = 'local actorlist = ARGV
我是一名优秀的程序员,十分优秀!