嗨我的角色是堆叠在同一个位置,即使我向前和向后移动我的角色这里是我的代码到目前为止,希望你能帮我下面的代码来设置角色位置来自Load区域x,y,z位置来自保存字符的位置
using UnityEngine;
using System.Collections;
public class MainCharacterMove : MonoBehaviour {
public Animator anim;
public GameObject main;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
anim.SetFloat ("Directions",0);
Vector3 tempx = main.transform.position;
tempx.x = PlayerPrefs.GetFloat ("x");
main.transform.position = tempx;
Vector3 tempy = main.transform.position;
tempx.x = PlayerPrefs.GetFloat ("y");
main.transform.position = tempx;
Vector3 tempz = main.transform.position;
tempx.x = PlayerPrefs.GetFloat ("z");
main.transform.position = tempx;
if(Input.GetKey(KeyCode.W))
{
anim.SetFloat("Directions",1);
transform.Translate(Vector3.forward*2*Time.deltaTime);
}
if(Input.GetKey(KeyCode.D))
{
anim.SetFloat("Directions",2);
transform.Translate(Vector3.right*2*Time.deltaTime);
}
if(Input.GetKey(KeyCode.A))
{
anim.SetFloat("Directions",3);
transform.Translate(Vector3.left*2*Time.deltaTime);
}
if(Input.GetKey(KeyCode.S))
{
anim.SetFloat("Directions",4);
//transform.Translate(Vector3.left*2*Time.deltaTime);
}
}
}
答案 0 :(得分:1)
问题出现在每个Update()
循环中,您正在将main.transform.position
重置为部分设置的PlayerPrefs
- 意味着即使您更改了特定值以响应一个按键,到下一帧它会跳回到它的初始值。我建议将此代码移至Start()
,因为在这种情况下,这是初始化位置的正确位置。
从内存中加载玩家位置的逻辑似乎也有点错误 - 虽然您声明并初始化Vector3 tempy
和Vector3 tempz
,但您实际上从未使用它们。而是使用x,y和z值重复覆盖x值。 (所以我希望每个帧只重置位置的x值。)
所以,将位置加载代码从Update()
循环中移出Start()
,然后修复逻辑:
// Use this for initialization
void Start ()
{
Vector3 tempPosition = new Vector3();
tempPosition.x = PlayerPrefs.GetFloat ("x");
tempPosition.y = PlayerPrefs.GetFloat ("y");
tempPosition.z = PlayerPrefs.GetFloat ("z");
main.transform.position = tempPosition;
}
希望这有帮助!如果您有任何问题,请告诉我。
答案 1 :(得分:0)
这里有太多错误,我不知道从哪里开始。
首先Vector3 Tempx
Vector3 Tempy
Vector3 Tempz
?您只需要一个Vector3 temp
,其中包含所有x
y
和z
。
Vector3 tempx = main.transform.position;
tempx.x = PlayerPrefs.GetFloat ("x");
main.transform.position = tempx;
Vector3 tempy = main.transform.position; // Why new var? This is not needed.
tempx.x = PlayerPrefs.GetFloat ("y"); // Tempx.x again... did you mean Tempx.y?
main.transform.position = tempx;
Vector3 tempz = main.transform.position; // Why new var? This is not needed.
tempx.x = PlayerPrefs.GetFloat ("z"); // Tempx.x again... did you mean Tempx.z?
main.transform.position = tempx;
更不用说连续3次调用main.transform.position = tempx;
我认为这就是你的意思:
Vector3 temp = new Vector3(PlayerPrefs.GetFloat ("x"),
PlayerPrefs.GetFloat ("y"),
PlayerPrefs.GetFloat ("z"));
main.transform.position = temp;
// or
main.transform.position += temp;
// or
main.transform.position += temp * Time.deltaTime;