求助,把按键写在触发器里面就不能实现了
疯啦哈哈哈
疯啦哈哈哈 5753 10
脚本 2016-01-09 14:00

图片:4.png

如图,我想要实现在离方块一定距离内按左键可以让方块转30度,就像开门一样,但是运行后返回值告诉我只运行到碰撞检测,按左键没有任何返回值。但是把按键语句单列出来到update里就可以转30度,求解。
分享:
游客
要评论请先登录 或者 注册
10条回应 只看楼主 最新
疯啦哈哈哈 学徒 2016-01-09 14:01 1楼
var target : GameObject;
var eventName1 : String;
function OnTriggerEnter(other:Collider){
print(other.collider.gameObject);
if(Input.GetMouseButtonDown(0))
     {
      print("open");
      iTweenEvent.GetEvent(target, eventName1).Play();
     }
}
这是代码
hawk 管理员 2016-01-09 16:48 2楼
触发器需要碰到对象才会触发,在对象之外是不行的。
疯啦哈哈哈 学徒 2016-01-09 16:59 3楼
hawk:触发器需要碰到对象才会触发,在对象之外是不行的。回到原帖
是的,触发器碰到对象了,左下角有返回值,me就是第一人称控制器
terender 学徒 2016-01-10 21:29 4楼
OnTriggerEnter 这个函数只在碰撞开始的时候触发一次,在碰撞保持期间不会再被触发。
换句话说,这个事件表示“碰撞开始”。而在开始碰撞的那一帧中,并没有鼠标左键按下事件到来。按照你这种写法,除非你的操作需要逆天到,能够保证刚好在碰撞开始的那一帧同时按下鼠标左键,否则,OnTriggerEnter与GetMouseButtonDown不会同时被触发。
你需要自己保存一个是否在碰撞状态的标记 isCollide。当OnTriggerEnter的时候置isCollide = true; 当OnTriggerExit的时候置 isCollide = false。 然后在 Update中检测GetMouseButtonDown 同时判断isCollide标记,来决定是否执行旋转功能。

注意,如果在OnTriggerStay中检测鼠标状态,是一种不能确保一定触发的方法。因为OnTriggerStay 是在碰撞持续过程中的每个fixed update(物理帧) 帧中被触发,而GetMouseButtonDown 是只在鼠标被按下的当前帧有效,不能保证每个逻辑帧都会触发OnTriggerStay, 因此不能保证所有的鼠标按下事件都能被正确响应。
terender 学徒 2016-01-10 21:33 5楼
terender:OnTriggerEnter 这个函数只在碰撞开始的时候触发一次,在碰撞保持期间不会再被触发。
换句话说,这个事件表示“碰撞开始”。而在开始碰撞的那一帧中,并没有鼠标左键按下事件到来。按照你这种写法,除非你的操作需要逆天到,能够保证刚好在碰...
回到原帖
还有一种方法,是在OnTriggerStay 函数中,判断 GetMouseButton。因为GetMouseButton是检测当前鼠标按钮的状态,只要在检测的时刻,按钮是按下的,就会返回true。
但是注意用这种方法,如果鼠标一直保持按下状态,并且碰撞也一直持续中,判断就一直可已通过,所以需要自己写额外的代码来判断是否已经执行过旋转功能了。否则按住鼠标会一直不停的转
疯啦哈哈哈 学徒 2016-01-11 10:31 6楼
哦~我刚解决就来了
我把刚体碰撞检测改成了射线碰撞检测,就可以实现了:
#pragma strict
var hit:RaycastHit;
var target : GameObject;
var eventName1 : String;
function Start () {
//script=gameObject.GetComponentsInChildren(empty);
}

function Update () {
  var fwd = transform.TransformDirection (Vector3.forward);
if (Physics.Raycast (transform.position,fwd,hit, 2)) {
   Debug.DrawLine(transform.position,hit.point,Color.red);
print ("There is something in front of the object!"+hit.collider.gameObject);
if(Input.GetKeyDown(KeyCode.E)){
  iTweenEvent.GetEvent(target, eventName1).Play();
}
}
}
但是可以用刚体碰撞检测来实现操作提示,我还要再看看
爆炸吧现充 新手 2016-03-17 13:51 7楼
OnTriggerEnter需要有一方是刚体才行哦
绑定Q用 学徒 2017-05-27 09:48 8楼
playmaker搞掂
normalized 学徒 2017-09-26 09:47 9楼
6666666666666666666
1 2
返回顶部