【问题标题】:Unity3d Select child object by touchUnity3d 通过触摸选择子对象
【发布时间】:2016-04-10 12:33:26
【问题描述】:

当我触摸子对象时出现问题(它是沙发上的枕头)。

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

【问题讨论】:

  • 你必须在枕头上有一个单独的对撞机才能做到这一点。
  • 我在沙发和枕头上安装了盒子对撞机
  • 您能否发布一张沙发层次结构的屏幕截图并突出显示您希望射线击中的对象?
  • 添加了屏幕截图。如果用户触摸沙发我想打沙发,如果用户触摸枕头我想选择枕头
  • 我要说的是,Unity Answers 是一个更适合解决 Unity 相关问题的网站。

标签: unity3d scripting monodevelop


【解决方案1】:

预期的解决方案!

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

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

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

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

【讨论】:

    【解决方案2】:

    沙发的盒子碰撞器包含两个枕头碰撞器。结果,没有射线或实际上没有物体可以接触枕头对撞机,因为它在沙发对撞机内部,这就是为什么沙发对撞机总是首先被触摸的原因。解决这个问题的方法是为沙发制作一个复合碰撞器,即为沙发底部制作一个碰撞器,将其添加到“沙发”游戏对象中,再为沙发的扶手和靠背制作两到三个碰撞器,然后将它们添加为对撞机的子项。

    【讨论】:

      【解决方案3】:

      您的枕头碰撞器位于沙发碰撞器内。这就是为什么在触摸时,您的游戏是在枕头之前找到沙发。尝试自定义沙发碰撞器。通过以某种方式添加多个 BoxCollider,以便枕头出现。

      【讨论】:

      • 抢我先机!
      • @EvilTak 3 个答案。 :P :D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      相关资源
      最近更新 更多