Я хотел бы, чтобы в каждом кадре двигать, масштабировать и вращать данный цилиндр так, чтобы он вел себя как «веревка» между двумя точками.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;
}
}
}
}
Скриншот сцены: комментарий
полный сценарий и образ Gameview будет полезно –
я не проверял, но попробовать: 'Quaternion.SetLookRotation (hookDestination - rightHandPosition)' и, возможно, 'transform.localRotation' вместо' rotation'. И я второй комментарий @BurakKarasoy. –
@ TheOddler: не работает (похоже, никакого поворота не применяется). Я обновил свой оригинальный пост с большей частью своего сценария и скриншотом :) – Mat