iLeichun

当前位置:首页

Unity某个类访问另一个类成员的几种方式

分类:Unity3d  来源:网络  时间:Jul 25, 2019 3:00:01 PM

Unity中的脚本大多数都是绑定到某个游戏对象中,那么某个类要如何才能访问到另一个类的属性和方法?下面提供几种方式,供参考:


方式1:设置被调用类为单例

public class PlayerAttack : MonoBehaviour {  

    public static PlayerAttack _instance; // static关键字,单例模式   

  

    void Awake(){  

        _instance = this;// 确保在使用前已被初始化  

    }  

  

    public void TakeDamage(int damage){  // 可被外部调用的方法

          

    }  

}


public class Enemy : MonoBehaviour {

   void Attack(){      // 当敌人攻击主角时

      PlayerAttack._instance.TakeDamage(20);

   }

}


方式2:设置被调用类的属性、方法为static

public class PlayerAttack : MonoBehaviour {  

    public static void TakeDamage(int damage){  // 可被外部调用的方法

          

    }  

}


方式3:使用GameObject的SendMessage()

public class PlayerAttack : MonoBehaviour {  

    public void TakeDamage(int damage){  // 可被外部调用的方法

          

    }  

}


public class Enemy : MonoBehaviour {  

    void Attack(){  

      // 主角模型的tag为PlayerBoy

        GameObject p = GameObject.FindGameObjectWithTag("PlayerBoy");

        p.SendMessage("TakeDamage", 20);  

    }  

}


方式4:获取到某个对象的Script组件

这个脚本放在cube上 

public class Score : MonoBehaviour {  

    public  int allScore=100;  

    void Update () {  

       ...

    }  

}  


访问Score.allScore

public class Text : MonoBehaviour {  

    public GameObject Obj1;  

    void Start () {  

       Obj1 = GameObject.Find("Cube");  

       Score script=Obj1.GetComponent<Score>(); // 取对象的Script组件

       Debug.Log(script.allScore);   

    }  

}  


VS找不到UnityEngine、UnityEngine.UI等引用的解决办法

分类:Unity3d  来源:网络  时间:Jan 9, 2019 3:46:15 PM

当打开别人的项目或者自己的项目在其他电脑上打开时,VS中可能会出现找不到Unity库的问题,这往往是由于不同电脑中Unity安装目录不相同导致的。会出现下图所示的情况:

11.png


打开某个类后也会出现找不到引用类的情况,如

22.png


要解决这个问题就得让VS能正确找到每个引用的位置,可以有3种方法:


一、手动在VS中添加引用

如下图所示,首先得找到dll文件所在的位置,才能导入。这种方式比较繁琐。

33.png


20190109_154417_0752.png


二、Unity中设置

如下图所示,先把脚本编辑器改成MonoDevelop,然后用MonoDevelop随便打开一个脚本,打开后可以关闭MonoDevelop

55.png


66.png


再把脚本编辑器改成VS,

77.png


再用VS打开脚本的时候发现引用正常了

8.png


三、修改配置文件

用文本编辑器打开工程目录下面的 Assembly-CSharp.csproj、Assembly-CSharp-Editor.csproj 两个文件,对里面的所有不正确的路径进行修改即可

9.png


总结:

其实方式一、二最终都是要修改 Assembly-CSharp.csproj、Assembly-CSharp-Editor.csproj 这两个配置文件,只是比方式三更可视化一些。方式二最简单,是利用MonoDevelop来自动修改上述配置文件,但是如果没有安装MonoDevelop或者采用该方式失败的时候就只有改用其他方式了。总之,不管使用哪种方式,适合自己的就是最好的,每个人都有不同的爱好。


Flash Builder链接了外部资源后打不开怎么办?

分类:Flash  来源:网络  时间:Jun 14, 2018 8:37:56 PM

假设该项目链接了两个外部目录,分别为:

H:/Helloworld/war

H:/Helloworld/map


如图:

blob.png


但是如果上面两个目录下面的文件非常多,那么就有可能导致Flash Builder卡死,甚至奔溃。那么在强制退出之后再重启时可能会由于内存不足而不能打开Flash Builder了,这时怎么办?这时有两种选择:


一、删除项目目录下所有Flash Builder配置文件,重新建立项目

选中下面的目录或文件删除,再打开Flash Builder,此时项目在Flash Builder中找不到了,需要重新建立一个项目。

blob.png

blob.png


二、修改配置文件

