我正在尝试用C语言编写一些代码,其中我有一个对象,我需要知道我的脚本才能工作。我试图使用指针作为我认为使用的指针。它说我不得不使用一个不安全的标签,这让我觉得我做错了什么。我对此有点新鲜,到目前为止,我对C ++的大部分知识都是我在课堂上学到的。我尝试查找它,但我找不到它。这基本上就是我现在所拥有的。
using UnityEngine;
using System.Collections;
public class SGravSim : MonoBehaviour {
public GameObject moon;
public GameObject earth;
private struct Cords
{
public float* x
{
get
{
return x;
}
set
{
if (value != 0) <== this thing is realy just a placeholder
x = value;
}
}
public float* y
{
get
{
return y;
}
set
{
if (value != 0) <== this this is only in here for now
y = value;
}
}
public void DisplayX()
{
}
}
private Cords moonLocation;
private Cords earthLocation;
private Cords SataliteLocation;
// Use this for initialization
void Start () {
moonLocation.x = moon.transform.position.x;
moonLocation.y = moon.transform.position.y;
earthLocation.x = earth.transform.position.x;
earthLocation.y = earth.transform.position.y;
SataliteLocation.x = this.transform.position.x;
SataliteLocation.y = this.transform.position.y;
}
// Update is called once per frame
void Update () {
Debug.Log(moon.transform.position.x);
//
// Summary:
// The position of the transform in world space.
float yMoon = moon.transform.position.x
print(moonLocation.y);
}
}
我正在计划制作套装,以便你无法添加任何内容。 我想我可以写出整个earth.position.x的东西,每次我需要使用它我只是想看看是否有更好的方法来做它也是一种方式,我不能把变量弄得像我所有的一样想要做的就是阅读它。
答案 0 :(得分:0)
您可以使用:
private float x;
public float X
{
get
{
return x;
}
}
&#13;
现在你只在课堂上设置x。
答案 1 :(得分:0)
您收到不安全标记警告,因为您尝试使用实际上不安全的指针。可能有用例,但在C#中,您通常使用reference types和值类型。在C#中,struct是一种值类型,因此与引用类型相比,它的行为会有所不同,因为您可以阅读here,这也是Gubr建议使用类而不是结构的原因。最后但并非最不重要的是,它们的存储方式存在差异,只是谷歌C#堆和堆栈。
我还没有在C#中使用过很多结构,所以我只是创建了一个新项目并且玩了一下。
所以我使用了你的代码,它也可能看起来像这样:
private struct Cords
{
public float x, y;
public void DisplayX(){}
}
正如其他人所提到的,您可以省略该集合或将其设为私有并添加构造函数。请注意,私人套装并不等于不在自动属性中定义它。相反,它将创建一个只读字段。但是,您必须在两种情况下都调用new运算符来设置值:
private struct Cords
{
public float X { get; }
public float Y { get; }
public void DisplayX(){}
public Cords(float x, float y)
{
X = x;
Y = y;
}
}
在这里我们创建了一个新的Cords:
Cords earth = new Cords(10.005f, 12.689f);