我有 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.cs
的Update
方法中存在空引用。在您的Update
中可以为空的一个引用是playerControllerScript
。该错误指定未分配playerControllerScript
的引用,因此它为 null,这意味着访问它将导致错误。
理论上,您用来获取引用的行是正确的:
GameObject.Find("Player").GetComponent<PlayerController>();
您正在搜索名为Player
的对象,该对象具有名为PlayerController.cs
的脚本组件。由于场景中没有对象被调用Player
,或者名为Player
的对象没有附加脚本组件PlayerController.cs
,因此找不到引用。名为Player
的对象必须与另一个对象位于同一场景中,并且必须附加此脚本组件。如果子对象具有脚本,则可以使用Component.GetComponentInChildren
。
为了访问类的值,您需要实例化该类的对象。然后,您可以使用其各自的获取和设置方法访问所述值。