如何从播放器位置设置随机目标

时间:2018-03-10 14:02:44

标签: c# unity3d

我是Unity的新手。在我的项目中,我已经在玩家位置实例化了一个球。从球员位置,球应该到40到90度的随机位置。如果玩家处于0,0,0位置。目标应该是10,0,0。

我已经完成了代码。但它并不完美。我做错了什么。 它应该随机设定目标。

public class Movetowards3: MonoBehaviour {

    // Use this for initialization
    GameObject go;
    public GameObject prefab;
    public GameObject Target;
    public GameObject endPos1;
    public Vector3 endpos2;
    float speed = 5f;
    public bool s=false;
    public GameObject player;
    public bool  s2=false;

    void Start () {
        go = Instantiate(prefab, player.transform.localPosition, Quaternion.identity);
    }

    // Update is called once per frame
    void Update () {
        player=GameObject.FindGameObjectWithTag("Player");

        if(s==true)
        {

            go = Instantiate(prefab, player.transform.localPosition, Quaternion.identity);
            endpos2 =new Vector3(player.transform.position.x+10f,player.transform.position.y,player.transform.position.z);
            s=false;
        }

        if(go.transform.position != endpos2)
        {
            Vector3 newPos = Vector3.MoveTowards(go.transform.localPosition, endpos2,speed * Time.deltaTime);
            go.transform.position = newPos;
        }
    }
}

我增加了x的值,但我认为它不正确。

1 个答案:

答案 0 :(得分:0)

核心代码是正确的,但问题是endpos没有实例化的机会。

我认为这是你的问题:

下面:

public bool s=false;

您将s设置为false,以后再也不会更改它。这成为一个问题:

if(s==true)
    {

        go = Instantiate(prefab, player.transform.localPosition, Quaternion.identity);
        endpos2 =new Vector3(player.transform.position.x+10f,player.transform.position.y,player.transform.position.z);
        s=false;
    }

并且,您需要这些实例化以在下一个if语句中启动您的操作:

   if(go.transform.position != endpos2)
{
    Vector3 newPos = Vector3.MoveTowards(go.transform.localPosition, endpos2,speed * Time.deltaTime);
    go.transform.position = newPos;
}

所以我建议您制作public bool s=true;

或者在第一个if语句中添加else语句。

另外只是一个侧面评论,你实例化两次,我不知道这是否是有意的,但他们正在做同样的事情。