使用 RayCastHit 时我的子弹的统一位置不会改变

问题描述 投票:0回答:1

我试图找出我的代码有什么问题。我只是按照教程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--;
    }

    // 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等,但仍然没有改变任何东西。希望有人可以帮助我,因为如果我的代码有问题,我什至找不到日志。

c# unity-game-engine
1个回答
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;
} 
© www.soinside.com 2019 - 2024. All rights reserved.