【问题标题】:Unity touch not working统一触摸不起作用
【发布时间】:2014-05-27 02:35:52
【问题描述】:

嘿,我在统一接受触摸注册时遇到问题。我正在创建的程序需要能够在阻止它的项目海洋中注册对特定项目的触摸。目前 Unity 没有注册我的触摸,因为我试图打印出消息以查看它在哪里结束并且它没有注册触摸。任何有关修复我的代码的帮助将不胜感激。 PS:代码是用Javascript编写的。

    #pragma strict
var target: GameObject;
var SpawnPoint: Transform;
var TargetCollider : BoxCollider;
var hit : RaycastHit;
var clone: GameObject;

function Start () {

    var x = Random.Range(-14,17);
    var y = Random.Range(-6,9);
    var z = Random.Range(2,3);
    SpawnPoint.position = Vector3(x,y,0);
    yield WaitForSeconds(5);
    clone = Instantiate(target, SpawnPoint.position, SpawnPoint.rotation);  
}

function Update () 
{
            /*
            if (Input.GetTouch(0))  
            {

            if (hit.collider != null)
            {
            var hit = RaycastHit;
            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            TargetCollider = target.GetComponent(BoxCollider);

            if (collider.Raycast(ray, RaycastHit, 100.00f)) {
                if (hit.collider != null)
                {
                    Destroy(clone);
                    Application.LoadLevel("Splash Screen Win");
                }   

            }
        }   

}
*/
                var tapCount = Input.touchCount;
                for (var i = 0; i < tapCount; i++)
                {
                var touch = Input.GetTouch(i);
                var hit : RaycastHit;
                if (Physics.Raycast (Camera.main.ScreenPointToRay(touch.position)))
                {
                    print("test"); 
                    /*if (hit.collider != null)
                    {
                    Destroy(clone);
                    Application.LoadLevel("Splash Screen Win");
                    }*/
                }


                }



}

【问题讨论】:

  • 你想触摸的物体有碰撞器组件吗?确保它没有设置为触发模式(或者如果是,请在物理选项中启用“光线投射命中触发器”)。

标签: unity3d unityscript


【解决方案1】:

试试这个

`函数更新() {

            var tapCount = Input.touchCount;
            for (var i = 0; i < tapCount; i++)
            {

            var ray = Camera.main.ScreenPointToRay (Input.GetTouch(i).position);
            var hit : RaycastHit;
            if (Physics.Raycast (ray, 100))
            {
                print("test"); 

            }


            }

}`

您可能需要将预期的目标对象放置在单独的图层上,以便您可以在该图层上专门进行光线投射并忽略不同图层上的其他对象。

Check out how to create layer masks

【讨论】:

  • 这与问题中的原始代码有何不同?它只限制了从Mathf.Infinity 到100 的光线距离。
  • 我想唯一的区别是我使用的方法返回一个射线变量,其中包含它所击中的所有对撞机。
  • 不,它不是,射线只是一个点和一个方向。 Physics.Raycast 在您使用时返回一个布尔值。 RaycastHit 变量未使用。
  • 已使用或未使用,原始代码中没有的变量存在
猜你喜欢
  • 2016-02-28
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多