C# 访问类中、命名空间中的浮点值
我正在尝试从另一个脚本更改下面脚本中“xsensitity”的值C# 访问类中、命名空间中的浮点值,c#,class,unity3d,namespaces,C#,Class,Unity3d,Namespaces,我正在尝试从另一个脚本更改下面脚本中“xsensitity”的值 using System; using UnityEngine; using UnityStandardAssets.CrossPlatformInput; namespace UnityStandardAssets.Characters.FirstPerson { [Serializable] public class HeadLook { public float XSensitivity = 8f; pub
using System;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
namespace UnityStandardAssets.Characters.FirstPerson
{
[Serializable]
public class HeadLook
{
public float XSensitivity = 8f;
public float YSensitivity = 8f;
public float MinimumX = -60F;
public float MaximumX = 60F;
public float xRotRaw;
public float yRotRaw;
public HeadLook (float rotX, float rotY)
{
rotX = XSensitivity;
rotY = YSensitivity;
}
// create an instance (an Object) of the HeadLook class
public HeadLook MyHeadLook = new HeadLook(8,8);
private float xRot;
private float yRot;
private float xRotation;
private float yRotation;
// ----------------------------
public void LookRotation(Transform character, Transform head)
{
yRotRaw = CrossPlatformInputManager.GetAxisRaw("HorizontalLook");
xRotRaw = CrossPlatformInputManager.GetAxisRaw("VerticalLook");
yRot = CrossPlatformInputManager.GetAxisRaw("HorizontalLook") * XSensitivity;
xRot = CrossPlatformInputManager.GetAxisRaw("VerticalLook") * YSensitivity;
yRotation -= yRot * 10 * Time.deltaTime;
yRotation = yRotation % 360;
xRotation += xRot * 10 * Time.deltaTime;
xRotation = Mathf.Clamp(xRotation, MinimumX, MaximumX);
head.localEulerAngles = new Vector3(-xRotation, -0, 0);
character.localEulerAngles = new Vector3(0, -yRotation, 0);
}
// ----------------------------
}
}
我想这可能行得通,但我错了
using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;
private HeadLook m_HeadLook;
void Awake ()
{
m_HeadLook = GetComponent< HeadLook >();
sensitivitySlider.value = m_HeadLook.MyHeadLook.XSensitivity;
}
使用UnityEngine;
使用UnityStandardAssets.Characters.FirstPerson;
私人头条m_头条;
无效唤醒()
{
m_HeadLook=GetComponent();
灵敏度slider.value=m_HeadLook.MyHeadLook.XSensitivity;
}
我得到的错误是。。
ArgumentException:GetComponent要求请求的组件“HeadLook”派生自MonoBehavior或组件,或者是接口
谢谢。您只需要从MonoBehavior派生类:
using System;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
namespace UnityStandardAssets.Characters.FirstPerson
{
[Serializable]
public class HeadLook : MonoBehaviour
{
...
私人头条m_头条
void Awake ()
{
m_HeadLook = new HeadLook(8f,8f);
sensitivitySlider.value = m_HeadLook.MyHeadLook.XSensitivity;
}
您不能在其上使用GetComponent,因为它不是单一行为
此外,您的HeadLook似乎正在创建一个实际上并不必要的HeadLook对象。你似乎想做一个单身汉,那更像是:
public static HeadLook MyHeadLook = null;
public HeadLook (float rotX, float rotY)
{
if(MyHeadLook != null) {return;}
MyHeadLook = this;
rotX = XSensitivity;
rotY = YSensitivity;
}
这真的很简单,但这将是单身汉的一个开始
编辑:评论部分有人把确保您正确使用singleton作为一项任务。我的回答只是一个简单的提示,告诉你你做错了,我提供了一些简单的方法让你走。
这里有一个链接,指向一个完整解释它的页面
错误说明:“GetComponent要求请求的组件‘HeadLook’来自MonoBehavior”
潜在的修复方法:
该类不是从
monobhavior
派生的,因此您无法获取它的组件,因为它不是一个组件。尝试查找包含HeadLook
实例的脚本。错误所在的行是。m_HeadLook=GetComponent