说你有
class Fancy:UIView
Run Code Online (Sandbox Code Playgroud)
你想找到所有兄弟姐妹的Fancy意见. 没问题 ......
for v:UIView in superview!.subviews
{
if let f = v as? Fancy
{ f.hungry = false }
}
Run Code Online (Sandbox Code Playgroud)
所以,尝试扩展,
public extension UIView
{
internal func fancySiblings()->([Fancy])
{
return (self.superview!
.subviews
.filter { $0 != self }
.flatMap { $0 as? Fancy }
)
}
}
Run Code Online (Sandbox Code Playgroud)
太棒了,你现在可以
for f:Fancy in self.fancySiblings()
{ f.hungry = false }
Run Code Online (Sandbox Code Playgroud)
太棒了.
但,
所以,像......
public extension UIView
{
internal func siblings<T>( something T )->([T]) …Run Code Online (Sandbox Code Playgroud) 你怎么能在一个非Monobehaviour阶级的实例中传递Monobehaviour?我找到了这个链接,TonyLi提到你可以通过一个Monobehaviour来启动和停止一个类的实例中的协同程序,但他没有说明你怎么能这样做.他做了这个theEvent.StartEvent(myMonoBehaviour); 但是他并没有表明他从哪里获得了我的神经行为.我在互联网上环顾四周,但我似乎无法找到.
这是我想要做的.我想在一个类的实例中运行一个协同程序.我还希望能够在类的实例中停止协程.我想这样做,以便我的场景中没有任何具有大型管理器的对象,并且我可以将代码重用于我想以这种方式打乒乓的任何对象.代码在一个方向上移动一个Gameobject然后休息一下并将其向另一个方向移动并再次休息等等.但我不能从课外开始协同程序.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
[RequireComponent (typeof(Image))]
public class SpecialBar : MonoBehaviour {
public float rangeX;
public float breakTime;
public float step;
float startProgress = 0.5f;
PingPongGameObject pingPonger;
Color[] teamColors = new Color[]{new Color(255,136,0),new Color(0,170,255)};
void Start()
{
for(int i = 0; i < teamColors.Length; ++i)
{
teamColors[i] = StaticFunctions.NormalizeColor (teamColors[i]);
}
pingPonger = new PingPongGameObject (gameObject.transform.position,
new Vector3(rangeX,0.0f,0.0f),
gameObject,
startProgress,
breakTime,
step
);
}
}
Run Code Online (Sandbox Code Playgroud)
第二堂课是我的协程所在的地方.
public class PingPongGameObject
{
float step; …Run Code Online (Sandbox Code Playgroud) 它可以有一个盲目处理动态方法名称和动态参数的函数吗?
我正在使用Unity和C#.我希望在从场景中删除一个对象(被破坏)后,Gizmo的绘制会持续一段时间,所以我想动态地将绘图职责传递给另一个对象.
例如,我希望能够这样做:
GizmoManager.RunThisMethod(Gizmos.DrawSphere (Vector3.zero, 1f));
GizmoManager.RunThisMethod(Gizmos.DrawWireMesh (myMesh));
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,调用方法并且参数计数会有所不同.有没有办法实现我的目标,而无需为每个Gizmo类型编写一个非常精细的包装器?(有11个.)(侧面目标:我想添加自己的论点来说明经理应该多长时间绘制Gizmo,但这是可选的.)
我想在Unity3d中为Vector3类创建一个扩展方法.但我似乎没有得到它.这就是我所拥有的:
public static class ExtensionMethods{
public static Vector3 MaxValue(this Vector3 _vec3)
{
return new Vector3(float.MaxValue,float.MaxValue,float.MaxValue);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想打一个Vector3.MaxValue,就像float.MaxValue用这行代码:
Vector3 closestPoint = Vector3.MaxValue;
Run Code Online (Sandbox Code Playgroud)
但后来我得到了这个错误:
error CS0117: `UnityEngine.Vector3' does not contain a definition for `MaxValue'
Run Code Online (Sandbox Code Playgroud)
我知道这会奏效:
Vector3 closestPoint = new Vector3().MaxValue();
Run Code Online (Sandbox Code Playgroud)
但后来我创建了2个新Vector3实例.一个在MaxValue通话中,一个在外面.是不是可以只使用这种代码制作一个并执行此操作:
Vector3 closestPoint = Vector3.MaxValue;
Run Code Online (Sandbox Code Playgroud)