0

看各种公告板,这是一个常见的问题,但我在网上找不到任何好的答案。

我的项目有一辆通过箭头键移动的第一人称汽车。我希望安装在汽车上的枪能够通过可以瞄准当前屏幕上任何位置的十字准线进行射击。现在子弹一直从中间射出,除了我点击屏幕没有任何反应的时候(大约 50%)。这是我通过网络上的各种脚本获得的代码:

var speed = 20;
var bullet: GameObject;

function Update () {

var hit : RaycastHit;

if(Input.GetButtonDown("Fire1")){
    var ray = Camera.main.ScreenPointToRay (Input.mousePosition); //ray from
    // through the mousePosition.



    if(Physics.Raycast(ray, hit, 1000)) { //does the ray collide with 
    // anything.

        //add stuff here for finding type of object and such.
        Debug.Log("Hit Something at mouse position");
        Debug.DrawRay (ray.origin, ray.direction * 10, Color.yellow);
        //Display the ray.
        var projectile:GameObject = Instantiate(bullet,transform.position,transform.rotation);

        projectile.rigidbody.velocity = transform.forward * speed;
    }
}

}

如果有人可以提供帮助,将不胜感激。

4

2 回答 2

1

您的光线是正确的(指向屏幕中间),但这与您制作子弹的方式无关。子弹基于 transform.forward * 速度移动。您需要做的是获取射线的命中点,然后获取从子弹原点到该点的方向。

Vector3 direction = hit.point - projectile.transform.position;
projectile.rigidbody.velocity = direction * speed;

对于 screenPointToRay 来说1000相当低,因此如果您想避免将来出现问题,您可能需要将其提高很多。

刚体也已被弃用,我不确定您是否应该像那样直接执行 (GameObject).rigidbody

http://docs.unity3d.com/ScriptReference/GameObject-rigidbody.html

于 2015-06-08T23:28:03.767 回答
0

在没有实际向您发布任何代码的情况下,我可以告诉您,如果我理解您的尝试,您可能应该研究的是为什么您的射弹从变换的旋转而不是射线的旋转来设置其旋转。

射弹显然正在从车辆上获得它的所有属性(包括那些应该与原点分离的属性)并相应地跟随。

尝试将弹丸的旋转设置为射线的旋转。

此外,由于要测试的距离很长,您的射线很可能只命中一半时间。尝试增加该数字,或为其创建墙壁以使其在更短的范围内发生碰撞。

于 2012-06-20T17:55:49.077 回答