为什么在游戏 运行 时更改角色的行走速度仅对其中一个角色生效?
Why when changing the walking speed of the characters while the game is running taking effect only for one of them?
在层次结构中我有两个 ThirdPersonController
脚本附在他们每个人身上
然后我转到 ThirdPersonController 脚本并将速度变量更改为 public:
[SerializeField] public float m_MoveSpeedMultiplier = 1f;
然后在我的脚本顶部我做了:
public float walkSpeed = 10f;
private ThirdPersonCharacter[] thirdPersonCharacter;
然后在觉醒中
void Awake()
{
thirdPersonCharacter = new ThirdPersonCharacter[2];
for(int i = 0; i < thirdPersonCharacter.Length; i++)
{
thirdPersonCharacter[i] = GetComponent<ThirdPersonCharacter>();
}
}
然后在更新
void Update()
{
thirdPersonCharacter[0].m_MoveSpeedMultiplier = walkSpeed;
thirdPersonCharacter[1].m_MoveSpeedMultiplier = walkSpeed;
}
但是当游戏是 运行 并且我在脚本的 Inspector 中的 ThirdPersonController 之一中更改 walkSpeed 值从 10 到 1 或从 10 到 20 它只影响一个角色.为什么它不影响他们两个?
因为它不起作用我试过:
public ThirdPersonCharacter[] thirdPersonCharacter;
然后在Start函数中去掉了之前的代码。
在将 thirdPersonCharacter 的大小更改为 2 后,将 ThirdPersonController 和 ThirdPersoncontroller(1) 拖到脚本中的检查器中。脚本现在仅附加到 ThirdPersonController。
并且仍然在 运行 更改速度值时它只影响其中一个,只有 ThirdPersonController。
我的总体目标是能够在游戏 运行 时实时控制 ThirdPersonController 和 ThirdPersonController(1) 相同的速度,然后还能够分别控制每一个速度。所以我以后会有 3 个速度值。两人各一份,每人两份。但是我还不能让他们都改变速度。
thirdPersonCharacter[i] = GetComponent<ThirdPersonCharacter>();
以上代码 returns 每次都是相同的(第一个)组件。试试这个;
void Awake()
{
thirdPersonCharacter = GetComponents<ThirdPersonCharacter>();
}
该问题与 post.
中的问题类似
下面的代码行:
thirdPersonCharacter[i] = GetComponent<ThirdPersonCharacter>();
将 return 引用 ThirdPersonCharacter
附加到 GameObject this
脚本附加到。它会在for循环中returnthe-same引用两次
要获得不同的 ThirdPersonCharacter
,您必须找到 ThirdPersonCharacter
附加到的每个单独的 GameObject,然后对它们执行 GetComponent
。
GameObject tpc1 = GameObject.Find("TPC1");
thirdPersonCharacter[0] = tpc1.GetComponent<ThirdPersonCharacter>();
GameObject tpc2 = GameObject.Find("TPC2");
thirdPersonCharacter[1] = tpc2.GetComponent<ThirdPersonCharacter>();
将TPC1和TPC2替换为ThirdPersonCharacter
附加的GameObjects的名称。
您可以找到其他方法来做到这一点 。
在层次结构中我有两个 ThirdPersonController 脚本附在他们每个人身上
然后我转到 ThirdPersonController 脚本并将速度变量更改为 public:
[SerializeField] public float m_MoveSpeedMultiplier = 1f;
然后在我的脚本顶部我做了:
public float walkSpeed = 10f;
private ThirdPersonCharacter[] thirdPersonCharacter;
然后在觉醒中
void Awake()
{
thirdPersonCharacter = new ThirdPersonCharacter[2];
for(int i = 0; i < thirdPersonCharacter.Length; i++)
{
thirdPersonCharacter[i] = GetComponent<ThirdPersonCharacter>();
}
}
然后在更新
void Update()
{
thirdPersonCharacter[0].m_MoveSpeedMultiplier = walkSpeed;
thirdPersonCharacter[1].m_MoveSpeedMultiplier = walkSpeed;
}
但是当游戏是 运行 并且我在脚本的 Inspector 中的 ThirdPersonController 之一中更改 walkSpeed 值从 10 到 1 或从 10 到 20 它只影响一个角色.为什么它不影响他们两个?
因为它不起作用我试过:
public ThirdPersonCharacter[] thirdPersonCharacter;
然后在Start函数中去掉了之前的代码。 在将 thirdPersonCharacter 的大小更改为 2 后,将 ThirdPersonController 和 ThirdPersoncontroller(1) 拖到脚本中的检查器中。脚本现在仅附加到 ThirdPersonController。
并且仍然在 运行 更改速度值时它只影响其中一个,只有 ThirdPersonController。
我的总体目标是能够在游戏 运行 时实时控制 ThirdPersonController 和 ThirdPersonController(1) 相同的速度,然后还能够分别控制每一个速度。所以我以后会有 3 个速度值。两人各一份,每人两份。但是我还不能让他们都改变速度。
thirdPersonCharacter[i] = GetComponent<ThirdPersonCharacter>();
以上代码 returns 每次都是相同的(第一个)组件。试试这个;
void Awake()
{
thirdPersonCharacter = GetComponents<ThirdPersonCharacter>();
}
该问题与
下面的代码行:
thirdPersonCharacter[i] = GetComponent<ThirdPersonCharacter>();
将 return 引用 ThirdPersonCharacter
附加到 GameObject this
脚本附加到。它会在for循环中returnthe-same引用两次
要获得不同的 ThirdPersonCharacter
,您必须找到 ThirdPersonCharacter
附加到的每个单独的 GameObject,然后对它们执行 GetComponent
。
GameObject tpc1 = GameObject.Find("TPC1");
thirdPersonCharacter[0] = tpc1.GetComponent<ThirdPersonCharacter>();
GameObject tpc2 = GameObject.Find("TPC2");
thirdPersonCharacter[1] = tpc2.GetComponent<ThirdPersonCharacter>();
将TPC1和TPC2替换为ThirdPersonCharacter
附加的GameObjects的名称。
您可以找到其他方法来做到这一点