2017-12-08 12 views
0

Visual aid here距離にかかわらずオブジェクトの視覚的なサイズを一定にします

視覚的補助を参照してください。 gifに続いて、2つのGUIがあります。左側のGUIは、オブジェクトまでのカメラの距離に基づいて適切にスケーリングしています。右側のGUIはスケーリングされており、「シーン」ビューではっきりと見えますが、ゲームビューでは目立つものではありません。アプリケーションは、ユーザーの頭がUnityシーン内のカメラを制御するためのHololensのためのものです。

問題は、オブジェクトのスケーリングを設定することにあります。左のGUIに表示されているスケーリングのタイプを複製しようとしているうちに、一日中私の脳をぶら下げていました。距離を分割し、これを倍率で使用することは、オブジェクトが大きすぎるか、あまりにも速く成長するか、あまりにも小さく、成長が遅すぎるのは間違いですが、途中で会う方法はわかりません。両方向のスケーリングは、目に見えるほどではありますが、不愉快には大きくないか、または目に見えないほどの割合で同じです。これまで

実装コード:

// GameObject and GUI assigned in Editor 
public GameObject sphere, rotationManager; 

// For rotationManager scaling 
private float cameraToObject, 

void Update() 
{ 
    /* Scale rotationManager based on Cameras distance to object */ 
    cameraToObject = Vector3.Distance(
     sphere.transform.position, 
     Camera.main.transform.position); 

    Debug.Log("distance: " + cameraToObject); 

    // If camera isn't too close to our object 
    if (cameraToObject > 4f) 
    { 
     // adjust scale 
     rotationManager.transform.localScale = new Vector3(
      cameraToObject/5, 
      cameraToObject/5, 
      rotationManager.localScale.z); 

     // enable rotationManager 
     rotationManager.gameObject.SetActive(true); 

    } 
    // Camera is too close, turn off GUI 
    else 
     rotationManager.gameObject.SetActive(false); 
} 
+0

ゲームビュー*で目立たない理由は、このようなことをしているときに意図した目標*です。カメラに近い*ためにスケーリングが行われない理由* * X *(1/x) ' – Draco18s

+0

@ Draco18sもし私がX&Yをスケーリングしているのであれば、どうやってカメラに近づいていますか? Zスケーリングやポジショニングがその効果を誘発しないでしょうか?私はZもスケーリングしようとしましたが、希望の動作を得ることができませんでした – jtth

+0

カメラが動いています。それはあなたの頭に付けられています。 :| – Draco18s

答えて

1

ないあなたが必要な効果を与える必要があり、一定で距離を割るように、間違ってやっていることは本当に確認してください。とにかく、このコードを試してみてください。

using UnityEngine; 

public class AutoSize : MonoBehaviour 
{ 
    public float FixedSize = .005f; 
    public Camera Camera; 

    void Update() 
    { 
     var distance = (Camera.transform.position - transform.position).magnitude; 
     var size = distance * FixedSize * Camera.fieldOfView; 
     transform.localScale = Vector3.one * size; 
     transform.forward = transform.position - Camera.transform.position; 
    } 
} 

それが正常に動作するようです - preview

はまた、多分一定のメニューサイズを作成するために、より効果的であろうと、ちょうどスクリーンスペースにワールド空間を変換して、それを配置します。

+0

@jtth [プロジェクト](https://drive.google.com/uc?export=download&confirm=no_antivirus&id=19BP7YlOPQlEBaz337a8XQBWgfXSO-VsI) –

+0

'を確認してください。transform.position = (Camera.main.transform.position - sphere。 transform.position)/ 2f; ' – jtth

+1

@jtthあなたの場合は、カメラから球に向かう方向の半分があります。あなたは、減算ではなく、サマリーポジションを取るべきです。 center =(pos0 + pos1)/ 2。 –

関連する問題