Unity,为什么在使用var动画时c#脚本中有些属性不存在?

时间:2016-07-25 08:56:54

标签: c# unity3d unityscript unity5

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

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");
    }
}

速度和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");


    }
}

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

警告在线:

Animation animation;

Ai.animation' hides inherited member UnityEngine.Component.animation&#39 ;.如果要隐藏

,请使用new关键字

错误在线:

transform.position.z += v;

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

1 个答案:

答案 0 :(得分:4)

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

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

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

所以现在你的intellisense没有奖励哪个类明确你的对象。

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

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

到第二个问题:

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

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