2016-05-12 9 views
1

私は、ゲームオブジェクトがプレーヤーのカメラから投げられたraycast.pointに移動することを意図したスクリプトを書いています。ほとんどの場合、これはうまく動作しますが、オブジェクトがカメラ(レイキャストソース)に向かって急速に移動すると、(カメラがオブジェクトから45度上がったときに)時間があります。レイキャストの問題を伴う移動オブジェクト

私はこれを解決しようとする試みをいくつか試みましたが、この問題の根本を掘り起こすことはできません。これは、移動中のオブジェクトに取り付けられているコライダーを無効にすることによって発生しないように管理されています。しかし、私はこのアプローチが適切でないように、さまざまな理由でコライダーが必要です。

誰かが私がどこに間違っているかについての指針を提供できれば、私は信じられないほど感謝しています。

NB:UJS

に事前に多くの感謝をコーディング、ライアン

function FixedUpdate() { 
 

 
    if (modObj != null && !guiMode) { 
 

 
    //Panel Control 
 
    if (!selectObjPanel.activeSelf && !modifySelectObjPanel.activeSelf) //if the selectpanel not open and modSelect not already activated 
 
    { 
 
     activateModSelectObjPanel(true); //activate it 
 
    } else if (selectObjPanel.activeSelf) { 
 
     activateModSelectObjPanel(false); 
 
    } 
 

 

 
    //Move 
 
    if (Input.GetKey(KeyCode.E)) { 
 
     if (Input.GetKeyDown(KeyCode.E)) { 
 
     //    modObj.GetComponent(BoxCollider).enabled = false; 
 
     modObj.GetComponent(Rigidbody).isKinematic = true; 
 
     modObj.GetComponent(Rigidbody).useGravity = false; 
 
     //     
 
     initPos = modObj.transform.position; 
 
     var initRotation = modObj.transform.rotation; 
 
     } 
 

 
     moveObject(modObj, initPos, initRotation); 
 
    } else { 
 
     //   modObj.GetComponent(BoxCollider).enabled = true; 
 
     modObj.GetComponent(Rigidbody).isKinematic = false; 
 
     modObj.GetComponent(Rigidbody).useGravity = true; 
 
    } 
 
    } 
 
} 
 

 
function moveObject(modObj: GameObject, initPos: Vector3, initRotation: Quaternion) { 
 
    //Debug.Log("Moving Object"); 
 

 
    var hit: RaycastHit; 
 
    var foundHit: boolean = false; 
 

 
    foundHit = Physics.Raycast(transform.position, transform.forward, hit); 
 
    //Debug.DrawRay(transform.position, transform.forward, Color.blue); 
 

 
    if (foundHit && hit.transform.tag != "Player") { 
 
    //Debug.Log("Move to Hit Point: " + hit.point); 
 
    modifyObjGUIscript.activateMoveDisplay(initPos, hit.point); 
 

 
    var meshHalfHeight = modObj.GetComponent. <MeshRenderer>().bounds.size.y/2; //helps account for large and small objects 
 
    //  Debug.Log("CurObj Mesh Min: " + meshHalfHeight); 
 

 
    //  modObj.transform.position = hit.point; //***method 01*** 
 
    //  modObj.transform.position = Vector3.Lerp(initPos, hit.point, speed); //***method 02*** 
 
    //  modObj.transform.position = Vector3.SmoothDamp(initPos, hit.point, velocity, smoothTime); //***method 02*** 
 

 
    var rb = modObj.GetComponent. <Rigidbody>(); 
 
    rb.MovePosition(hit.point); //***method 03*** 
 

 
    modObj.transform.position.y = modObj.transform.position.y + meshHalfHeight + hoverHeight; 
 

 
    modObj.transform.rotation = initRotation; 
 
    } 
 
}

+0

カメラは何かに接続されていますか?レイキャストがカメラに近いものに当たらないことを確認してください。 –

+0

はいカメラがプレーヤーコントローラに接続されていますが、これは問題ではありません –

答えて

1

は問題が移動されているオブジェクトを打つレイキャストによって引き起こされていたが判明しました。地形からのヒットのみを移動するポイントとして使用することでこれを解決しました。

if(foundHit && hit.transform.tag == "Terrain") 
関連する問題