我正在试图找出我的代码有什么问题。我只是按照教程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等,但仍然没有改变。希望有人可以帮我解决这个问题,因为如果我的代码出现问题,我甚至无法找到日志。
答案 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;
}