我无法在两个脚本之间进行通信



我有 2 个代码文件/脚本:

第一个:

using System.Collections.Generic;
using UnityEngine;
public class MoveLeft : MonoBehaviour
{
private float Speed = 15f;
private PlayerController playerControllerScript;
// Start is called before the first frame update
void Start()
{
playerControllerScript = GameObject.Find("Player").GetComponent<PlayerController>();
}
// Update is called once per frame
void Update()
{
if(playerControllerScript.gameOver == false)
{
transform.Translate(Vector3.left * Time.deltaTime * Speed);
}
//transform.Translate(Vector3.left * Time.deltaTime * Speed);
}
}

第二个:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody playerRB;
public float JumpForce = 150;
public float GravityModifier;
public bool OnTheGround = true;
public bool gameOver;
// Start is called before the first frame update
void Start()
{
playerRB = GetComponent<Rigidbody>();
Physics.gravity *= GravityModifier;
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)&& OnTheGround)
{
playerRB.AddForce(Vector3.up * JumpForce, ForceMode.Impulse);
OnTheGround = false;
}
}
private void OnCollisionEnter(Collision collision)
{

if (collision.gameObject.CompareTag("Ground"))
{
OnTheGround = true;
}

if (collision.gameObject.CompareTag("Obsticle"))
{
Debug.Log("Game over");
gameOver = true;
}

}
}

所以对于我的简单游戏,我需要检查是否检查了"bool"上的游戏(真或假),然后将布尔值发送到第一个脚本。我已经尝试过了,但我反复收到错误。

请帮助我。我不太擅长编程。

根据您在评论中发布的错误,脚本MoveLeft.csUpdate方法中存在空引用。在您的Update中可以为空的一个引用是playerControllerScript。该错误指定未分配playerControllerScript的引用,因此它为 null,这意味着访问它将导致错误。

理论上,您用来获取引用的行是正确的:

GameObject.Find("Player").GetComponent<PlayerController>();

您正在搜索名为Player的对象,该对象具有名为PlayerController.cs的脚本组件。由于场景中没有对象被调用Player,或者名为Player的对象没有附加脚本组件PlayerController.cs,因此找不到引用。名为Player的对象必须与另一个对象位于同一场景中,并且必须附加此脚本组件。如果子对象具有脚本,则可以使用Component.GetComponentInChildren

为了访问类的值,您需要实例化该类的对象。然后,您可以使用其各自的获取和设置方法访问所述值。

相关内容

  • 没有找到相关文章

最新更新