繁体   English   中英

如何在Unity 5中将浮点数从一个脚本传递到另一个脚本? C#

[英]How to pass float from one script to another in Unity 5? C#

我正在Unity 5个人版中工作。我正在尝试将float从一个脚本传递到另一个脚本,但出现此错误:

Assets / CameraTracksPlayer.cs(15,36):错误CS1061:类型ClimberMovement' does not contain a definition for并且找不到stopCamera' of type ClimberMovement' does not contain a definition for ClimberMovement'的扩展方法stopCamera' of type (您是否缺少using指令或程序集引用? )

我不知道我在做什么错。

这是我的代码:

using UnityEngine;
using System.Collections;

public class CameraTracksPlayer : MonoBehaviour {

    Transform player;
    float isDead;
    float offsetY;

    // Use this for initialization
    void Start () {

        GameObject go = GameObject.Find ("MainCamera");
        ClimberMovement dying = go.GetComponent <ClimberMovement> ();
        float died = dying.stopCamera; //this line gets error!
        isDead = died;


        GameObject player_go = GameObject.FindGameObjectsWithTag("Player")[0];

        if (player_go == null) {
            Debug.LogError("Ne dela ker ni taga Player");
            return;
        }
        player = player_go.transform;

        offsetY = transform.position.y - player.position.y;

    }

    // Update is called once per frame
    void Update () {
        if (player != null && isDead == 1) {
            Vector3 pos = transform.position;
        }
        else if (player != null) {
            Vector3 pos = transform.position;
            pos.y = player.position.y + offsetY;
            transform.position = pos;
        }

    }

}

这是我试图从中传递变量的脚本代码:

using UnityEngine;
using System.Collections;

public class ClimberMovement : MonoBehaviour {

    Vector3 velocity = Vector3.zero;
    public Vector3 gravity;
    public Vector3 climbVelocity;
    public Vector3 climbVelocityJump;
    public float maxSpeed = 5f;
    public bool stopCamera = false;

    bool didClimb = false;
    bool didJump = false;
    bool jumping = false;
    bool jumping2 = false;

    Animator animator;

    bool dead = false;

    // Use this for initialization
    void Start () {
        animator = transform.GetComponentInChildren<Animator> ();
        animator.SetTrigger("DoClimb");
    }

    //do gfx input update here
    void Update () {

        if(Input.GetMouseButtonDown(0)){
            didClimb = true;
            //didJump = true;
        }
        if (Input.GetMouseButtonUp(0)) {
            jumping2 = true;
        }
    }

    // do physics engine update here
    void FixedUpdate () {

        velocity += gravity * Time.deltaTime;

        if(didClimb == true){
            didClimb = false;
            jumping = true;
            velocity += climbVelocity;
        }

        else if (jumping2 == true && dead == false) {
            jumping = false;
            jumping2 = false;
            velocity += climbVelocityJump;
        }

        velocity = Vector3.ClampMagnitude(velocity, maxSpeed);

        transform.position += velocity * Time.deltaTime;

        if (transform.position.x <= -3.9f) {
            transform.position = new Vector3 (-3.9f, transform.position.y, transform.position.z);
            if (transform.position.x == -3.9f) {
                dead = true;
                stopCamera = true;
                animator.SetTrigger ("Death");
                velocity.y = -5f;
                velocity.x = -5f;
            }
        } else if (transform.position.x >= -1f) {
            transform.position = new Vector3 (-1f, transform.position.y, transform.position.z);
        }


    }

}

1-您要public bool stopCamera = false; float died

试图改变float diedbool died

2-如果您具有NullReferenceException,则意味着它在“ MainCamera”游戏对象中找不到您的脚本。

尝试在“ MainCamera”游戏对象中添加脚本“ ClimberMovement”。

希望对您有帮助!

我对您的情况的建议是有一个返回该值的方法:

public float stopCameraValue(){
return stopCamera;
}

我猜是单行为阻止您直接访问该变量,从而出现错误。 由于您没有在CameraTracksPlayer类中实例化ClimberMovement类,因此它可能会认为它在编译时没有实例化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM