攝像機(jī)跟隨、視野遠(yuǎn)近、視野環(huán)繞、小地圖

攝像機(jī)跟隨人物
  private Transform Player;
    //偏移值
    private Vector3 offsetPosition;
    void Start () {
        //根據(jù)Tag值取得游戲?qū)ο蟮膖ransform
        Player = GameObject.FindGameObjectWithTag("Player").transform;
       //攝像機(jī)朝向游戲?qū)ο?
        transform.LookAt(Player.transform);
      //偏移量
        offsetPosition = transform.position - Player.position;
    }
    
    
    void Update () {
        //攝像機(jī)跟隨
        transform.position = offsetPosition + Player.position;
  }
1點31分32秒.gif
攝像機(jī)視野拉近拉遠(yuǎn)
 //距離
    public float distance = 0;
    public float scrollSpeed = 10;
 /// <summary>
    /// 處理視野拉近拉遠(yuǎn)效果
    /// </summary>
    private void scroliView() {
        // Input.GetAxis("Mouse ScrollWheel")//滾輪向前滑動返回正值,向后滑動返回負(fù)值
        distance = offsetPosition.magnitude;//得到攝像機(jī)與Player的距離
        distance -= Input.GetAxis("Mouse ScrollWheel")*scrollSpeed;// 距離拉近放大,那distance就會減少,所以-=一個正值那滾輪向前就會放大
        distance = Mathf.Clamp(distance,2,18);//距離限制,距離在2到18之間
        offsetPosition = offsetPosition.normalized * distance;//offsetPosition.normalized返回的長度為1,相當(dāng)于吧偏移量的長度設(shè)為distance
    }
33分52秒.gif
控制視野環(huán)繞效果
 private bool isRotating = false;
    // 旋轉(zhuǎn)的速度
    public  float rotateSpeed = 2f;
     /// <summary>
    /// 處理視野的旋轉(zhuǎn)
    /// </summary>
    void RotateView() {
        //Input.GetAxis("Mouse X");//得到鼠標(biāo)在水平方向的滑動
        //Input.GetAxis("Mouse X");//得到鼠標(biāo)在垂直方向的滑動
        if (Input.GetMouseButtonDown(1))
        {
            isRotating = true;       
        }
        else if (Input.GetMouseButtonUp(1)) {
            isRotating = false;
        }
        if (isRotating) {
            transform.RotateAround(Player.position, Player.up, rotateSpeed * Input.GetAxis("Mouse X"));//圍繞游戲?qū)ο蟮腦軸進(jìn)行旋轉(zhuǎn)

            Vector3 originaPos = transform.position;
            Quaternion originalRotation = transform.rotation;

            transform.RotateAround(Player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));//圍繞攝像機(jī)的Y軸進(jìn)行旋轉(zhuǎn)
            float x = transform.eulerAngles.x;//eulerAngles為Rotationg
            //限制范圍,X旋轉(zhuǎn)到10到80之間
            if (x < 10||x>80) {
                transform.position = originaPos;
                transform.rotation = originalRotation;
            }
        }
        offsetPosition = transform.position - Player.position;
    }
21日12點27分50秒.gif
小地圖

小地圖如何制作呢,首先我們創(chuàng)建一個小地圖的攝像機(jī)讓人物對象成為其父對象、


Paste_Image.png

隨后我們創(chuàng)建一個Render Texture并命名為Minimap,再將Minimap拖入我們小地圖攝像機(jī)的Target Texture上這樣我們的Minimap就取得了攝像機(jī)上的圖像了.


Paste_Image.png

Paste_Image.png
然后我們再創(chuàng)建一個材質(zhì)球,并將Shader類型改為Custom/Mask,然后將Render Texture和一個遮罩貼圖放上。
Paste_Image.png

然后創(chuàng)建一個Image將Minimap材質(zhì)進(jìn)去就OK了。


Paste_Image.png
好吧,效果有點丑,但是我們加上框架就不錯了,下面我們?nèi)崿F(xiàn)小地圖放大縮小的功能。
Paste_Image.png
 private Camera minimapCamera;

    void Start() {
        minimapCamera = GameObject.FindGameObjectWithTag(Tags.minimap).GetComponent<Camera>();
    }

    public void OnZoomInClick() {
        //放大
        minimapCamera.orthographicSize--;
    }
    public void OnZoomOutClick() {
        //縮小
        minimapCamera.orthographicSize++;
    }
點27分11秒.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容