Unity3d通过触摸选择子对象

时间:2016-01-06 12:07:33

标签: unity3d scripting monodevelop

当我触摸儿童物体(它是沙发上的枕头)时,我的问题就出现了。

collider.transform.name始终返回父亲的姓名。我试图更改所选的对象颜色。颜色更改脚本运行良好,但它始终返回父级。

一个例子:我想改变沙发上的枕头颜色,但它改变了沙发的颜色,而不是枕头。我是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;
        }
    }
}

enter image description here

4 个答案:

答案 0 :(得分:0)

你的枕头对撞机在沙发对撞机里面。这就是为什么在触摸时,你的游戏是在枕头之前找到沙发。尝试定制沙发对撞机。通过添加多个BoxColliders以使枕头挺身而出。

答案 1 :(得分:0)

沙发的Box Collider包含两个枕头对撞机。因此,没有射线或实际上没有物体可以碰到枕头对撞机,因为它在沙发对撞机内部,这就是为什么沙发对撞机将始终首先被触碰的原因。解决这个问题的方法是为沙发制作一个复合式对撞机,即为沙发底座制作一个对撞机,将其添加到沙发中。游戏对象,为沙发的扶手和靠背制作两到三个碰撞器,并将它们作为对撞机的子项添加。

答案 2 :(得分:0)

你的沙发对撞机阻止到达枕头对撞机。要么沙发对撞机更准确,座椅和背部有两个箱子,或者如果你可以选择"抓枕头"你可以改变碰撞层而忽略沙发。

答案 3 :(得分:0)

预期解决方案!

使用混蛋对手而不是盒子对撞机用于沙发和枕头这将解决枕头无法到达的问题。

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

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

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