我刚开始使用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;
}
}
答案 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。