1、用文本编辑器打开.actionScriptProperties,修改蓝色框框中的内容

blob.png


修改后变成:

blob.png


2、用文本编辑器打开.project,删除下面的内容

blob.png


3、重新启动Flash Builder就正常了,可以看到连接的内容已经不见了,如果需要可以重新链接,但最好使用完成后在关闭Flash Builder之前取消链接,以免下次不能正常打开Flash Builder。

LayaAir提示:版本不匹配!全局tsc(2.7.2)!=VS Code的语言服务(2.1.5)。可能出现不一致的编译错误

分类:其他  来源:网络  时间:Apr 10, 2018 11:55:42 AM

LayaAir编译时提示:版本不匹配!全局tsc(2.7.2)!=VS Code的语言服务(2.1.5)。可能出现不一致的编译错误

QQ截图20180410113537.jpg


这个错误意思是VS Code内置的TypeScript与本地安装的TypeScript版本号不匹配;

在cmd窗口输入:tsc -v,发现当前本地的TypeScript版本号是2.7.2

QQ截图20180410115056.jpg


为此,需要修改本地TypeScript版本号为2.1.5,在cmd中输入下面的命令重新安装下就好了:

npm install -g typescript@2.1.5

QQ截图20180410115029.jpg


重新查看版本号,发现已经改过来了。

QQ截图20180410115119.jpg


重启LayaAir就正常了。


分享两个实用的股票数据接口

分类:个人日志  来源:网络  时间:Apr 8, 2018 10:02:31 AM

一、搜狐(推荐)

可查询任意时间区间,起始时间不受限制,api为:

http://q.stock.sohu.com/hisHq?code=cn_000858&start=20180101&end=20181231&stat=1&order=D&period=d&callback=historySearchHandler&rt=jsonp


参数说明:

code:股票代码

start:开始日期

end:结束日期


返回json数据,每天1条数据,下面是其中1天:

["2018-03-09","77.30","77.10","0.20","0.26%","76.18","78.39","245529","189421.42","0.65%"]

分别表示:

时间、开盘价、收盘价、涨跌金额、涨幅、最低价、最高价、成交量、成交金额、换手率


二、新浪

最多只能获取最近1023个节点的数据(大概最近3个半月)

http://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData?symbol=sz002095&scale=60&ma=no&datalen=1023


参数说明:

symbol:股票代码

datalen:节点个数,最大为1023,大于此值也最多只显示最近的1023个


返回json数据,每天有4条数据(每小时1条,若要取当天收盘数据,就是对应4条中的最后一条),下面是其中1天:

{day:"2018-03-09 10:30:00",open:"44.520",high:"47.500",low:"44.000",close:"47.200",volume:"3105149"},

{day:"2018-03-09 11:30:00",open:"47.200",high:"49.150",low:"46.790",close:"49.150",volume:"3982161"},

{day:"2018-03-09 14:00:00",open:"49.150",high:"49.150",low:"49.150",close:"49.150",volume:"1161098"},

{day:"2018-03-09 15:00:00",open:"49.150",high:"49.150",low:"49.150",close:"49.150",volume:"253529"}

分别表示:

时间、开盘价、最高价、最低价、收盘价、成交量


ps:由此可见无论是时间跨度还是数据量,都是搜狐的接口更好,推荐使用


C#数组初始化的3种方式

分类:C#  来源:网络  时间:Dec 28, 2017 3:45:55 PM

C#数组的初始化有3种方式,方便在不同的场合选择不同的方式来初始化,下面将举例说明:

(1)一维数组

初始化的3种方式:

①int[] arr = new int[2];

arr[0] = 1;

arr[1] = 2;

②int[] arr = new int[]{1, 2};

③int[] arr = {1, 2};


(2)二维(或多维)数组

本例以二维数组为例,多维数组类推,初始化的3种方式:

①int[,] arr = new int[2, 3];

arr[0, 1] = 1;

arr[0, 2] = 2;

arr[0, 3] = 3;

arr[1, 1] = 11;

arr[1, 2] = 22;

arr[1, 3] = 33;

②int[,] arr = new int[,]{{1, 2, 3}, {11, 22, 33}};

③int[,] arr = {1, 2, 3}, {11, 22, 33};


(3)不规则数组

int[][] arr = new int[2][];

arr[0] = new int[4];

arr[1] = new int[5];

然后要对子数组进行初始化,可使用上述(1)(2)中的3种方式进行,如:

arr[0][0] = 1;

arr[0][1] = 2;

