【问题标题】:How to pass float from one script to another in Unity 5? C#如何在 Unity 5 中将浮点数从一个脚本传递到另一个脚本? C#
【发布时间】:2015-05-06 10:02:17
【问题描述】:

我正在使用 Unity 5 个人版。我正在尝试将浮点数从一个脚本传递到另一个脚本,但出现此错误:

Assets/CameraTracksPlayer.cs(15,36):错误 CS1061:类型 ClimberMovement' does not contain a definition forstopCamera' 和 没有扩展方法stopCamera' of typeClimberMovement' 可能是 找到(您是否缺少 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);
        }


    }

}

【问题讨论】:

  • 奇怪,当前形式的这段代码应该可以工作。你确定你是照原样复制的吗?
  • 另外,请不要在未阅读标签说明的情况下使用标签。 unity 标签与 Unity 游戏引擎无关。
  • 顺便说一句——你似乎使用float类型的isDead来保存一个布尔值。 C#(以及几乎所有其他现代语言)对此有一个特殊的类型,bool
  • 只需在我自己的统一场景中测试您的代码,它运行良好。你能给我们你的整个登山者运动脚本吗?
  • @Fisheroid 如果脚本不在游戏对象中,你应该在 getComponent 行有一个 nullReferenceException

标签: c# unity3d


【解决方案1】:

1 - 您想将 public bool stopCamera = false; 转换为 float died

尝试将float died 更改为bool died

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

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

希望对你有帮助!

【讨论】:

    【解决方案2】:

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

    public float stopCameraValue(){
    return stopCamera;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-20
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      相关资源
      最近更新 更多