我是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的值,但我认为它不正确。
答案 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语句。
另外只是一个侧面评论,你实例化两次,我不知道这是否是有意的,但他们正在做同样的事情。