【Unity 实战记录】(一)摄像机区域内跟随物体

模仿Cinemachined 效果,用Cinemachine可轻松实现,贴代码

  1 using System.Collections;
  2 using System.Collections.Generic;
  3 using UnityEngine;
  4
  5 public class FiveCameraController : MonoBehaviour
  6 {
  7
  8
  9     public Transform targetPlayer;
 10
 11     private Vector3 centerPos = Vector3.zero;
 12     private float borderRadius = 27f;
 13     private float moveRadius = 0.4f;
 14
 15     private bool isInitPos = false;
 16     private Camera camera1;
 17     // Use this for initialization
 18     void Start()
 19     {
 20         //相机为正交模式
 21         camera1 = GetComponent<Camera>();
 22         camera1.orthographicSize = 8;
 23         borderRadius -= camera1.orthographicSize;
 24         moveRadius *= camera1.orthographicSize;
 25     }
 26
 27     // Update is called once per frame
 28     void Update()
 29     {
 30         if (targetPlayer == null)
 31         {
 32             return;
 33         }
 34         if (!isInitPos)
 35         {
 36
 37             transform.position = setPosInArea(targetPlayer.position);
 38             isInitPos = true;
 39         }
 40
 41         Vector3 offset = getMoveOffset(targetPlayer.position);
 42         if (Vector3.zero != offset)
 43         {
 44             transform.position += offset;
 45             transform.position = setPosInArea(transform.position);
 46
 47         }
 48
 49     }
 50     /// <summary>
 51     /// 区域限制
 52     /// </summary>
 53     /// <param name="pos"></param>
 54     /// <returns></returns>
 55     public Vector3 setPosInArea(Vector3 pos)
 56     {
 57
 58         if (pos.x > centerPos.x && pos.x > centerPos.x + borderRadius)
 59         {
 60             pos.x = centerPos.x + borderRadius;
 61         }
 62         if (pos.x < centerPos.x && pos.x < centerPos.x - borderRadius)
 63         {
 64             pos.x = centerPos.x - borderRadius;
 65         }
 66         if (pos.y > centerPos.y && pos.y > centerPos.y + borderRadius)
 67         {
 68             pos.y = centerPos.y + borderRadius;
 69         }
 70         if (pos.y < centerPos.y && pos.y < centerPos.y - borderRadius)
 71         {
 72             pos.y = centerPos.y - borderRadius;
 73         }
 74
 75         return pos;
 76     }
 77     /// <summary>
 78     /// 得到移动插值
 79     /// </summary>
 80     /// <param name="pos"></param>
 81     /// <returns></returns>
 82     public Vector3 getMoveOffset(Vector3 pos)
 83     {
 84         Vector3 cameraPos = transform.position;
 85         Vector3 offset = Vector3.zero;
 86         if (pos.x > cameraPos.x && pos.x > cameraPos.x + moveRadius)
 87         {
 88             offset.x = pos.x - (cameraPos.x + moveRadius);
 89         }
 90         if (pos.x < cameraPos.x && pos.x < cameraPos.x - moveRadius)
 91         {
 92             offset.x = pos.x - (cameraPos.x - moveRadius);
 93         }
 94         if (pos.y > cameraPos.y && pos.y > cameraPos.y + moveRadius)
 95         {
 96             offset.y = pos.y - (cameraPos.y + moveRadius);
 97         }
 98         if (pos.y < cameraPos.y && pos.y < cameraPos.y - moveRadius)
 99         {
100             offset.y = pos.y - (cameraPos.y - moveRadius);
101         }
102         return offset;
103
104     }
105     public void SetTargetPlayer(Transform player)
106     {
107         this.targetPlayer = player;
108
109
110     }
111 }

效果:

原文地址:https://www.cnblogs.com/jqiao/p/10075921.html

时间: 2024-10-19 18:44:22

【Unity 实战记录】(一)摄像机区域内跟随物体的相关文章

【Unity】4.7 摄像机

