3 回答
TA贡献1865条经验 获得超7个赞
调用函数 Attack() 和 this.Attack 有什么区别?
例如,当您编写类 Player 并且想要使用方法“Attack()”时,您可以通过键入 Attack() 或 this.Attack() 来实现。它在两种情况下都做同样的事情。
当你使用“这个”时。你保证你使用的方法是在你所在的类上实现的。例如:
public void GroupAttack(DifferentPlayer ally){
Attack();
ally.Attack();
}
public void GroupAttackWithThis(DifferentPlayer ally){
this.Attack();
ally.Attack();
}
GroupAttack 和 GroupAttackWithThis 方法之间没有区别。
我使用随机名称 nexus 创建了 Player 类的对象。但是,当我从不同的类调用函数时,我似乎使用了类名而不是这个变量名。那么创建变量名的目的是什么?
发生这种情况是因为您将函数“Move”设为静态,这意味着对于该类的每个实例,它都会执行完全相同的操作。当您希望一个方法或一个变量对于类的每个实例每次都具有相同的值或具有相同的行为时,使用静态。如果您的方法不是静态的,您将需要使用变量的名称来使用它,那是因为您希望您的方法为每个实例更改他的行为。一个简单的例子:
public string GetName(){
return name;
}
此方法将为每个玩家返回一个不同的名称(将在变量中返回玩家的名称)。所以如果你这样做:
Player jhon = new Player();
jhon.name = "Jhon";
String jhonsName = jhon.GetName();
变量“jhonsName”将包含一个值为“Jhon”的字符串。
我希望这对您有用,并祝您游戏愉快。
TA贡献2041条经验 获得超4个赞
Unity MonoBehaviour 与普通 C# 类之间存在一些差异。我建议观看一些 Unity 教程。Unity 脚本是面向场景的。
没有区别。this.Something可用于将某物标记为“来自类对象”(通常为属性或变量)以与参数区分开来。
编写Player nexus = new Player(); 应该是警告,因为您不应该使用 MonoBehaviour 执行此操作。
您可以通过将脚本“播放器”放在游戏对象上来在场景中创建播放器。您应该从 GameObject 访问 Player 脚本。所以你应该删除方法上的“静态”。然后放公共Player播放器;在 UsingStuff 内部(在公共类 UsingStuff 下:MonoBehaviour {)。然后将您的播放器拖到播放器的占位符上。您将在场景中使用 UsingStuff-Script 的 GameObject 上找到它。现在您可以在 Start 方法中调用 player.Move()(带有小 p)。
为您的变量名称尝试另一种命名方式。它已经存在于每个 MonoBehaviour 中。它指的是脚本所在的游戏对象的名称。您的命名也应该抛出一个警告。
TA贡献1853条经验 获得超18个赞
执行时Player nexus = new Player();
,您正在创建类型 (/class)“Player”的新实例 (/object)。该变量nexus
是一个对象引用(即,它指的是您刚刚创建的对象实例)。一旦你有了一个实例,你就可以在那个对象上调用实例方法,设置或读取它的属性(顺便说一下,你没有)。由于对该对象(nexus
变量)只有一个引用,当该引用超出范围(在函数结束时)时,该对象不再被任何对象引用并且有资格进行垃圾回收。
当您使用static
关键字声明一个方法 (/function) 时,您是在类级别而不是在实例级别创建它。如果你想调用非静态的Update
orAttack
方法,你必须说nexus.Update
or nexus.Attack
。要调用静态Using
或Move
方法,您可以使用类名 (Player),如下所示:Player.Using
或Player.Move
。
您发布的代码无法编译,是吗?您不能从静态方法调用实例方法。您不能调用实例方法Attack
或this.Attack
静态方法Using
(那里没有“this”(this
是与实例方法关联的当前对象实例))。最好发布至少可以编译的代码(除非你说(在评论中)//this is the code that doesn't compile
您还只在Start
方法中创建了一个新的 Player 实例,这有点奇怪。通常,您在其他类或静态工厂方法中创建对象的实例(并非总是如此,但通常如此)。
阅读面向对象编程的本质、C# 的static
关键字和对象实例的本质(一般而言)。您可能还想阅读 C# 的属性。
哦,Using
从长远来看,命名某些东西会受到伤害(小写using
是一个 C# 关键字,已经有两个含义)。
最后,回答你的问题,“以这种方式调用实例方法:Attack()
或那样:this.Attack()
具有相同的语义。” 当然,如上所述,如果您尝试从静态方法调用实例方法,则不能使用任何一种形式。
- 3 回答
- 0 关注
- 164 浏览
添加回答
举报