public GameObject tree;
有什么区别。
tree.transform.localPosition = Vector3.zero;
和
tree.transform.localPosition.Equals(Vector3.zero);
谁能用c#ex解释一下?
tree.transform.localPosition = Vector3.zero;
这个 赋 担任新的职务 tree
对象。在这种情况下,将其设置为父级位置或World 0,0,0
如果它没有。
tree.transform.localPosition.Equals(Vector3.zero);
这个 返回 a bool
检查您处理的位置是否完全相同。请看 Vector3.Equals
.
它作为独立的代码行是没有意义的,因为你没有将返回值用于任何事情,也不会改变任何事情。这就是为什么有一个警告,但没有游戏中断的异常......这一行完全没有用。
你应该使用返回值或者把它分配给一些东西,以便以后使用它,例如
bool isAtOrigin = tree.transform.position.Equals(Vector3.zero);
然后你 可能 想用它来检查条件,比如说。
if(tree.transform.position.Equals(Vector3.zero))
{
// then do something
}
然而,由于浮点精度的原因,通常不建议这样做......特别是对于移动的对象,你通常更愿意使用
if(tree.transform.position == Vector3.zero)
{
// then do something
}
哪儿 ==
使用的近似精度为 0.00001
无意冒犯,但这是一个相当基本的问题,你应该退一步,进入一些。c#
在进入Unity开发之前,先学习基础知识;)
正如有人回答的那样
Equals证明了身份,这意味着对象是完全一样的。你可以覆盖Equals,在这种情况下,你可以检查它们的属性。(在object.Equals的情况下,你可以证明身份).使用"="你可以给它赋值。
如果 expr 不是 null,并且以下任何一项为真,则 is 表达式为真:(SRC.Equals.Import.Equals)。https:/docs.microsoft.comen-usdotnetcsharplanguag-referencekeywordsis)
expr 是一个与 type 相同类型的实例。
expr是一个从type派生出来的类型的实例。换句话说,expr的结果可以上传到type的实例。
expr的编译时类型是type的基类,而expr的运行时类型是type或者是从type派生出来的。变量的编译时类型是变量在其声明中定义的类型。变量的运行时类型是分配给该变量的实例的类型。
expr是一个实现了类型接口的类型实例,在这里你可以找到如何重写Equals。https:/docs.microsoft.comde-dedotnetapisystem.object.equals?view=netframework-4.8。
这里有一些例子。
public class Word
{
public string Name,Planet;
public Word(string name, string planet)
{
Name = name;
Planet = planet;
}
//Euqals is no overriden
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public class OtherClass
{
public OtherClass()
{
Word word = new Word("word","erth");
Word otherWord = new Word("word","moon");
string a = null;
var r = a == null; //true
var r2 = object.Equals(a, null);//true
var r3 = word.Name is string; //true
var r4 = word.Name is Word; //false
var r5 = word.Equals(otherWord); //false
}
}
如果你在你的类中重写了equals:
public class Word
{
public string Name;
public Word(string name)
{
Name = name;
}
//Override Equals
public override bool Equals(object obj)
{
if ((obj == null) || !this.GetType().Equals(obj.GetType()))
{
return false;
}
else
{
Word thisWord = (Word) obj;
return (Name == thisWord.Name) /* && (Other properties)*/;
}
}
public class OtherClass
{
public OtherClass()
{
Word word = new Word("word","erth");
Word otherWord = new Word("word","moon");
string a = null;
var r = a == null; //true
var r2 = object.Equals(a, null);//true
var r3 = word.Equals(otherWord); //true
}
}
谢谢!