为什么导出到 Unity WebGL 会改变游戏中对象的速度?
Why does exporting to Unity WebGL change the speed of objects in my game?
目标
所以我制作了一个 space-invaders 类型的游戏来练习团结,我想像过去一样将它上传到 Itch.io。
This是游戏的片段。
我在构建设置等中将平台切换到 WebGL,在 Unity 中一切正常。
问题
但是,当我构建它并将 zip 文件上传到 Itch.io、the aliens are now a lot faster than usual 时。
(请注意,可能还有其他内容发生了变化,我只是无法触及它们,因为它非常困难)。
代码
外星人运动:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AleenController : MonoBehaviour
{
Rigidbody2D rigidbody;
public float speed = 10f;
ScoreController scoreController;
AudioSource aleenDie;
void Start()
{
scoreController = GameObject.Find("Canvas/Score").GetComponent<ScoreController>();
rigidbody = GetComponent<Rigidbody2D>();
aleenDie = GameObject.Find("Main Camera/AleenDie").GetComponent<AudioSource>();
}
void Update()
{
rigidbody.MovePosition(transform.position + new Vector3 (0, -1, 0) * speed * Time.deltaTime);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag == "laser")
{
aleenDie.Play();
scoreController.score += 1;
Destroy(gameObject);
}
}
}
注意
我真的很难找出这里出了什么问题,因为一切都很好。如果您确实需要更多详细信息,请发表评论。
如果你使用物理学,你应该
- 根本没有通过
Transform
设置或获取值
- 在
FixedUpdate
做事
一般来说,虽然在你的情况下而不是使用
void Update()
{
rigidbody.MovePosition(transform.position + new Vector3 (0, -1, 0) * speed * Time.deltaTime);
}
只需设置一次速度,例如
void Start ()
{
...
rigidbody.velocity = Vector3.down * speed;
}
其余部分似乎取决于您的屏幕尺寸。看起来您正在以像素 space 为单位移动元素 -> 显示越小,顶部和底部之间的像素距离越小 -> 元素似乎移动得越快。
目标
所以我制作了一个 space-invaders 类型的游戏来练习团结,我想像过去一样将它上传到 Itch.io。
This是游戏的片段。
我在构建设置等中将平台切换到 WebGL,在 Unity 中一切正常。
问题
但是,当我构建它并将 zip 文件上传到 Itch.io、the aliens are now a lot faster than usual 时。
(请注意,可能还有其他内容发生了变化,我只是无法触及它们,因为它非常困难)。
代码
外星人运动:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AleenController : MonoBehaviour
{
Rigidbody2D rigidbody;
public float speed = 10f;
ScoreController scoreController;
AudioSource aleenDie;
void Start()
{
scoreController = GameObject.Find("Canvas/Score").GetComponent<ScoreController>();
rigidbody = GetComponent<Rigidbody2D>();
aleenDie = GameObject.Find("Main Camera/AleenDie").GetComponent<AudioSource>();
}
void Update()
{
rigidbody.MovePosition(transform.position + new Vector3 (0, -1, 0) * speed * Time.deltaTime);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag == "laser")
{
aleenDie.Play();
scoreController.score += 1;
Destroy(gameObject);
}
}
}
注意
我真的很难找出这里出了什么问题,因为一切都很好。如果您确实需要更多详细信息,请发表评论。
如果你使用物理学,你应该
- 根本没有通过
Transform
设置或获取值 - 在
FixedUpdate
做事
一般来说,虽然在你的情况下而不是使用
void Update()
{
rigidbody.MovePosition(transform.position + new Vector3 (0, -1, 0) * speed * Time.deltaTime);
}
只需设置一次速度,例如
void Start ()
{
...
rigidbody.velocity = Vector3.down * speed;
}
其余部分似乎取决于您的屏幕尺寸。看起来您正在以像素 space 为单位移动元素 -> 显示越小,顶部和底部之间的像素距离越小 -> 元素似乎移动得越快。