我有一个2D空间射击游戏(想象一下像鸡入侵者一样)已经在iOS和Android上发布。我现在正尝试将其移植到WebGL,为此,我尝试使用鼠标实现移动。以前在移动平台上使用Unity的内置字符控制器成功实现了移动,我希望继续在WebGL构建中使用它,以保持代码库小而且平台很少 - 尽可能具体实施。
因此,我应该采用什么方法让船只跟随鼠标光标?
PS: 在移动设备上,我使用了带有characterController.Move()的touch.deltaPosition让船跟随手指的移动。
编辑:当前方法
输入管理器
public Vector2 GetInput () {
switch(type) {
case PlatformType.Computer:
if (Input.GetButtonDown("Jump") || Input.GetAxis("Fire") != 0f) {
thisDelegate.InputDidReceiveFireCommand();
}
if (!Input.mousePresent) {
temp.x = Input.GetAxis("Horizontal");
temp.y = Input.GetAxis("Vertical");
} else {
if (Input.GetAxis("Mouse X") != 0f || Input.GetAxis("Mouse Y") != 0f) {
temp.x = Input.GetAxis("Mouse X");
temp.y = Input.GetAxis("Mouse Y");
} else {
temp.x = Input.GetAxis("Horizontal");
temp.y = Input.GetAxis("Vertical");
}
}
}
的PlayerController
void HandleInput()
{
mvm = InputController.GetInput();
if (GetComponent<InputManager>().type == InputManager.PlatformType.Mobile) {
mvm *= Time.deltaTime * initialVeloc / 10;
} else {
if (mvm != Vector3.zero) {
mvm -= transform.position;
}
}
}
void Update () {
characterController.Move((Vector2)mvm);
}
当前方法使字符抖动位于屏幕中心旁边。
答案 0 :(得分:0)
我修改了我的脚本,现在我取的是绝对鼠标位置而不是delta。以下是它现在的样子:
输入管理器:
if (Input.GetAxis("Mouse X") != 0f || Input.GetAxis("Mouse Y") != 0f) {
temp = Input.mousePosition;
temp.z = 12.5f;
// Vector3 initialMov = mvm;
temp = Camera.main.ScreenToWorldPoint(temp);
temp -= transform.position;
}
控制器
mvm = InputController.GetInput();
mvm *= Time.deltaTime * initialVeloc;
characterController.Move((Vector2)mvm);
就CPU使用率而言,此方法与预期相同,并且似乎比RayCasting方法更有效。