unity鼠标控制镜头旋转_Unity3d 鼠标和键盘控制摄像机的视角缩放与扩大、视角平移、视角旋转...

这是一个Unity 3D游戏控制器脚本,通过键盘和鼠标控制对象的移动、旋转和缩放。使用了Input.GetAxis获取鼠标和键盘输入,根据输入调整对象的位置、旋转角度和缩放大小。同时,脚本中包含了对移动速度和范围的限制,以及键盘加速功能。
摘要由CSDN通过智能技术生成

using System.Collections;

using System.Collections.Generic;

using

UnityEngine;

public class Mouse_Controller : MonoBehaviour

{

public float

xRoatationSpeed = 250.0f;

public float yRoatationSpeed = 120.0f;

public float moveSpeed = 800f;

public float yRoatationMinLimit = -90f;

public float

yRoatationMaxLimit = 90f;

public float ScaleSpeed = 300;

public float KeyboardMoveSpeed = 10;

public float

DefaultKeyboardMoveSpeed = 10;

public float KeyboardMoveAcceleratedSpeed

= 3;

public float MaxMoveDistance = 5000f;

private KeyCode _forwardKey = KeyCode.W;

public KeyCode ForwardKey

{

get { return _forwardKey;

}

set { _forwardKey = value; }

}

private KeyCode _backKey = KeyCode.S;

public KeyCode BackKey

{

get { return _backKey;

}

set { _backKey = value; }

}

private KeyCode _leftKey = KeyCode.A;

public KeyCode LeftKey

{

get { return _leftKey;

}

set { _leftKey = value; }

}

private KeyCode _rightKey = KeyCode.D;

public KeyCode RightKey

{

get { return _rightKey;

}

set { _rightKey = value; }

}

private void

Update()

{

Vector3 intos =

gameObject.transform.position;

if (intos.y

{

moveSpeed = 80f;

ScaleSpeed = 30f;

}

else if (intos.y >-5600)

{

moveSpeed =

800f;

ScaleSpeed = 3000f;

}

}

void Awake()

{

}

void Start()

{

}

void LateUpdate()

{

Vector3 oldPos =

this.transform.position;

//鼠标左键

if (Input.GetMouseButton(0))

{

var position = transform.position;

position +=

transform.TransformDirection(Vector3.left).normalized * (Input.GetAxis("Mouse

X") * moveSpeed * 0.02f);

position +=

transform.TransformDirection(Vector3.down).normalized * (Input.GetAxis("Mouse

Y") * moveSpeed * 0.02f);

movePosition(position);

}

鼠标右键

//if (Input.GetMouseButton(1))

//{

//    float x = 0;

//    float y = 0;

//    x += Input.GetAxis("Mouse X") * xRoatationSpeed *

0.02f;

//    y -= Input.GetAxis("Mouse Y") * yRoatationSpeed *

0.02f;

//    y = ClampAngle(y, yRoatationMinLimit, yRoatationMaxLimit);

//    transform.Rotate(y, x, 0);

//    var angles = transform.eulerAngles;

//    angles.z =

0;

//    transform.eulerAngles = angles;

//}

//鼠标滑轮

if (Input.GetAxis("Mouse ScrollWheel") !=

0)

{

var moveDistance = Input.GetAxis("Mouse

ScrollWheel") * ScaleSpeed;

var position = transform.position;

position +=

transform.TransformDirection(Vector3.forward).normalized * moveDistance;

movePosition(position);

}

if (Input.GetKey(ForwardKey))

{

var

position = transform.position;

position +=

transform.TransformDirection(Vector3.forward).normalized * KeyboardMoveSpeed *

0.02f;

movePosition(position);

}

if (Input.GetKey(BackKey))

{

var position =

transform.position;

position +=

transform.TransformDirection(Vector3.back).normalized * KeyboardMoveSpeed *

0.02f;

movePosition(position);

}

if (Input.GetKey(LeftKey))

{

var position =

transform.position;

position +=

transform.TransformDirection(Vector3.left).normalized * KeyboardMoveSpeed *

0.02f;

movePosition(position);

}

if (Input.GetKey(RightKey))

{

var position

= transform.position;

position +=

transform.TransformDirection(Vector3.right).normalized * KeyboardMoveSpeed *

0.02f;

movePosition(position);

}

if (Input.GetKey(ForwardKey) || Input.GetKey(BackKey) ||

Input.GetKey(LeftKey) || Input.GetKey(RightKey))

{

KeyboardMoveSpeed += KeyboardMoveAcceleratedSpeed * 0.02f;

}

else

{

KeyboardMoveSpeed =

DefaultKeyboardMoveSpeed;

}

if (Vector3.Distance(transform.position, Vector3.zero) >

MaxMoveDistance)

{

movePosition(oldPos +

oldPos.normalized * -100);

}

}

void movePosition(Vector3 moveToPosition)

{

if

(transform.GetComponent())

{

if

(!Physics.Raycast(transform.position, moveToPosition - transform.position,

(moveToPosition - transform.position).magnitude))

{

transform.GetComponent().MovePosition(moveToPosition);

}

}

}

float ClampAngle(float angle, float min, float max)

{

if (angle < -360)

angle += 360;

if (angle >

360)

angle -= 360;

return Mathf.Clamp(angle, min,

max);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值