3
var startPoint = 
  shaft.transform.position 
  + shaft.transform.forward;
var ray = new Ray(
    startPoint, 
    -shaft.transform.forward
  );

RaycastHit rayCastHit;
Physics.Raycast(ray, out rayCastHit);
var textured2D = (Texture2D)discoBall.renderer.material.mainTexture;
Vector2 textureCoord = rayCastHit.textureCoord;
Debug.Log(string.Format(
    "{0},{1} at distance {2}", 
    textureCoord.x * textured2D.width, 
    textureCoord.y * textured2D.height, 
    rayCastHit.distance
  ));

その中にオブジェクト「シャフト」オブジェクトを持つ球があります。シャフトが指す方向にシャフトから離れた距離として startPoint を計算します (球の外に出るため)。次に、球の外側と衝突するように、同じ距離で球に戻る光線を作成します。

Debug.Log は、textureCoord に対して x,y = 0,0 を出力し、距離に対して正しい値 0.35 を出力します。実際には球体にテクスチャを持つマテリアルがあるのに、textureCoord が常に 0,0 になるのはなぜですか?

球のプロパティ

4

2 に答える 2

5

実際にコメントをここに移動させてください。球体はメッシュコライダーまたは球体コライダーを使用していますか? メッシュ コライダーを使用しない場合、textureCoord は Vector2.zero を返します

更新

GameObjectのコライダー タイプを変更するには、Unity エディターでそれを強調表示し、Component->Physics->MeshColliderに移動します。「既存のコンポーネントを置き換える」というプロンプトが表示されたら、「置き換える」を選択します。

Unity のGameObject->Create_Otherメニューから追加されたゲームオブジェクトは、オブジェクトの形状 (球、ボックスなど) に基づいてデフォルトでコライダーになる傾向があります。これは、メッシュ コライダーは計算コストが高いためです。

于 2013-02-23T21:57:40.183 に答える
1

texture2d の幅と高さは実際に期待どおりですか? maintexture は、使用しているシェーダーの正しいテクスチャではない可能性があります。

于 2013-02-23T21:56:03.453 に答える