zoukankan      html  css  js  c++  java
  • Unity物理投射相关问题整理

    1.投射目标是否需要附加刚体,是否可忽略触发器?

    默认既支持触发器,也支持刚体。投射的最后一个参数queryTriggerInteraction可以设置,是否包含触发器事件。

    2.非射线投射,是否有接触点信息?

    投射物刚好相交则会返回接触点信息(hits.point)法线信息等,如果是包含则没有,返回(0,0,0)。

    即使设置了投射方向,投射距离也是如此。安全的做法还是用射线投射

    3.NonAlloc系列方法注意事项

    你建立的缓存数组可以重复用,但需要每次使用时手动清除之前的状态,这个方法并不会帮你清除。

    或者通过返回值的数量来遍历。

    4.发射的投射方向为Vector3.zero,为无效方向,此时不会返回结果。

    5.发射的投射大小不能用Vector3.one*float.MaxValue,或者极大的数,否则检测无效。

    (但int.MaxValue倒是可以)

    var hits = Physics.BoxCastAll(Vector3.zero, Vector3.one * 10000, Vector3.zero, Quaternion.identity, 0);
    Debug.Log("Hits length: " + hits.Length);
    
    foreach (var item in hits)
    {
        Debug.Log(item.transform.name);
    }

    打印:Hits length: 0

    6.是否存在被一个更大的Collider包裹而无法返回正确结果

    2017/5/23 - 重新测试之后,更正下测试结果,之前有误

    使用Check系列API,比如Physics.CheckBox(...) 是可以检测到的

    使用Overlap系列API,比如Physics.OverlapBox(...)也是可以检测到的

    而使用Cast系列API,比如Physics.Raycast。则检测不到,必须在包裹Collider的外面。

    无论是Box,Capsule还是Ray,Line都不行。

    另外对于MeshCollider,如果一定要用cast来检测,可以用脚本做成双面的MeshCollider

    http://www.cnblogs.com/hont/p/6628841.html

    以上测试版本是unity5.5.2 f1

  • 相关阅读:
    安装 node-sass 的不成功
    input标签附带提示文字(bootstrap里面输入框的两侧同时添加额外元素)
    更改bootstrap的默认样式
    属性font-family:Font property font-family does not have generic default
    let与const命令
    vue之监听事件
    组件复用传值(待解决问题)
    vue之组件注册
    vue之组件理解(一)
    学习整理与细化(2)——HTML VS XHTML
  • 原文地址:https://www.cnblogs.com/hont/p/5887539.html
Copyright © 2011-2022 走看看