首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能隐式地将“UnityEngine.Vector3”转换为“Vector3”

不能隐式地将“UnityEngine.Vector3”转换为“Vector3”
EN

Game Development用户
提问于 2020-06-17 22:22:49
回答 1查看 1.8K关注 0票数 0

我在具有泛型返回类型的抽象类中定义了一个抽象方法。但是,当我尝试将泛型类型用作Vector3 (或任何其他变量)时,我会得到以下错误:

不能隐式地将“UnityEngine.Vector3”类型转换为“Vector3”

这是我的代码:错误在行中

代码语言:javascript
运行
复制
return direction;
代码语言:javascript
运行
复制
using UnityEngine;


public class DashAbility : Ability
{

    public Vector3 direction;

    public override Vector3 getAbilityData<Vector3>()
    {
        return direction;
    }

    public override bool trigger(pointerData pointer)
    {
        return InputMaster.tryPointer(rollInputTest);
    }

    bool rollInputTest(pointerData p)
    {
        return (p.phase == pointerPhase.Dragging) && p.startHit.collider.CompareTag("Player");
    }
}

这是我从以下课程中派生出来的:

代码语言:javascript
运行
复制
using UnityEngine;

public abstract class Ability : MonoBehaviour
{
    public abstract bool trigger(pointerData pointer);
    public abstract T getAbilityData<T>() ;
}
EN

回答 1

Game Development用户

回答已采纳

发布于 2020-06-17 23:58:19

当你写这个时:

代码语言:javascript
运行
复制
public override Vector3 getAbilityData<Vector3>()
{
    return direction;
}

它想要从这里重写:

代码语言:javascript
运行
复制
public abstract T getAbilityData<T>() ;

在这个函数中,<T>是一个占位符,表示“一些任意类型,我将调用T”。

因此,为了匹配这一点,编译器必须将<Vector3>解释为“一些我将调用的任意类型的Vector3”-即。它不再引用UnityEngine.Vector3类型,它只是使用字符串"Vector3“作为此任意类型的占位符,与父类型匹配。

当然,从实际的UnityEngine.Vector3和我们称之为"Vector3“的任意类型中没有任何隐式转换,但也可以很容易地成为intbool或.

看起来你的意思是这样的:

代码语言:javascript
运行
复制
// "There are different kinds of ability, each with their own data type"
public abstract class Ability<T> : MonoBehaviour
{
    public abstract bool trigger(pointerData pointer);

    // "The getAbilityData method returns an instance of this particular ability's data type"
    public abstract T getAbilityData();
}

// "DashAbility is an Ability that uses Vector3 data"
public class DashAbility : Ability<Vector3>
{    
    public Vector3 direction;

    public override Vector3 getAbilityData()
    {
        return direction;
    }

    // ...
}

在这里,我们将T限制为每种派生形式的Ability的一种特定类型。对于DashAbility,它是UnityEngine.Vector3,所以现在DashAbility.getAbilityData()不再需要使用版本来处理任何任意类型,只有真正的实际Vector3版本。

票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/183622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档