使对象从A移动到B并一直返回

时间:2014-11-03 08:45:08

标签: c# unity3d

您好,感谢您阅读本文。

我在Unity中创建了一个小型2D游戏,我对Unity仍然很陌生。 我尝试了很长时间,很难搜索和检查一个公会/教程,关于如何让我的“怪物”从A - >移动; B,当他到达B然后再回来。他需要一直这样做。

怪物有一个Box Collider,一个Rigidbody和一个"Destroyer" script,所以如果你遇到他,你就死了。

我真的很想得到关于如何创造怪物运动的一些帮助。

非常感谢。

1 个答案:

答案 0 :(得分:0)

这很简单,基本上你正在寻找的是一个巡逻功能,可以像这样使用:

  • GameObject A :( Cube,Cube Collider,Trigger = true,Disabled Mesh,Tag = PatrolPoint)
  • GameObject B :( Cube,Cube Collider,Trigger = true,Disabled Mesh,Tag = PatrolPoint)
  • GameObject C:移动的npc。

然后,您需要创建一个名为“Patrol”的脚本,该脚本将处理巡逻点的生成和ID。该脚本将被附加到GameObject A和B。

using UnityEngine;
using System;

public class Patrol : MonoBehavior 
{
    public int patrolID;

    public GameObject FindNextPoint() 
    {
        GameObject base;
        foreach(GameObject go in GameObject.FindGameObjectsWithTag("PatrolPoint")) 
        {
            if(base == null && go.GetComponent<Patrol>().patrolID != patrolID) 
            {
                base = go;
            }
            if(go.GetComponent<Patrol>().patrolID == (patrolID) + 1) {
                return go;
            }
        }
        // Return the first object found in the scene that isn't this object.
        return base
    }

}

接下来,您需要在脚本中使用Unity的OnTriggerEnter()函数,该函数附加到播放器(或npc移动) - http://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html

using UnityEngine;
using System.Collections;

public class NpcScript : MonoBehaviour 
{

    private Vector3 targetLocation;

    void OnTriggerEnter(Collider other) 
    {
        if(other.gameObject.tag == "PatrolPoint")
        {
            setWalkTo(other.gameObject);
        }
    }

    void setWalkTo(GameObject go) 
    {
        targetLocation = go.GetComponent<Patrol>().FindNextPoint().transform.position;
    }

}

你可以拥有任意数量的PatrolPoints,只需确保将PatrolID变量设置为不同的PatrolID变量,角色将按顺序走到它们。

---你必须添加自己的动作代码,如果你需要帮助,请告诉我。只需将gameobjects位置移向targetLocation

即可