Unity3d通过触摸选择子对象

Unity3d通过触摸选择子对象,unity3d,scripting,monodevelop,Unity3d,Scripting,Monodevelop,我的问题发生在我触摸儿童物体(沙发上的枕头)时 collider.transform.name始终返回父级的名称。我正在尝试更改选定对象的颜色。颜色更改脚本运行良好,只是它总是返回父脚本 例如:我只想更改沙发上枕头的颜色,但它会更改沙发的颜色,而不是枕头的颜色。我不熟悉团结 using UnityEngine; using System.Collections; using UnityEngine.UI; public class objectSelect : MonoBehaviour {

我的问题发生在我触摸儿童物体(沙发上的枕头)时

collider.transform.name
始终返回父级的名称。我正在尝试更改选定对象的颜色。颜色更改脚本运行良好,只是它总是返回父脚本

例如:我只想更改沙发上枕头的颜色,但它会更改沙发的颜色,而不是枕头的颜色。我不熟悉团结

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;
        }
    }
}

您的枕头碰撞器位于沙发碰撞器内。这就是为什么在触摸屏上,你的游戏是在枕头之前找到沙发。尝试自定义沙发碰撞器。通过添加多个BoxCollider使枕头向前移动。

沙发的BoxCollider包含两个枕头碰撞器。因此,没有光线或事实上没有任何对象可以触摸枕头碰撞器,因为它位于沙发碰撞器内部,这就是为什么沙发碰撞器总是首先被触摸的原因。解决方法是为沙发制作一个复合碰撞器,即为沙发的底座制作一个碰撞器,将其添加到“沙发”游戏对象中,为沙发的扶手和靠背再制作两个或三个碰撞器,并将其添加为碰撞器的子对象

期望的解决方案

对沙发和枕头使用混乱碰撞器而不是盒子碰撞器,这将解决枕头无法触及的问题

我使用相同的解决方案,其中一个客户端具有相同的场景

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

touchObj返回对您触摸的对象的引用的对象,例如沙发或枕头

您必须在枕头上有一个单独的对撞机才能执行此操作。我在沙发和枕头上有盒式对撞机。您可以发布沙发层次结构的屏幕截图并突出显示您希望光线击中的对象吗?添加了屏幕截图。如果用户触摸沙发,我想点击沙发,如果用户触摸枕头,我想选择枕头,我要说的是,Unity Answers是一个更适合Unity相关问题的网站。快来追我吧@艾维德3个答案:P:D