在过去的两个小时里,我一直在搜寻互联网,以期找到可行的解决方案。我已经尝试了所有可能想到的一切:不同类型的函数,不同类型的更新,不同的平滑时间。以下是有关我的游戏当前播放方式的视频。我正在制作一个仅用于练习的小型平台游戏,并且我希望解决此摄像头问题! Click here for video
这是我当前的代码,但是同样,我也尝试了许多其他组合。感谢您的所有帮助。
using UnityEngine;
public class CameraFollow : MonoBehaviour {
public Transform target;
public Vector3 offset;
public float smoothTime = 0.3f;
private Vector3 velocity;
private void LateUpdate()
{
transform.position = Vector3.SmoothDamp(transform.position, target.position + offset, ref velocity, smoothTime);
}
}
编辑: 我尝试了很多其他建议,但仍然没有任何效果。如果有帮助,我正在运行Unity 2018.2.5f1 Personal 64位。我正在使用Razer Blade 15 2018。
答案 0 :(得分:0)
我尚未对此进行测试,但是如果您正确理解了您的问题,那么只要将函数名称从become:
更改为aComposite = aLeaf.becomeComposite();
aComposite.addChild(newElement);
//destroy aLeaf (bad time performance)
,它应该可以工作。
答案 1 :(得分:0)
您可以尝试下面的代码。这段代码对我的3D游戏有效。
public float translationFactor = 20;
void LateUpdate(){
if(transform.position != target.position) {
transform.position += (target.position - transform.position) / translationFactor;
}
}
这是直接引用为什么从Unity3D的LateUpdate() documentation开始使用相机时应使用LateUpdate()
。
在调用所有Update函数之后,将调用LateUpdate。这个 对命令脚本执行很有用。例如跟随相机 应该始终在LateUpdate中实现,因为它会跟踪对象 可能已经在Update中移动了。
我还注意到您在 2D 游戏中使用Vector3
而不是Vector2
。我对2D的了解不如对3D的了解,所以我不知道用Vector3
取代Vector2
会不会有什么区别。
答案 2 :(得分:0)
我正在考虑您的骨架脚本问题。您的相机跟随骨骼,您正在考虑相机上的问题
尝试使用AddForce
而不是transform.position
移动骨骼
例子
void Update () {
if (Input.GetMouseButtonDown (0)) {
GetComponent<AudioSource> ().PlayOneShot (voices[2]);
birdSpeed.velocity = Vector2.zero;
birdSpeed.AddForce (new Vector2 (0, birdUp));
}
public void Buttons(int i){
if (i == 0) {
birds = 0.2f;
GetComponent<Rigidbody2D> ().gravityScale = 4;
birdUp = 400;
StartPanel.SetActive (false);
GamePanel.SetActive (true);
GameOverPanel.SetActive (false);
}
在此代码中,当我单击鼠标悬停时,您可以将代码修改为此
答案 3 :(得分:0)
我知道我迟到了,但是对于问这个问题的所有人,我查看了您的问题并在我正在开发的游戏中对其进行了测试,我通过将 void LateUpdate() 更改为 void FixedUpdate() 来解决您的问题,这里是代码!希望我有所帮助..
using UnityEngine;
public class CameraFollow : MonoBehaviour {
public Transform target;
public Vector3 offset;
public float smoothTime = 0.3f;
private Vector3 velocity;
private void LateUpdate()
{
transform.position = Vector3.SmoothDamp(transform.position, target.position + offset, ref velocity, smoothTime);
}
}