Physics.CapsuleCastAll 所有胶囊投射

static function CapsuleCastAll (point1 : Vector3, point2 : Vector3, radius : float, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]

Parameters参数

Returns

RaycastHit[] - an array of all colliders hit in the sweep.

返回交互碰撞体信息的数组。

Description描述

Like Physics.CapsuleCast, but this function will return all hits the capsule sweep intersects.

Physics.CapsuleCast 不同的是这个函数返回所有交互的碰撞体信息。

Casts a capsule against all colliders in the scene and returns detailed information on each collider which was hit. The capsule is defined by the two spheres with radius around point1 and point2, which form the two ends of the capsule. Hits are returned all colliders which would collide against this capsule if the capsule was moved along direction. This is useful when a Raycast does not give enough precision, because you want to find out if an object of a specific size, such as a character, will be able to move somewhere without colliding with anything on the way.

做一个胶囊物体的投射,对于场景中的所有物体。返回每一个碰撞体的信息。胶囊物体的描述:point1 ,point2为上下两个结束点,radius为半径。对胶囊物体做投射时,如果和碰撞体碰撞,raycasthit 结构返回碰撞信息。这可以用在光线投射无法满足要求时的情况下。例如要判断角色(有空间大小尺寸)是否和一个物体发生碰撞。

参见: Physics.SphereCast, Physics.CapsuleCast, Physics.Raycast, Rigidbody.SweepTest

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	void Update() {
		RaycastHit[] hits;
		CharacterController charCtrl = GetComponent<CharacterController>();
		Vector3 p1 = transform.position + charCtrl.center + Vector3.up * -charCtrl.height * 0.5F;
		Vector3 p2 = p1 + Vector3.up * charCtrl.height;
		hits = Physics.CapsuleCastAll(p1, p2, charCtrl.radius, transform.forward, 10);
		int i = 0;
		while (i < hits.Length) {
			RaycastHit hit = hits[i];
			System.Object renderer = hit.collider.renderer;
			if (renderer) {
				renderer.material.shader = Shader.Find("Transparent/Diffuse");
				renderer.material.color.a = 0.3F;
			}
			i++;
		}
	}
}
function Update () {
	var hits : RaycastHit[];
	var charCtrl : CharacterController = GetComponent(CharacterController);
	var p1 : Vector3 = transform.position + charCtrl.center +
	Vector3.up * (-charCtrl.height*0.5);
	var p2 : Vector3 = p1 + Vector3.up * charCtrl.height;
	// Cast character controller shape 10 meters forward, to see if it is about to hit anything
	//向前投射角色物体10米,是否与其他物体碰撞
	hits = Physics.CapsuleCastAll (p1, p2, charCtrl.radius, transform.forward, 10);

	// Change the material of all hit colliders
	// to use a transparent Shader
	//改变每一个碰撞体的着色器为透明
	for (var i = 0;i < hits.Length;i++) {
		var hit : RaycastHit = hits[i];
		var renderer = hit.collider.renderer;
		if (renderer) {
			renderer.material.shader = Shader.Find("Transparent/Diffuse");
			renderer.material.color.a = 0.3;
		}
	}
}
最后修改:2011年4月9日 Saturday 12:22

本脚本参考基于Unity 3.4.1f5

英文部分版权属©Unity公司所有,中文部分© Unity圣典 版权所有,未经许可,严禁转载 。