相关疑难解决方法(0)

不能在c#中使用"内联"数组?

想象一下,你有这个地方

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)我错过了什么,如果有办法,你会怎么做?

c#

83
推荐指数
3
解决办法
2万
查看次数

类型'T'不能用作泛型类型或方法中的类型参数'T'

我有以下方法:

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'没有装箱转换或类型参数转换.

我不知道我能做些什么来解决这个错误,为什么我不能这样做?

c# unity-game-engine

6
推荐指数
1
解决办法
8605
查看次数

在 unity 中获取最多 3 个小数位的对象位置

我在鼠标单击时实例化一个对象。我需要将 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)。请帮忙谢谢。

c# unity-game-engine

2
推荐指数
1
解决办法
2314
查看次数

创建协程以淡出不同类型的对象

嗨,我正在尝试统一创建一个协程,以处理各种物体上的褪色。到目前为止,我已经能够获得所需的不同类型的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)

c# unity-game-engine

2
推荐指数
1
解决办法
874
查看次数

Unity3D,如何为运营商编写扩展方法?

我试图扩展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)

c# extension-methods operator-overloading unity-game-engine

1
推荐指数
1
解决办法
349
查看次数

实现pin键盘,简化代码?

我在游戏中创建了一个键盘.我创建的游戏对象有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)

c# unity-game-engine

1
推荐指数
1
解决办法
286
查看次数