想象一下,你有这个地方
public static T AnyOne<T>(this T[] ra) where T:class
{
int k = ra.Length;
int r = Random.Range(0,k);
return ra[r];
}
Run Code Online (Sandbox Code Playgroud)
甚至只是这个
public static string OneOf(this string[] strings)
{
return "a";
}
Run Code Online (Sandbox Code Playgroud)
然后,当然你可以这样做......
string[] st = {"a","b","c"};
string letter = st.AnyOne();
Run Code Online (Sandbox Code Playgroud)
......这很棒.但.看起来你不能这样做:
string letter = {"a","b","c"}.AnyOne();
Run Code Online (Sandbox Code Playgroud)
或者也许是这个
string letter = ( {"a","b","c"} ).AnyOne();
Run Code Online (Sandbox Code Playgroud)
或者我试过的任何其他事情
事实上(1)为什么一个人不这样做?(2)我错过了什么,如果有办法,你会怎么做?
我有以下方法:
protected T AttachComponent<T>(){
T gsComponent = gameObject.GetComponent<T>();
if(gsComponent == null){
gsComponent = gameObject.AddComponent<T>();
}
return gsComponent;
}
Run Code Online (Sandbox Code Playgroud)
在AddComponent
行我收到以下错误:
类型'T'不能用作泛型类型或方法'GameObject.AddComponent()'中的类型参数'T'.从'T'到'UnityEngine.Component'没有装箱转换或类型参数转换.
我不知道我能做些什么来解决这个错误,为什么我不能这样做?
我在鼠标单击时实例化一个对象。我需要将 x 和 y 转换位置最多保留 3 个小数位。这是我的代码。
void OnMouseDown()
{
ray=Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray,out hit))
{
if(Input.GetKey(KeyCode.Mouse0))
{
GameObject obj=Instantiate(prefab,new Vector3(hit.point.x,hit.point.y,hit.point.z), Quaternion.identity) as GameObject;
OrbsList.Add(new Vector3(obj.transform.position.x,obj.transform.position.y,0));
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果 obj 在位置 (4.53325, 3.03369, 0) 处实例化,则将其保存为 (4.5,3.0,0)。我想将它的位置保存为 (4.53325, 3.03369, 0)。请帮忙谢谢。
嗨,我正在尝试统一创建一个协程,以处理各种物体上的褪色。到目前为止,我已经能够获得所需的不同类型的Alpha值,但是在使用新颜色后如何设置它还处于死胡同。这是我的代码:
public static IEnumerator FadeTo(float aValue, float aTime,GameObject gameObj)
{
Component[] allComponents = gameObj.GetComponents(typeof(Component));
Component fadableComponent;
Type type = null;
float alpha=0;
foreach(Component c in allComponents)
{
if(c.GetType()==typeof(Image))
{
fadableComponent = c;
alpha = fadableComponent.GetComponent<Image>().color.a;
type = fadableComponent.GetType();
Debug.Log("Found a image");
break;
}
if (c.GetType() == typeof(Renderer))
{
fadableComponent = c;
alpha = fadableComponent.GetComponent<Renderer>().material.color.a;
type = fadableComponent.GetType();
break;
}
if (c.GetType() == typeof(SpriteRenderer))
{
fadableComponent = c;
alpha = fadableComponent.GetComponent<SpriteRenderer>().color.a;
type = fadableComponent.GetType();
break;
}
if(c.GetType()== typeof(CanvasGroup))
{
fadableComponent = …
Run Code Online (Sandbox Code Playgroud) 我试图扩展Vector3D功能的Vector3.它没有一个小于运算符,所以我试图创建一个.但是,当我为它编写扩展方法时,我的IDE告诉我"Identifier expected,'this'是一个关键字".
如何使用运算符编写扩展方法?这是我的尝试,出乎意料地无效:
using UnityEngine;
using System.Collections;
public static class Vector3Extensions
{
public static bool operator <(this Vector3 vector3, Vector3 other)
{
if (vector3.x < other.x)
{
return true;
}
else if (vector3.x > other.x)
{
return false;
}
else if (vector3.y < other.y)
{
return true;
}
else if (vector3.y > other.y)
{
return false;
}
else if (vector3.z < other.z)
{
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud) 我在游戏中创建了一个键盘.我创建的游戏对象有10个按钮:0-9.玩家必须输入4位数代码才能打开门.一旦玩家输入第一个数字,它就会显示在键盘的屏幕上.
我已经完成了所有基本代码,但我确信我已经以非常低效的方式完成了这项工作.现在,我已将以下功能附加到我的一个键上,实际上是数字键1:
public void Key1() {
if (digit1entered == false) {
digit1 = 1;
displaycode.text = digit1.ToString () + digit2.ToString () + digit3.ToString () + digit4.ToString ();
print ("First digit entered");
digit1entered = true;
} else {
if (digit1entered == true && digit2entered == false) {
digit2 = 1;
digit2entered = true;
displaycode.text = digit1.ToString () + digit2.ToString () + digit3.ToString () + digit4.ToString ();
print ("2nd digit entered");
} else {
if (digit2entered == true && digit3entered == false) …
Run Code Online (Sandbox Code Playgroud)