触摸后没有实例化的对象

时间:2017-08-30 13:01:22

标签: c# instantiation unity2d

我一直在四处寻找并试图找到这个问题的答案但却一无所获。我正在尝试创建一个简单的点击游戏,但一开始就陷入困境......这不是很好。我想要做的是在触摸后给予玩家钱(目前只需加上+ 1美元)并在文本对象中产生“+ 1 $”。好像对象没有出现。我也做了一个“动画片”,我不确定它是否制作精良。两个类:

public class TapTextMovement : MonoBehaviour {

private int frameCount = 0;
private float temp;
public int modifier = 0;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    if (frameCount < 40) {
        temp = this.transform.position.y + 1F * modifier;

        this.transform.position = new Vector3(this.transform.position.x, temp, this.transform.position.z);
    } else if (frameCount < 50) {
        temp = this.transform.position.y + 0.5F * modifier;

        this.transform.position = new Vector3(this.transform.position.x, temp, this.transform.position.z);
    } else if (frameCount < 55) {
        temp = this.transform.position.y + 0.3F * modifier;

        this.transform.position = new Vector3(this.transform.position.x, temp, this.transform.position.z);
    } else if (frameCount < 60) {
        temp = this.transform.position.y + 0.15F * modifier;

        this.transform.position = new Vector3(this.transform.position.x, temp, this.transform.position.z);
    } else {
        Object.Destroy (this);
    }
    frameCount++;
}
}

public class MoneyTap : MonoBehaviour {

public GameObject money;
private Text moneyText;
public long moneyAmount = 0;
public GameObject tapText;
private Vector2 tempPos;
private Vector3 fullPos;

void Start () {
    moneyText = money.GetComponent<Text> ();
}

// Update is called once per frame
void Update ()
{
    moneyText.text = moneyAmount + "$";

    if (Input.touchCount > 0) {
        if (Input.GetTouch (0).phase == TouchPhase.Began) {

            tempPos = Input.GetTouch(0).position;
            fullPos = new Vector3 (tempPos.x, tempPos.y, 0);


            RaycastHit2D hitInfo = Physics2D.Raycast (Camera.main.ScreenToWorldPoint (Input.GetTouch(0).position), Vector2.zero);
            if (hitInfo) {
                moneyAmount++;;
                Instantiate(tapText, fullPos, Quaternion.identity);
            }
        }
    }
}
}

我对Unity有点新意,所以我们将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

要实例化对象使用功能:

GameObject go = Instantiate(tapText, fullPos, Quaternion.identity) as GameObject; 

也不要在Update中创建动画,因为这会导致问题并影响性能。

您的 TapTextMovement 类可能存在问题,当您实例化对象时,它会复制所有脚本,因此您应该重置 frameCount ,< 开始上的em>修饰符,或完全更改您的脚本。

因为如果您复制场景中的现有对象,它应该保存其脚本值,尝试创建一个预制件并从中进行实例化。

现在它似乎在实例化之后删除了你的对象,因为 frameCount 已经超过60。

检查是否有效。