0

嗨,我正在尝试创建一个球体并朝我从屏幕中间看的方向发射它。但是我目前从中间发射,但总是在相同的方向和高度。tanx 寻求帮助。

     #pragma strict
         private var globe:GameObject;
              var globeMaterial:Material;
              private var shootIndex:boolean;

               function Start () {

}

function Update () {



if(Input.GetMouseButtonDown(0))
{
if (shootIndex==false){
globe=GameObject.CreatePrimitive(PrimitiveType.Sphere);
globe.renderer.material=globeMaterial;
globe.AddComponent(Light);

globe.light.color=Color.blue;
globe.AddComponent(Rigidbody);

//globe.transform.position=Camera.main.ScreenToViewportPoint(Input.mousePosition);
globe.transform.position=Camera.main.transform.position;
globe.transform.localScale=Vector3(0.5,0.5,0.5);


globe.rigidbody.AddRelativeForce(Vector3.forward*1000);

shootIndex=true;

}
else if (shootIndex==true){
Destroy(globe);
shootIndex=false;
}

}

}
4

1 回答 1

1

您的问题是 Vector3.forward 始终是向量 (0,0,1),因为它是朝着 z 坐标迈出的一步(在这个类比中,y 向上,x 向右),如下所示:

http://docs.unity3d.com/Documentation/ScriptReference/Vector3-forward.html

对此的两种解决方案是:

1.)在相机指向的方向上添加力:

globe.rigidbody.AddForce(Camera.main.transform.forward * 1000);

您在这里不需要“AddRelativeForce”,因为您的 Globe 不会以任何方式旋转。所以“AddForce”和“AddRelativeForce”具有相同的效果。

2.)或者改变球体的旋转,然后将球体向前发送(相对于自身的旋转):

globe.transform.rotation = Camera.main.transform.rotation;
globe.rigidbody.AddRelativeForce(Vector3.forward * 1000);
于 2013-10-27T16:56:21.643 回答