Unity3d Select child object 通过触摸

Unity3d Select child object by touch

当我触摸 child object(它是沙发上的枕头)时,我的问题就出现了。

collider.transform.name 总是 returns parent 的名字。我正在尝试更改选定的 object 颜色。颜色更改脚本运行良好,只是它总是 returns parent。

一个例子:我只想改变沙发上枕头的颜色,但它改变了沙发的颜色而不是枕头。我是 Unity 的新手。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class objectSelect : MonoBehaviour {
    public Text tex;
    public Text tex2;
    public Transform obj1;
    public string rr;

    void Start () {
    }

    void Update () {
        Touch touch = Input.touches [0];
        Vector3 pos = touch.position;
        if (Input.touchCount > 0 && touch.phase == TouchPhase.Began) {
            RaycastHit hit;
            Ray ray = Camera.main.ScreenPointToRay (pos); 
            Vector3 planePoint = ray.GetPoint(0.0f);
            if (Physics.Raycast(ray,out hit))
            {
                obj1 = hit.transform;
                tex.text = obj1.transform.gameObject.GetInstanceID().ToString();
                tex2.text = hit.collider.transform.name;
                RR=obj1.transform.gameObject.GetInstanceID().ToString();
            }
        }
    }

    public string getselectedObj() {
        return obj1.transform.gameObject.GetInstanceID().ToString();
    }
    public string r() {
        return "rrrrrR";
    }
    public string RR { 
        get {
            return rr;
        }
        set {
            rr = value;
        }
    }
}

你的枕头碰撞器在沙发碰撞器里面。这就是为什么在触摸时,您的游戏是先找到沙发再找到枕头。尝试定制沙发对撞机。通过以某种方式添加多个 BoxColliders,以便枕头会出现。

沙发的Box Collider包含两个pillow collider。结果,没有射线或者实际上没有物体可以接触到枕头碰撞体,因为它在沙发碰撞体内部,这就是沙发碰撞体总是首先被接触到的原因。解决方法可以是为沙发制作一个复合碰撞器,即为沙发底座制作一个碰撞器,将其添加到 "sofa" 游戏对象中,为沙发制作 two-three 个碰撞器扶手和靠背并将它们添加为对撞机的子项。

预期的解决方案!

对沙发和枕头使用Mess collider而不是box collider这将解决枕头无法到达的问题。

我对具有相同场景的一位客户使用相同的解决方案!

    objectSelect theScript = touchObj.GetComponent<objectSelect>();
    Renderer x = theScript.obj1.GetComponent<Renderer>();
    x.material.color = <Color you want to apply>;

touchObj 对象,return 引用您触摸的对象。沙发或枕头