0
私は自分のゲームのためにRTS-esqueカメラコントロールシステムを作成しようとしています。壁に当たったことがあります。 Unity 5.4 - FOV操作なしでRTSカメラをズームする
- マウスクリック+ドラッグ=世界中でカメラを動かし(作品)(作品:
何が起こるしたいことは以下のとおりです。別のスクリプトでMoveToward/Transform.Forward..etcを使用して/アウト)
- マウスのスクロールホイール=ズーム(みかん作品)
私は視野ズーム作業を持っているが、それはexperiencのタイプのための理想的ではありません私は創造したい。代わりに、私はそれが指示されている方向にカメラを物理的に移動しようとしています。
この現在のスクリプトは、をにすることができますが、ズームするためにスクロールした後に+ドラッグして新しい場所に移動すると、カメラは元の位置にリセットされます。
は、ここで更新()で何が起こるかです:
void Update()
{
currentPosition = transform.position;
scrollAxis = Input.GetAxis ("Mouse ScrollWheel");
if (Input.GetMouseButtonDown (0))
{
mouseOrigin = Input.mousePosition;
isPanning = true;
}
// cancel on button release
if (!Input.GetMouseButton (0))
{
isPanning = false;
}
//move camera on X & Y
else if (isPanning)
{
Vector3 pos = Camera.main.ScreenToViewportPoint (Input.mousePosition - mouseOrigin);
Vector3 move = new Vector3 (pos.x * -panSpeed, pos.y * -panSpeed, 0);
Camera.main.transform.Translate (move, Space.Self);
transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, 0);
transform.localPosition = new Vector3(transform.position.x, transform.position.y - (transform.position.y - (initialPosition.y)), transform.position.z);
}
//rotate camera with mousewheel click
if (Input.GetMouseButton(2)) {
yRotation -= Input.GetAxis("Mouse Y") * rotationSpeed * Time.deltaTime;
yRotation = Mathf.Clamp(yRotation, -80, 80);
xRotation += Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
xRotation = xRotation % 360;
transform.localEulerAngles = new Vector3(yRotation + initialRotation.x, xRotation + initialRotation.y, 0);
}
//zoom with scroll
if (Input.GetAxis("Mouse ScrollWheel") > 0 && !isPanning) {
transform.Translate(Vector3.forward * Time.deltaTime * 10000f * scrollAxis, Space.Self);
transform.localPosition = new Vector3(transform.position.x, transform.position.y, transform.position.z);
}
}
すべてのヘルプははるかに高く評価され、感謝!