设定角色位置后改变位置

时间:2015-08-31 12:45:40

标签: unity3d unityscript

嗨我的角色是堆叠在同一个位置,即使我向前和向后移动我的角色这里是我的代码到目前为止,希望你能帮我下面的代码来设置角色位置来自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);
        }



    }
}

2 个答案:

答案 0 :(得分:1)

问题出现在每个Update()循环中,您正在将main.transform.position重置为部分设置的PlayerPrefs - 意味着即使您更改了特定值以响应一个按键,到下一帧它会跳回到它的初始值。我建议将此代码移至Start(),因为在这种情况下,这是初始化位置的正确位置。

从内存中加载玩家位置的逻辑似乎也有点错误 - 虽然您声明并初始化Vector3 tempyVector3 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 yz

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;