C# 从PlayerController(Unity)获取预制脚本

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

大家好,我现在正在开发一个简单的游戏,我有一个脚本叫做

PlayerController.cs、GameManager.cs和PowerUps.cs

在我的GameManager.cs上

我像这样产生我的力量

//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;
摧毁(游戏对象);
}
}
}

而且启动和更新不再需要。

我真傻。谢谢你,好先生。