触摸后不实例化的对象
Objects not instantiating after touch
我一直在四处寻找并试图找到这个问题的答案,但一无所获。我正在尝试创建一个简单的唱首歌游戏,但一开始就卡住了……这不是很好。我想要做的是在触摸后给玩家钱(目前只是添加 +1$)并在一个文本对象中生成“+1$”。好像对象没有出现。我还做了一个 "animation" 不知道做的好不好。 类:
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 有点陌生,所以非常感谢您的帮助!谢谢!
实例化对象使用函数:
GameObject go = Instantiate(tapText, fullPos, Quaternion.identity) as GameObject;
也不要在更新中创建动画,因为这会导致问题并影响性能。
您的 TapTextMovement class 可能有问题,当您实例化对象时,它会复制所有脚本,因此您应该重置 frameCount、modifier on Start,或完全更改您的脚本。
因为如果您复制场景中的现有对象,它应该保存其脚本值,请尝试创建预制件并从中实例化。
现在它似乎在实例化对象后删除您的对象,因为 frameCount 已经超过 60。
检查是否有效。
我一直在四处寻找并试图找到这个问题的答案,但一无所获。我正在尝试创建一个简单的唱首歌游戏,但一开始就卡住了……这不是很好。我想要做的是在触摸后给玩家钱(目前只是添加 +1$)并在一个文本对象中生成“+1$”。好像对象没有出现。我还做了一个 "animation" 不知道做的好不好。 类:
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 有点陌生,所以非常感谢您的帮助!谢谢!
实例化对象使用函数:
GameObject go = Instantiate(tapText, fullPos, Quaternion.identity) as GameObject;
也不要在更新中创建动画,因为这会导致问题并影响性能。
您的 TapTextMovement class 可能有问题,当您实例化对象时,它会复制所有脚本,因此您应该重置 frameCount、modifier on Start,或完全更改您的脚本。
因为如果您复制场景中的现有对象,它应该保存其脚本值,请尝试创建预制件并从中实例化。
现在它似乎在实例化对象后删除您的对象,因为 frameCount 已经超过 60。
检查是否有效。