当父母移动时,如何使克隆忽略移动输入

时间:2018-11-26 10:10:45

标签: c# unity3d parent-child

我使用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);
         }
     }
 }

感谢您的帮助!

3 个答案:

答案 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(); 

让我知道您是否可以使用它;)