【问题标题】:Unity, Why in c# script when using the var animation some properties not exist?Unity,为什么在c#脚本中使用var动画时某些属性不存在?
【发布时间】:2016-07-25 08:56:54
【问题描述】:

我想要做的是自动让角色走到一个特定的位置或者只是走到一个特定的方向。

using UnityEngine;
using System.Collections;

public class Ai : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

        var v = Input.GetAxis("Vertical");
        if(Mathf.Abs(v) > 0.1f) {
            animation["Walk"].speed = v;
            animation.CrossFade("Walk");
            transform.position.z += v;
        }
        else animation.CrossFade("Idle");
    }
}

speed 和 CrossFade 不存在。

更新我的尝试:

using UnityEngine;
using System.Collections;

public class Ai : MonoBehaviour {

    Animation animation;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

        var v = Input.GetAxis("Vertical");
        if(Mathf.Abs(v) > 0.1f) {
            animation["Walk"].speed = v;
            animation.CrossFade ("Walk");
            transform.position.z += v;
        }
        else animation.CrossFade("Idle");


    }
}

制作Animation的动画全局变量。 现在动画具有属性 speed 和 CrossFade 但现在我收到一个新警告和一个新错误:

警告上线:

Animation animation;

Ai.animation' hides inherited memberUnityEngine.Component.animation'。如果要隐藏,请使用 new 关键字

而且报错就行了:

transform.position.z += v;

无法修改“UnityEngine.Transform.position”的值类型返回值。考虑将值存储在临时变量中

【问题讨论】:

    标签: c# unity3d unityscript unity5


    【解决方案1】:

    因为var 代表匿名类型。它们只会在编译器时解析。

    正如 Pieter Witvoet 在评论中提到的那样,通常智能感知对隐式类型变量应该没有问题。

    但在你的情况下,你重叠了两个属性,所以现在 IDE 变得很困惑。

    所以现在你的智能感知不会明确你的对象是哪个类。

    只需将var animation 替换为Animation animation,您的智能感知就会提供所有缺失的功能和属性。

    https://msdn.microsoft.com/en-us/library/bb397696.aspx


    关于你的第二个问题:

    transform.position.z += new Vector3(0,0,v); 
    

    x,y 和 z 的 Vector3 属性都是只读的。

    【讨论】:

    • 我在Start函数前加了:Animation动画;那么所有属性现在都存在,但是我收到一个新警告和一个新错误。警告在线Animation动画; Ai.animation' hides inherited member UnityEngine.Component.animation'。如果打算隐藏并且错误位于 transform.position.z += v; 行,请使用 new 关键字无法修改“UnityEngine.Transform.position”的值类型返回值。考虑将值存储在临时变量中
    • 动画的全局变量是否正确?那么为什么会出现警告和错误呢?
    • 只需将变量从animation 重命名为_animation 或aiAnimation。
    • 改变了可变Animation动画;动画_动画;所以警告现在消失了。但我仍然遇到错误:transform.position.z += v;无法修改“UnityEngine.Transform.position”的值类型返回值。考虑将值存储在临时变量中
    • var 用于implicit typing,并不意味着使用匿名类型。 Intellisense 对隐式类型变量应该没有问题(我想这取决于使用的 IDE)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多