分类:Unity.C#.VS2015 创建日期:2016-04-11 一.简介 摄像机(Camera)是为玩家捕捉并展示世界的一种设备.场景中至少需要有一台摄像机,也可以在一个场景中使用多台摄像机.这些摄像机可以设置为在屏幕的任何位置或只在某些部分按任何顺序进行渲染. 要将游戏呈现给玩家,相机是必不可少的.可以对相机进行自定义.脚本化或父子化,从而实现可以想到的任何效果.在拼图游戏中,可以让相机 (Camera) 处于静止状态,以看到拼图的全视图.在第一人称射击游戏中,可以将相机 (Camera

unity 相机跟随物体(角色)

unity 相机平滑跟随游戏角色 把这个脚本赋给你的摄像机,再把游戏角色赋给character变量,之后就能实现摄像机平滑的跟随player在地球的任一角落了. using UnityEngine; using System.Collections; public class SmoothFollowerObj { private Vector3 targetPosition; private Vector3 position; private Vector3 velocity; private

unity 嵌入 百度分享 与 游戏内购物 iap

原地址:http://blog.csdn.net/u012085988/article/details/18268869 最近老板让在unity项目里实现分享与内购功能,还要ios和android两个平台都做.这下彻底瞎了,我连unity都不会啊...... 为了提高工作效率,以免日后忘了如何操作,就把工作内容记录下来,供以后参考. 1.ios平台集成百度Frontia sdk,和 iap功能. http://download.csdn.net/detail/u012085988/6848511

验证坐标在某片坐标区域内 php 代码

之前碰到的这样一个需求,要将公司的服务在地图中显示出来,并将用户每天的访问坐标进行统计看有多少用户是在所能达到的服务范围半径内. 以下是PHP代码的实现 (仅验证坐标在某片坐标区域内) <?php /** * 验证坐标点是否在某区域内 * @author xiaoliang <[email protected]> * Class validationMap */ class validationMap{ private static $coordArray; private static

区域内随机布点的方法

本文研究如何在区域内随机均匀布点, 来源于 <算法可视化 Visualizing Algorithms>, 这在CAE, 图形学中都有重要意义. http://www.bilibili.com/video/av2182749/ 比如在 3*1 的区域内随机布点 1000 个, 如果每个点都是坐标都是随机给的, 结果可能并不均匀. 如 randomPoints.m 所演示的. 1 function randomPoints() 2 xmax = 3; 3 ymax = 1; 4 N = 500;

过滤所有用户的行车轨迹查找在某一区域内的用户

// 判断经纬度是否在此区域内 public void selectDevice2() throws IOException{ String birthday = device.getBirthday(); String Position1 = device.getJingweidu1(); String Position2 = device.getJingweidu2(); // 创建表 String IMSIPositionTableName = "IMSIP_"+birthday

云端大数据实战记录-大数据推荐

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 这是博主第一次大数据实战的经历,之前都是自己写一些算法然后测试很小的数量级.这次是真正接触到TB集的数据,而且完全是在云端处理.下面就把这次的经历简单分享一下. 首先简单介绍一下这次比赛的环境吧: 1.云:采用的是阿里云 2.数据:从四月十五号到八月十五号期间,用户两千多万的购买行为(包括时间,购买.收藏.购物车的次数) 3.工具:阿里提供的xlab(里面有很多算法,随机森林.逻辑回归.knn等).

ios的hitTest方法以及不规则区域内触摸事件处理方法

ios的hitTest方法以及不规则区域内触摸事件处理方法 概述 在正常的使用场景中,我们处理了比较多的矩形区域内触摸事件,比如UIButton.UIControl.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不得不面对这样一种比较严苛的需求,比如要求程序只对某个圆形.五角形等非常规区域的点击事件进行处理,这就需要花点功夫了.本文以圆形为例子来介绍此类场景的处理方法. 先看下面一张图(附图1),我们的目标是实现如下自定义tabbar.中间带突起圆形

百度地图多边形画区域、获取节点经纬度坐标、判断某一点是否在此区域内

创建可绘画map: 1 <!DOCTYPE html> 2 3 <html> 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no"> 7 <meta name=&