实例化对象周围的预制

时间:2014-08-06 23:58:19

标签: unity3d mesh

我有一个带有makehuman的身体的场景,当用户触摸手臂时,我需要在身体的手臂周围添加一个简单的预制件(圆环)。

我试过了:

  1. Instantiate预制件位于用户触摸的位置,但预装臂位于手臂的边框中。
  2. Instantiate手臂中央的预制件,使用以下代码:
  3.     float radio = hit.transform.collider.radius; // the arm has a capsuleCollider
        Ray r = Camera.main.ScreenPointToRay(Input.GetTouch(0));
        Vector3 origin = r.origin;
        float distance = (origin - hit.point).magnitude;
        RaycastHit ou;
        Vector3 position = hit.point;
        Ray r2 = new Ray(r.GetPoint(distance + 10f), -r.direction);
        if (cc.Raycast(r2, out ou, distance + 10f))
             position = (hit.point + ou.point) / 2;
    
        Instantiate(Prefab, position, Quaternion.identity);
    

    尝试选择手臂的中心并初始化圆环。

    第二种选择在某些情况下有效,但总体印象是错误的做法。

    如何在对撞机周围添加预制件?或者,如何修改网格以添加可视指示符?

1 个答案:

答案 0 :(得分:1)

这应该效果更好,看起来更干净:

Vector3 center = hit.transform.collider.bounds.center;
Instantiate(Prefab, center, Quaternion.identity);

hit.transform.collider是这个过程的重要组成部分,你得到了那个部分。 collider.bounds是围绕对撞机(http://docs.unity3d.com/ScriptReference/Collider-bounds.html)的边界框,而bounds.center是边界框({​​{3}})的中心。 bounds.center返回的Vector3是您要生成预制件的地方。

从那里,你应该能够将预制件旋转到所需的角度,并执行你想要的任何数量的操作。