创建目标系统

时间:2017-12-17 11:43:55

标签: c# unity3d

我在Unity中制作了一个目标,它看起来像一个具有三种不同级别得分的飞镖,具体取决于你的射击位置。问题是当我射击目标时,分数文本不会改变。我是一个新手,我在Javascript的代码下面“翻译”,并想知道你的专家是否可以看到 如果代码有任何问题?

GlobalScore(将此附加到空游戏对象。我将文本'ScoreNumber'拖到Unity中的ScoreText插槽中)

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;


 public class GlobalScore : MonoBehaviour {

 public static int CurrentScore;
 public int InternalScore;

 public GameObject ScoreText;

 void Update () {
    InternalScore = CurrentScore;
    ScoreText.GetComponent<Text>().text = "" + InternalScore;

  }

}

ZScore25(创建3个脚本(ZScore25,ZScore50,ZScore100),我附加到我创建的三个圆柱游戏对象)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ZScore25 : MonoBehaviour
{

void DeductPoints(int DamageAmount)
 {
    GlobalScore.CurrentScore += 25;
 }
} 

HandgunDamage Script

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HandGunDamage : MonoBehaviour {

public int DamageAmount = 5;
public float TargetDistance;
public float AllowedRange = 15.0f;



void Update () {
    if (GlobalAmmo.LoadedAmmo >= 1) { 
    if (Input.GetButtonDown("Fire1"))
    {
        RaycastHit Shot;
  if (Physics.Raycast(transform.position,  transform.TransformDirection(Vector3.forward), out Shot))
            {
                TargetDistance = Shot.distance;
                if (TargetDistance < AllowedRange)
                {
                    Shot.transform.SendMessage("DeductPoints", DamageAmount, SendMessageOptions.DontRequireReceiver);
                }

            }
        }
    }

}

}

1 个答案:

答案 0 :(得分:0)

Debug.Log(或断点)可以帮助您查看问题所在。我通过微小的更改测试了您的案例,并且分数文本值正在发生变化。

我用一个ZScore脚本取代了ZScore25,50,100脚本,该脚本将得分作为公共字段,您可以在编辑器中设置。

public class ZScore : MonoBehaviour {

    public int Score;

    public void DeductPoints() {
        Debug.Log("CurrentScore += " + Score);
        GlobalScore.CurrentScore += Score;
    }
}

..然后我使用了raycast(下面的示例脚本附加到相机上):

void Update () {

    if (Input.GetMouseButtonDown(0)) {
        var lookAtPos = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane));
        transform.LookAt (lookAtPos);
        RaycastHit Shot;
        if (Physics.Raycast(transform.position, transform.forward, out Shot))
        {
            Debug.Log ("Raycast hit");
            var score = Shot.transform.GetComponent<ZScore> ();
            if (score != null) {
                Debug.Log ("Hit ZScore component");
                score.DeductPoints ();
            }

        }
    }
}