在类之间传递变量

时间:2015-02-25 19:50:32

标签: c# class variables unity3d

我刚开始使用C#。我使用PHP所以我还没有进入语法。

我正在使用Unity并尝试在两个类之间发送变量。我所拥有的是鼠标移动和暂停课程。在Mouse类中,我有一个名为state的变量。如果这是真的,则脚本运行,如果为false,则不会运行。

我想知道的是如何从另一个类中更改此变量。由于我没有成功,我创建了一个名为vars的课程,试图让它工作。那里没有运气。

pauseMenu.cs

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class pauseMenu : MonoBehaviour {
public bool isMenu = false;
public Texture btnTexture;
public bool isShown = false;
public MouseLook mouse = new MouseLook();

// Update is called once per frame
void Start (){



    }
void Update () {
     if (mouse.state== false) {
                    Debug.Log ("Some");
            }
            if (Input.GetKeyDown (KeyCode.P) || Input.GetKeyDown (KeyCode.Escape) && isMenu == false) {
                    Debug.Log ("Show");
                    isShown = (isShown == false) ? true : false;


            }
            if (isShown) {
                    Screen.showCursor = true;
                    Screen.lockCursor = false;
                    mouse.state= false;
            }
    }
void OnGUI()
{
    if (isShown) {

        if (GUI.Button (new Rect (10, 10, 50, 50), "Quit")) {
            Application.Quit();
            Debug.Log("Quit");
        }
    }
}
}

MouseLock.cs

using UnityEngine;
using System.Collections;

[AddComponentMenu("Camera-Control/Mouse Look")]

public class MouseLook : MonoBehaviour {

public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;

public float minimumX = -360F;
public float maximumX = 360F;

public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
public bool state { get; set; }

void Update ()
{
            if (state == true) {
                    if (axes == RotationAxes.MouseXAndY) {
                            float rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * sensitivityX;

                            rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
                            rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

                            transform.localEulerAngles = new Vector3 (-rotationY, rotationX, 0);
                    } else if (axes == RotationAxes.MouseX) {
                            transform.Rotate (0, Input.GetAxis ("Mouse X") * sensitivityX, 0);
                    } else {
                            rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
                            rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

                            transform.localEulerAngles = new Vector3 (-rotationY, transform.localEulerAngles.y, 0);
                    }
            }
    if (state == false) {
        Debug.Log ("false");


    }
    }

void Start ()
{
    state = true;
    //state = true;
    Debug.Log ("Started");
    // Make the rigid body not change rotation
    if (rigidbody)
        rigidbody.freezeRotation = true;
}
}

1 个答案:

答案 0 :(得分:1)

我看到你正在使用Unity。您必须获取您试图影响的GameObject的实例。例如,如果你有一个带有Hero.cs(Hero类)的Hero GameObject并且你希望敌人改变生命值,你必须将Hero GameObject添加到Enemy实例中,例如:

public GameObject LocalHero;

这是通过检查员窗口添加的。

现在您可以访问另一个Object中的类。

你可以像这样访问Hero GameObject上的Hero类。

LocalHero.GetComponent<Hero>.HitPoints = 20;

如果您不通过UI手动添加实例,则必须使用GameObject.Find()或类似内容来获取GameObject的INSTANCE。