...


Unity3d之Hinge Joint组件

分类:Unity3d  来源:网络  时间:Dec 19, 2017 4:29:03 PM

链接两个物体,两个物体的运动互相牵连;

blob.png

此处两个物体均需要有Rigidbody组件;假设有A、B两个新物体,均没有Rigidbody组件,则:

(1)若给A添加Hinge Joint组件,会自动添加Rigidbody组件;

(2)当给A链接B时,若B没有Rigidbody组件,将不会出现在选择列表中,无法链接;

(3)当A已经链接B时,若尝试删除A的Rigidbody组件,则会提示无法删除,必须要先手动移除Hinge Joint组件,才能删除Rigidbody组件;

blob.png

(4)当A已经链接B时,若删除B的Rigidbody组件,则A中的链接源会显示已丢失;

blob.png

(5)也可以给B新增链接到C,此时3个物体的运动均受到牵连;当然B也可以链接到A(由于A已链接到B,所以这个链接是多余的,效果不受影响);

(6)若已给B添加Hinge Joint组件,但没设置链接源,则A、B均保持静止;

(7)A、B物体的Use Gravity均不勾选时,A、B均保持静止,否则有一个勾选,两个物体均会运动;

blob.png

jsp中各种url的获取方法

分类:Jsp  来源:网络  时间:Dec 15, 2017 10:52:52 PM

1、获取项目名称,如:myproject

String path = request.getContextPath();


2、获取项目根目录地址,如:http://localhost:8080/myproject/

String basePath = request.getScheme()+"://"+request.getServerName()

+":"+request.getServerPort()+path+"/";


3、获取当前访问的文件所在目录,如http://localhost:8080/myproject/book/

String nowPath = basePath + 

request.getServletPath().substring(0,request.getServletPath().lastIndexOf("/")+1);


4、获取当前访问文件,如http://localhost:8080/myproject/book/book.jsp

String nowPath = basePath + request.getServletPath();


unity3d查找某个游戏对象的三种方法

分类:Unity3d  来源:网络  时间:Dec 8, 2017 4:15:38 PM

unity3d查找某个游戏对象有三种方法,分别是Find、FindWithTag、FindGameObjectsWithTag,每种方法各有特色

(1)GameObject.Find()

blob.png

// Sphere为游戏对象名称,区分大小写

GameObject sp = GameObject.Find("Sphere");

//判断是否为空

if(sp != null)

{

...

}

该方法的执行效率低,最好不要在update中调用;否则,最好用FindWithTag()替代


(2)GameObject.FindWithTag()

blob.png

// Sphere1为游戏对象tag,区分大小写

GameObject sp = GameObject.FindWithTag("Sphere1");

需要先给组件设置一个tag,若有多个相同tag的对象,则只取第一个对象


(3)GameObject.FindGameObjectsWithTag()

获取具有相同tag的游戏对象数组,需要循环处理数组

GameObject[] sp = GameObject.FindGameObjectsWithTag("Sphere1");


AS3中Object键值对的一些总结

分类:ActionScript  来源:网络  时间:Nov 30, 2017 11:10:21 AM

一、键值对的多种写法

1、数字作为键

var obj : Object = {1:"ab", 2:"cd", 3:"ef"};


2、字符串作为键

var obj : Object = {a:"ab", b:"cd", c:"ef"};

var obj : Object = {"a":"ab", "b":"cd", "c":"ef"};

当然,数字也可以作为字符使用,于是

var obj : Object = {"1":"ab", "2":"cd", "3":"ef"};


3、数组作为键

var nameArr = ["a", "b", "c"];

var stoneObj0 : Object = {(nameArr[0]) : 2, (nameArr[1]) : 2, (nameArr[2]) : [1, 2]};

注意要加括号,而不能是

var stoneObj0 : Object = {nameArr[0] : 2,   nameArr[1] : 2,   nameArr[2] : [1, 2]};


4、数组作为值

var obj : Object = {1:["ab", "cd"], 2:["ef", "gh"]};



二、键值对的获取

1、for...in获取键、值

var obj : Object = {1:"ab", 2:"cd"};

for (var key in obj) { 

    trace("键:" + key);

    trace("值:" + obj[key]); 


输出:

键:1

值:ab

键:2

值:cd



2、for each..in获取值

var obj : Object = {1:"ab", 2:"cd"};

for each(var value in obj) { 

    trace("值:" + value); 


输出:

值:ab

值:cd


  • 60
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • >>
  • >|