【问题标题】:How can I lock the Camera? Unity2D如何锁定相机? Unity2D
【发布时间】:2017-08-21 09:19:07
【问题描述】:

我正在努力做到这一点,所以当我到达地图的右侧或左侧边缘时,相机会锁定,但仍然允许我的玩家向前移动到边缘,直到我转身。 我知道我需要使用 mathf.clamp 但我不确定如何将它应用到我当前的代码中。谢谢。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class walkScript : MonoBehaviour {

    public float speed = 1.5f;
    private Vector3 target;
    private Vector3 lastTarget;
    private Animator animator;

    private Vector3 camTarget;
    public GameObject cameraMain;

    void Start () {
        target = transform.position;
        camTarget = cameraMain.transform.position;
        animator = GetComponent<Animator> ();
    }

    void Update () {
        if (Input.GetMouseButtonDown(0)) {
            target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            target.z = transform.position.z;
            target.y = transform.position.y;

            camTarget = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            camTarget.z = cameraMain.transform.position.z;
            camTarget.y = cameraMain.transform.position.y;
            flipCharacter ();
        }
        transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
        cameraMain.transform.position = Vector3.MoveTowards(cameraMain.transform.position, camTarget, speed * Time.deltaTime);
        lastTarget.x = target.x;
    }    
    private void flipCharacter()
    {
        if (lastTarget.x > target.x) {
            animator.transform.Rotate(0, 180, 0);
        } else if (lastTarget.x < target.x) {
            animator.transform.Rotate(0, 180, 0);
        }
    }
}

【问题讨论】:

    标签: c# android unity3d


    【解决方案1】:

    你好! 这段代码应该可以工作。

    public Vector2 mapLimit;
    void Update() {
        if (Input.GetMouseButtonDown(0)) {
            target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            target.z = transform.position.z;
            target.y = transform.position.y;
    
            camTarget = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            camTarget.z = cameraMain.transform.position.z;
            camTarget.y = cameraMain.transform.position.y;
    
            camTarget.x = Mathf.Clamp(camTarget.x, -mapLimit.x, mapLimit.x);
            camTarget.z = Mathf.Clamp(camTarget.z, -mapLimit.y, mapLimit.y);
    
            flipCharacter();
        }
        transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
        cameraMain.transform.position = Vector3.Lerp(cameraMain.trasform.position, camTarget, Time.deltaTime * speed); 
        lastTarget.x = target.x;
    }
    

    【讨论】:

    • 无论我点击哪里,它都会自动移动相机。它也不跟随字符。
    猜你喜欢
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多