我的子弹的统一位置没有使用RayCastHit改变

时间:2014-07-11 10:17:38

标签: c# unity3d unityscript

我正在试图找出我的代码有什么问题。我只是按照教程here来创建一个测试游戏,但由于原因不明,我的代码不起作用。我按照教程进行操作,但我猜有些东西真的不起作用,因为他所做的代码是用Javascript进行的,而我用的是C#。当然变量有些变化。到目前为止,这是我的代码:

using UnityEngine;
using System.Collections;

public class Ammo : MonoBehaviour {

    public float damage;
    public float spread;
    public float recoil;
    public float weight;
    public int clip_rounds;
    public int ammo;
    public Transform sparks;
    public float fire_rate;

    public shells shell = shells.AP_SHELL;
    public enum shells {HEAT, AP_SHELL}

    private int mag;
    private float fire_delay = 0.0f;


    public void FireA(){
        RaycastHit hit;

        if (Physics.Raycast (transform.position, transform.forward, out hit, Mathf.Infinity)) {
            if(hit.transform.gameObject.tag=="Player"){
                hit.transform.SendMessage("M_Damage", damage);
                sparks.position = hit.point;
            }
        }

        mag--;
    }



    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        switch (shell) {
            case shells.AP_SHELL:
            if(Input.GetButton("Fire1") && Time.time > fire_delay){
                fire_delay = Time.deltaTime + fire_rate;
                FireA();
            }
            break;
            case shells.HEAT:
            if(Input.GetButtonUp("Fire1") && Time.time > fire_delay){
                fire_delay = Time.deltaTime + fire_rate;
                FireA();
            }
            break;
        }
    }
}

我怀疑RayCastHit是让我的代码无法工作的那个,尽管我对此并不十分肯定。我也尝试将transform.forward更改为Vector3.forward等,但仍然没有改变。希望有人可以帮我解决这个问题,因为如果我的代码出现问题,我甚至无法找到日志。

1 个答案:

答案 0 :(得分:0)

本教程不对内部if语句使用大括号。 sparks.position的分配与标记无关。

if (Physics.Raycast (transform.position, transform.forward, out hit, Mathf.Infinity)) {
    if(hit.transform.gameObject.tag=="Player")
        hit.transform.SendMessage("M_Damage", damage);
    sparks.position = hit.point;
}

如果在" if"的情况下省略括号,那么这是个人风格偏好的问题。应该只适用于一个声明。如果你总是使用大括号,可能会更清楚地看到if语句的结束位置。

if (Physics.Raycast (transform.position, transform.forward, out hit, Mathf.Infinity)) {
    if(hit.transform.gameObject.tag=="Player") {
        hit.transform.SendMessage("M_Damage", damage);
    }
    sparks.position = hit.point;
}