我使用move_states来跟踪角色的移动,但是它只能跟踪自己,当角色分成两个字符时,如何使克隆人在玩家移动时忽略玩家的输入。
脚本的motion_input部分:
private void Movement_input()
{
if (move_states == 0)
{
if (Input.GetKey(KeyCode.UpArrow))
{
move_states = 1;
target_position = transform.position + new Vector3(0, 0.8f, 0);
}
else if (Input.GetKey(KeyCode.DownArrow))
{
move_states = 1;
target_position = transform.position + new Vector3(0, -0.8f, 0);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
move_states = 1;
target_position = transform.position + new Vector3(-1, 0, 0);
}
else if (Input.GetKey(KeyCode.RightArrow))
{
move_states = 1;
target_position = transform.position + new Vector3(1, 0, 0);
}
}
}
感谢您的帮助!
答案 0 :(得分:1)
如果我没有理解错,那么您有一个可以克隆的对象,它的脚本也被克隆了。一个简单的解决方案是禁用孩子的脚本。
当您说父代时,您是指层次父代还是仅是克隆的对象?对于父级层次结构,您可以将子级与其父级分离。
答案 1 :(得分:0)
我将克隆的对象与另一个脚本一起做成单独的预制件。您可以从主脚本中获取对克隆的引用,并在每次移动克隆时对其调用一个方法。像这样的东西
private Gameobject[] copies;
private int dir;
public void MoveClones()
{
for (int i = 0; i < copies.Length; i++)
{
copies[i].SendMessage("MoveDir", dir);
}
}
然后,您的MoveDir函数在克隆对象脚本中,并且具有用于方向的单个参数。您可以在那里查看自身的移动状态。
答案 2 :(得分:0)
您有一些选择。
例如: 我将分别实例化子级,并在每个子级(甚至第一个)中都带有一个标记(例如“ clone”)。 然后,每次尝试移动其中一个(必须找出一种方法来确定哪个优先级)时,都必须通过循环搜索带有标签“ clone”的对象来检查是否有人将move_states设置为0。
其中一些代码可能是:
bool canMove = true;
for each (GameObject clone in GameObject.FindGameObjectsWithTag()){
if (clone.GetComponent<script>().move_states == 1)
canMove = false;
}
if(canMove == true)
Movement_input();
让我知道您是否可以使用它;)