【发布时间】:2016-05-18 21:53:06
【问题描述】:
我是 Unity 新手,对它了解不多。但是,我过去曾使用过 Java 和 Objective-C。两种面向对象的基于 C 的编程语言,非常类似于 Unity 使用的 C#。
Objective-C 有blocks 是变量,允许您在其中存储函数并稍后调用它们。实际使用时,可以将块用作函数参数和类属性,省去程序员的“if”语句,而直接调用块。
该语法的一个示例是(取自链接的教程站点):
// Declare a block variable
double (^distanceFromRateAndTime)(double rate, double time);
// Create and assign the block
distanceFromRateAndTime = ^double(double rate, double time) {
return rate * time;
};
// Call the block
double dx = distanceFromRateAndTime(35, 1.5);
NSLog(@"A car driving 35 mph will travel %.2f miles in 1.5 hours.", dx);
Java 有Runnable 类,这是其多线程结构的基础。 (Thread 继承自 Runnable。)我从 previous question 我问过这个类。制作Runnable的方法有两种:Java 8 使用 lambdas 的方式...
Runnable r = () -> { System.out.println("This is just an example!"); }
Java 8 使用 lambdas 作为函数参数...
void someFunction(Runnable r) {
r.run();
}
// In a method, not sure about the semicolons
someFunction( () -> { System.out.println("This will work, too!"); });
最后,Java 8 之前...
Runnable r = Runnable(){
@Override
public void run() {
System.out.println("Yet another example");
}
}
我的问题是,我将如何在 Unity 的 C# 变体中实现这一目标?
【问题讨论】:
-
Action a = () => Console.WriteLine("lambda action");,以及异步操作Task.Run(() => Console.WriteLine("thread pooled"));。 -
@Mephy 谢谢!我只需要了解
Action类。我可以在运行代码周围加上大括号并使用多行语句吗? -
您好 DDPWNAGE。有一件事,理解 Unity 是绝对单线程至关重要。没有其他线程,您无法访问任何其他线程。 (请注意,您可能见过“协程”。它们与线程完全没有任何联系。)
-
您可能面临的另一个问题是,在第一段中您提到了“面向对象”。意识到 Unity 绝对不是面向对象的,它是一个 ECS 系统,这一点至关重要。它没有任何类似于继承的概念,并且与 OO 完全无关。 (关于stackoverflow.com/a/37243035/294884 的文章)碰巧,用于为 Unity GameObects 编写行为的(当前)编程语言(c#)恰好是一种OO 语言。但这无关紧要。他们明天可能会改用 Lisp :) 或其他东西,这不会影响 Unity。
-
@JoeBlow 这解释了 JavaScript。谢谢你的澄清。