需求:以教堂十字架为背景,在其上做从上到下,从左到右的画线操作.
解决:由于横竖两个物件的交叉处无法做2次判断(若交叉处判定为垂直物件的,则划横线时无法响应),便将其查分成5块.结合处单独
立方体表示.以垂直方向考虑,为了让其精确判断,将上下两部分再次准确分割,加入两个比较短的判定位置.最上面的短判定位置为路
线记录起始,下面的是中止,在unity3d中,用5个互相穿插的立方体表示.
起始思路(只碰两个):
第一个立方体脚本如下 cubeA.js
// 是否进入立方体内
static var col : boolean = false;
function OnMouseEnter() { col = true; }
function OnMouseExit(){ col = false; }
第二个立方体脚本如下 cubeB.js
function OnMouseEnter(){ if(cubeA.col == true){ 成功 } }
结果发现,就算两个立方体穿插在一起.只要鼠标进入第二个立方体,就是判定离开第一个立方体.所以 cubeA.col 只要在cubeB里必
然是false.
完成思路:
找到了个比较好的数据
Time.renderedFrameCount
,已经运行的帧数.
cubeA.js
// 记录鼠标离开时的帧数
static var frm :int = 0;
function OnMouseExit(){ frm = Time.renderedFrameCount; }
cubeB.js
// 是否正常从第一块划过
static var col : boolean = false;
// 记录鼠标离开时的帧数
static var frm :int = 0;
function OnMouseEnter()
{
//给5帧的机会
if( (Time.renderedFrameCount - cubeA.frm ) <
5)
{
col = true;
}
}
function OnMouseExit(){ if( col == true )frm =Time.renderedFrameCount; }
在
unity3d教程第3个物件里这样写
static var col : boolean = false;
function OnMouseEnter()
{
if(cubeB.col == true && ( Time.renderedFrameCount - cubeB.frm) <
5 ))
{
col = true
}
}
function OnMouseExit(){ if( col == true )frm =Time.renderedFrameCount; }
解决:由于横竖两个物件的交叉处无法做2次判断(若交叉处判定为垂直物件的,则划横线时无法响应),便将其查分成5块.结合处单独
立方体表示.以垂直方向考虑,为了让其精确判断,将上下两部分再次准确分割,加入两个比较短的判定位置.最上面的短判定位置为路
线记录起始,下面的是中止,在unity3d中,用5个互相穿插的立方体表示.
起始思路(只碰两个):
第一个立方体脚本如下 cubeA.js
// 是否进入立方体内
static var col : boolean = false;
function OnMouseEnter() { col = true; }
function OnMouseExit(){ col = false; }
第二个立方体脚本如下 cubeB.js
function OnMouseEnter(){ if(cubeA.col == true){ 成功 } }
结果发现,就算两个立方体穿插在一起.只要鼠标进入第二个立方体,就是判定离开第一个立方体.所以 cubeA.col 只要在cubeB里必
然是false.
完成思路:
找到了个比较好的数据
cubeA.js
// 记录鼠标离开时的帧数
static var frm :int = 0;
function OnMouseExit(){ frm = Time.renderedFrameCount; }
cubeB.js
// 是否正常从第一块划过
static var col : boolean = false;
// 记录鼠标离开时的帧数
static var frm :int = 0;
function OnMouseEnter()
{
function OnMouseExit(){ if( col == true )frm =Time.renderedFrameCount; }
static var col : boolean = false;
function OnMouseEnter()
{
}
function OnMouseExit(){ if( col == true )frm =Time.renderedFrameCount; }