2015-12-05 8 views
0

Я хотел бы, чтобы в каждом кадре двигать, масштабировать и вращать данный цилиндр так, чтобы он вел себя как «веревка» между двумя точками.Unity3D: сделать цилиндр растягиваться из одной точки в другую

У меня есть этот код в данный момент, но он не работает на всех, как предназначено:

hook.transform.position = (rightHandPosition + hookDestination)/2; 

hook.transform.localScale = new Vector3(0.5F, Vector3.Magnitude(hookDestination - rightHandPosition), 0.5F); 

hook.transform.rotation = Quaternion.Euler(hookDestination - rightHandPosition); 

Как вы можете догадаться, что две точки rightHandPosition и hookDestination. На данный момент цилиндр появляется в «случайных» местах, с «случайными» вращениями и огромными масштабами.

Как это исправить?

"Полный" сценарий:

public class FirstPersonController : MonoBehaviour { 

    public GameObject hook; 
    bool isHooked = false; 
    Vector3 hookDestination; 
    Vector3 rightHandPosition; 

    void Start() { 
     hook.renderer.enabled = false; 
     rightHandPosition = hook.transform.position; 
    } 

    // Update is called once per frame 
    void Update() { 
     if (isHooked) { 
      hook.transform.position = (rightHandPosition + hookDestination)/2; 
      hook.transform.localScale = new Vector3(0.5F, Vector3.Magnitude(hookDestination - rightHandPosition), 0.5F); 
      hook.transform.rotation = Quaternion.Euler(hookDestination - rightHandPosition); 
     } 

     if (isHooked && !Input.GetMouseButton(1)) { 
      isHooked = false; 
      hook.renderer.enabled = false; 
     } 

     if (Input.GetMouseButtonDown (1) && !isHooked) { 
      Ray ray = GameObject.FindGameObjectWithTag ("MainCamera").camera.ViewportPointToRay (new Vector3 (0.5F, 0.5F, 0)); 
      RaycastHit hit; 
      if (Physics.Raycast (ray, out hit) && hit.distance < 5000000 && hit.collider.tag != "Player") { 
       isHooked = true; 
       hookDestination = hit.point; 
       hook.renderer.enabled = true; 
      } 
     } 
    } 
} 

Скриншот сцены: комментарий

hook behavior (bug)

+0

полный сценарий и образ Gameview будет полезно –

+0

я не проверял, но попробовать: 'Quaternion.SetLookRotation (hookDestination - rightHandPosition)' и, возможно, 'transform.localRotation' вместо' rotation'. И я второй комментарий @BurakKarasoy. –

+0

@ TheOddler: не работает (похоже, никакого поворота не применяется). Я обновил свой оригинальный пост с большей частью своего сценария и скриншотом :) – Mat

ответ

0

fafase был правильный ответ: используйте LineRenderer.

hookRender.SetPosition(0, rightHandPosition); 
hookRender.SetPosition(1, hookDestination); 

 Смежные вопросы

  • Нет связанных вопросов^_^