我正在统一进行3D篮球比赛。
它有一个分数和一个计时器。一段时间后,我的场景将加载并从头开始。每次扔球时,都必须产生它。
它有一个生成按钮和一个射击按钮。但是我不想使用生成按钮。所以我想自动产生球。
我应该怎么做?我在下面给出我的生成按钮代码和抛出按钮代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnButton: MonoBehaviour
{
public GameObject ball;
public GameObject BallPosition;
public void Spawn()
{
ball.transform.position = BallPosition.transform.position;
var ballPosition = ball.transform.position;
ball.GetComponent<Rigidbody>().useGravity = false;
ball.GetComponent<Rigidbody>().velocity = Vector3.zero;
ball.transform.position = ballPosition;
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ThrowButton: MonoBehaviour
{
static Animator anim;
public GameObject ball;
public float ballThrowingForce = 5f;
internal bool holdingBall;
void Start()
{
anim = GetComponent<Animator>();
ball.GetComponent<Rigidbody>().useGravity = false;
}
public void Throw()
{
anim.SetTrigger("isThrowing");
StartCoroutine(Test());
}
IEnumerator Test()
{
yield return new WaitForSeconds(1.5f);
ball.GetComponent<Rigidbody>().useGravity = true;
//ball.GetComponent<Rigidbody>().AddForce(transform.up * ballThrowingForce);
ball.GetComponent<Rigidbody>().AddForce(0, 380.0f, ballThrowingForce);
}
}
答案 0 :(得分:1)
要生成球,您应该创建一个预制件并将其实例化。示例:
private class Spawner : MonoBehaviour
{
public GameObject prefab;
public GameObject Spawn() => Instantiate(prefab);
}
这样您的投掷代码应生成一个球,如果您想销毁一个旧球,则可以。
答案 1 :(得分:0)
Iv Misticos的上述回答提到了Instantiate的使用,这是生成新球的好方法。 在生成新球之前,需要指定何时必须生成。
您可以
使用一个Invoke(“ SpawnNewBallMethod”,3)//这段代码执行后,等待3秒钟并执行您在其中提到的方法,该方法可以实例化代码。
或者在完成第一个球的工作后,您可以销毁它(销毁(球))或将active设置为false-然后检查状态(是否存在(空检查?)或gameObject.active == true),然后实例化一个新球(如果它是setactive(false),别忘了以后销毁它)。
尽管gameObject.active已过时,但它将达到目的而不会使事情复杂化。 我认为Invoke优于IEnumerator,因为Invoke不会在计时器运行时停止执行流并继续执行其他操作。