入门unity开发笔记------第二期更新
如果前面没有找到下载链接的这里给出一个链接:
https://assetstore.unity.com/packages/3d/environments/meshtint-free-tile-map-mega-toon-series-153619
把素材导入unity里面后得先把地图给弄出来,我们可以去包里面拿出我们需要的地图来,在地图资源的文件包里,打开demo演示文件,在自己的文件夹下方新建一个文件夹专门来存放以后要用到的预制体
先新建一个场景,把地图放进去。
先进行地图的修改:
第一要添加标签也就是tag,地图分为4个部分,草地,水,地刺,怪物出生点。
留意右上角的tag是改成了Ground了
好了接下来就是弄玩家对象了,先找到下载的剑士包导入,弄到剑士这个角色预制体
可以看看属性面板,加入刚体和碰撞体,留意这里我用的是盒子碰撞体,你也可以用角色控制器差不多的原理。tag也得记得改一下。
好了现在该弄摄像头了,游戏运行是只看摄像头的,也就是说摄像头看的东西也就是画面出现的东西,这个游戏我们用第三人称视角所以进行代码编写。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class crame_move : MonoBehaviour
{
// Start is called before the first frame update
//定义镜头与角色的初始距离,开始的时候定义成私有变量,我改成公有变量,为了方便在代码面板上修改
public float m_distanceAway = 4.5f;
//镜头初始高度
public float m_distanceUp = 1.5f;
//镜头改变时的平滑度
private float m_smooth = 5f;
//玩家对象
public Transform m_player;
//自己
private Transform m_transsform;
private float maxSuo = 100.0f;//镜头缩放范围
private float minSuo = 2.0f;
private float maxSD = 20.0f;
private float minSD = 1f;
void Start()
{
m_transsform = this.transform;//定义自己
}
void Update()
{
Zoom();//缩放
CameraSet();//相机设置
//定义一条射线
RaycastHit hit;
if (Physics.Linecast(m_player.position + Vector3.up, m_transsform.position, out hit))
{
string name = hit.collider.gameObject.tag;
if (name != "MainCamera")
{
//如果射线碰撞的不是相机,那么就取得射线碰撞点到玩家的距离
float currentDistance = Vector3.Distance(hit.point, m_player.position);
//如果射线碰撞点小于玩家与相机本来的距离,就说明角色身后是有东西,为了避免穿墙,就把相机拉近
if (currentDistance < m_distanceAway)
{
m_transsform.position = hit.point;
}
}
}
}
/// <summary>
/// 设置相机
/// </summary>
void CameraSet()
{
//取得相机旋转的角度
float m_wangtedRotationAngel = m_player.transform.eulerAngles.y;
//获取相机移动的高度
float m_wangtedHeight = m_player.transform.position.y + m_distanceUp;
//获得相机当前角度
float m_currentRotationAngle = m_transsform.eulerAngles.y;
//获取相机当前的高度
float m_currentHeight = m_transsform.position.y;
//在一定时间内将当前角度更改为角色面对的角度
m_currentRotationAngle = Mathf.LerpAngle(m_currentRotationAngle, m_wangtedRotationAngel, m_smooth * Time.deltaTime);
//更改当前高度
m_currentHeight = Mathf.Lerp(m_currentHeight, m_wangtedHeight, m_smooth * Time.deltaTime);
//返回一个Y轴旋转玩家当前角度那么多的度数
Quaternion m_currentRotation = Quaternion.Euler(0, m_currentRotationAngle, 0);
//玩家的位置
Vector3 m_position = m_player.transform.position;
//相机位置差不多计算出来了
m_position -= m_currentRotation * Vector3.forward * m_distanceAway;
//将相机应当到达的高度加进应当到达的坐标,这就是相机的新位置
m_position = new Vector3(m_position.x, m_currentHeight, m_position.z);
m_transsform.position = Vector3.Lerp(m_transsform.position, m_position, Time.time);
//注视玩家
m_transsform.LookAt(m_player);
}
///
/// 按鼠标滚轮缩放
///
void Zoom()
{
//实现滑轮拖动
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
if (Camera.main.fieldOfView <= maxSuo)//缩放的范围
{
Camera.main.fieldOfView += 2;
}
if (Camera.main.orthographicSize <= maxSD)
{
Camera.main.orthographicSize += 0.5f;
}
}
//Zoom in
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
if (Camera.main.fieldOfView >= minSuo)
{
Camera.main.fieldOfView -= 2;
}
if (Camera.main.orthographicSize >= minSD)
{
Camera.main.orthographicSize -= 0.5f;
}
}
}
}
然后把脚本拖入摄像头对象。
设置好参数,就可以运行来看看效果了。
好了,到这里就是摄像头的讲解,有兴趣可以到我的网站来玩玩,我是初学者,共同进步各位。
http://embracechw.top/