C# 从PlayerController(Unity)获取预制脚本
大家好,我现在正在开发一个简单的游戏,我有一个脚本叫做 PlayerController.cs、GameManager.cs和PowerUps.cs 在我的GameManager.cs上 我像这样产生我的力量C# 从PlayerController(Unity)获取预制脚本,c#,unity3d,C#,Unity3d,大家好,我现在正在开发一个简单的游戏,我有一个脚本叫做 PlayerController.cs、GameManager.cs和PowerUps.cs 在我的GameManager.cs上 我像这样产生我的力量 //Add GameObject for Powerup public GameObject PowerUp; void Start () { StartCoroutine(SpawnPowerUps()); } //Spawn Powerups
//Add GameObject for Powerup
public GameObject PowerUp;
void Start () {
StartCoroutine(SpawnPowerUps());
}
//Spawn Powerups
IEnumerator SpawnPowerUps()
{
while (true)
{
//pop ups the powerup every 20s
yield return new WaitForSeconds(5f);
if (player.clicked)
{
Instantiate(PowerUp, new Vector3(Random.Range(0, (float)0.9), 0, Random.Range(player.transform.position.z + 40, player.transform.position.z + 80)), Quaternion.identity);
}
}
}
现在我的PowerUp.cs已连接到预置,玩家每次点击PowerUp时,它都会破坏并增加PlayerController.cs的速度
PlayerController player;
public int powerUps = 0;
void Start()
{
player = FindObjectOfType<PlayerController>();
}
void Update()
{
if(powerUps >= 1)
{
//change the speed of the player
player.Speed = 5f;
}
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.CompareTag("Player"))
{
Debug.Log("Power Up has been picked up. Destroying power up!");
powerUps += 1;
Destroy(gameObject);
}
}
void Update(){
if ((Input.GetMouseButtonDown(0) || Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began))
{
Speed = 3.0f;
}
}
但问题是速度没有变为5.0f
它仍然保持为3.0f
#编辑
我已经检查了通电是否可以获取playercontroller,并且它不是空的,因此基本上可以获取playercontroller脚本。您的调试。登录OnCollisionCenter是否打印出来?如果正在打印,但速度似乎仍然等于3.0,则速度可能会被PlayerController的Update()中的代码重置。我会在PlayerController.cs中的if语句中添加一个日志,以确保速度在设置为5.0后不会被设置回3.0。您添加电源,然后销毁它。你需要做的是设置玩家。碰撞中的速度
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.CompareTag("Player"))
{
Debug.Log("Power Up has been picked up. Destroying power up!");
PlayerController player = collision.gameObject.GetComponent<PlayerController>();
if(player != null){
player.Speed =5;
Destroy(gameObject);
}
}
}
private void OnCollisionEnter(冲突)
{
if(collision.gameObject.CompareTag(“玩家”))
{
Log(“已接通电源。正在破坏通电!”);
PlayerController player=collision.gameObject.GetComponent();
如果(玩家!=null){
速度=5;
摧毁(游戏对象);
}
}
}
而且启动和更新不再需要。我真傻。谢谢你,好先生。