查看各种公告牌,这是一个常见问题,但我在网上找不到任何好的答案。
我的项目有第一人称汽车通过箭头键移动。我想在汽车上安装一把枪,能够通过十字准线进行拍摄,可以瞄准当前屏幕上的任何位置。现在,子弹一直在中间射击,除了我点击屏幕没有任何反应(约为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;
}
}
}
如果有人可以提供帮助,我们将非常感激。
答案 0 :(得分:0)
在没有实际发布任何代码的情况下,我可以告诉你,你应该研究的是为什么你的射弹从变换的旋转设置其旋转而不是你的光线旋转,如果我理解你的尝试。
射弹显然从车辆上获得了它的所有属性(包括那些应该脱离起源的属性)并且相应地跟随它。
尝试将射弹的旋转设置为射线的旋转。
此外,由于您需要测试的距离,因此您的光线很可能只会占用一半的时间。尝试增加该数字,或者为它设置墙壁以在较短的范围内发生碰撞。
答案 1 :(得分:0)
你的光线是正确的(指向屏幕中间),但它与你的子弹行进方式无关。子弹基于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