Unity知识四:Unity编程过程中遇到的小问题(持续更新)

**

问题1:类型转换问题和Random类问题:

**
这里写图片描述
看着两行代码,在IDE中无错误出现,但是保存后在Unity中,就会报错:

Assets/Scripts/Element.cs(16,32): error CS1503: Argument `#1' cannot convert `float' expression to type `string'

说是不能转换,网上搜了一大堆,原因好像是编译的问题,编译原理没学过,暂时不明白。但是网上说的解决方法是用Convert.ToInt32()方法来转换,但是在Unity中怎么也写不出来这个方法,原因是没能导入命名空间:

using System;

导入后,这个问题就可以解决了,但是这个时候:
Unity知识四:Unity编程过程中遇到的小问题(持续更新)_第1张图片
这个Random又报错了,原因是Random是C#的类,而不是Unity的类,因此需要导入命名空间:

using Random=UnityEngine.Random;

导入之后就不会出错了。

**

问题2:快速响应点击事件的方法:

**
比如我们在制作扫雷游戏的时候,每一个方块都是可以点击的,我还记得第一次响应点击事件的时候用的是射线,感觉好麻烦!后来用button里面的click,再然后就是用EventtTrigger来响应,现在可以使用Unity为我们准备的函数方法: OnMouseUpAsButton().
扫雷游戏中的一个一个方块我们是新建一个Sprite,然后为其添加BoxCollider,一定要添加碰撞器,然后写一个脚本:test.cs

using UnityEngine;
using System.Collections;

public class test:MonoBehaviour{
    void OnMouseUpAsButton() 
    {
            //这里是你的代码:点击了这个方块你要做什么事情
    }
}

然后把这个脚本拖给刚才新建的Sprite就可以了,运行,点击一下Sprite,会运行OnMouseUpAsButton()里面的方法的。
关于Unity自带的许多方法,以后会慢慢总结的。

——————————————————————————————2016年6月8日

**

问题3:动态加载Resources文件夹下的Sprite时遇到的问题:

**
当触发某一事件的时候,我想让某一个Sprite的图片改变为另一张图片,所以用Resources.Load()方法去加载,但是出错了:

/// 
    /// 鼠标进入按钮
    /// 
    /// Go.
    public void OnMouseEnter(){
        GetComponent ().sprite = Resources.Load("image 3264");

    }

报错信息为:
Assets/Scripts/StartInterfaceScripts/StartIntferface.cs(51,49): error CS0266: Cannot implicitly convert type UnityEngine.Object' toUnityEngine.Sprite’. An explicit conversion exists (are you missing a cast?)
没太明白是什么意思,大致是类型转换的问题,类型没错啊,加载的图片是Sprite(2D and UI),没理由啊。
修改成:

/// 
    /// 鼠标进入按钮
    /// 
    /// Go.
    public void OnMouseEnter(){
        GetComponent ().sprite = (Sprite)Resources.Load("image 3264");

    }

Unity编译完成没报错,运行的时候,事件触发就开始报错了:
**InvalidCastException: Cannot cast from source type to destination type.
StartIntferface.OnMouseEnter () (at Assets/Scripts/StartInterfaceScripts/StartIntferface.cs:51)
UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32, Int32)**
这个也没懂是什么意思,反正就是类型无法转换。

再修改:

/// 
    /// 鼠标进入按钮
    /// 
    /// Go.
    public void OnMouseEnter(){
        GetComponent ().sprite = Resources.Load("image 3264") as Sprite;

    }

这次运行之后,事件触发直接图片就不见了。。。发现物体的Sprite直接为None,是没找到吗?可目标就在那儿啊!!

不信邪,再改:

/// 
    /// 鼠标进入按钮
    /// 
    /// Go.
    public void OnMouseEnter(){
        Sprite mySprite=Resources.Load("image 3264") as Sprite;
        print (mySprite);
        GetComponent ().sprite = mySprite;

    }

运行结果。。print出来 Null。

网上的解决方法是:

/// 
    /// 鼠标进入按钮
    /// 
    /// Go.
    public void OnMouseEnter(){
        GetComponent ().sprite = Resources.Load ("image 3264");
    }

运行结果正常,我的天。。。
网上的解释是说在Resources文件夹下有你要加载的资源,同时还有另一个同名的文件,但是这个文件不是我们这里需要的Sprite,因此,加载到它的时候就会出现各种不正常的情况。。

http://stackoverflow.com/questions/28629874/unity-resources-loadsprite-vs-as-sprite

皇天后土,明月可鉴!同名的文件在哪呢?我找了半天没找到,给我出来!!!
——————————————————————————————2016年6月14日

你可能感兴趣的:(学习C#基础,Unity基础)