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 引用您触摸的对象。沙发或枕头
当我触摸 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 引用您触摸的对象。沙发或枕头