一、导入资源
前言
最近开始准备毕设,选了unity制作游戏,记录一下制作过程,方便新手学习和交流。
1.准备资源
买了一个package包文件,包含主角人物和主角人物动画。(还有作者自己做的场景和脚本,以及一个做好的动画状态机给用户参考,很贴心) 在网上找package导入的时候一定要找靠谱的,最好从官网上下,某宝上很多商家提供的不仅bug满天而且动画摆放也乱七八糟,笔者多次踩坑。
2.制作主角
选择一个人物拖入到场景做主角,最好在Hierarchy窗口中单独创建一个空的对象,将主角放到该对象下面,这样子方便以后添加新的物体。 给主角添加刚体和碰撞体。 把
Drag表示阻力大小。 angular drag表示角度阻力大小。 use gravity表示物体受到重力影响。 is kinematic表示是否收到动力学影响,若勾选,则不会收到力的影响。 interpolate 是否插入,不选。
碰撞触发器大概能包住主角就行。
添加c#代码 首先添加摄像机视角代码,我的摄像机是这样设置的,同学们可以自行设置。
public class CameraControl : MonoBehaviour
{
public Transform target;
private Vector3 CameraPosition;
private Vector3 offset;
void Start()
{
CameraPosition = new Vector3(0, 10, -5);
Vector3 pos=target.TransformDirection(CameraPosition);
transform.position = target.position + pos;
offset = target.position - transform.position;
}
void Update()
{
}
private void LateUpdate()
{
transform.position = Vector3.Lerp(transform.position, target.position - offset, Time.deltaTime * 5);
}
}
不要图方便直接把相机和主角放到同一个物体下,这不利于后续制作主角视角跟随鼠标移动。
制作主角移动和视角跟随鼠标 视角跟随鼠标需要获得鼠标在世界坐标系上的坐标,但是input.mousePosition是鼠标在屏幕上的坐标,如何转换? 我采用的方法是从相机的位置发射一条射线(这条射线是在世界坐标中的),经鼠标的屏幕坐标,与地面或物体的交点就是鼠标的世界坐标。
public class CharacterControl : MonoBehaviour
{
ppublic Camera mycamera;
private Rigidbody myrigibody;
private float speed = 3.0f;
Vector3 targetDirection;
private float verticalFactor;
private float horizontalFactor;
void Start()
{
myrigibody = this.GetComponent<Rigidbody>();
}
void Update()
{
Ray ray = mycamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
Vector3 Point = hit.point;
Point.y = transform.position.y;
transform.LookAt(Point);
}
}
private void FixedUpdate()
{
verticalFactor = Input.GetAxis("Vertical");
horizontalFactor = Input.GetAxis("Horizontal");
if (verticalFactor != 0 || horizontalFactor != 0)
{
targetDirection = new Vector3(horizontalFactor, 0, verticalFactor);
targetDirection.Normalize();
myrigibody.MovePosition(this.transform.position + speed * targetDirection * Time.fixedDeltaTime);
}
}
在unity中x,z轴为水平轴,y轴为垂直轴。 主角移动的键盘控制可以在Edit—Project Setting—Input Manager中修改。
移动过程中发现主角移动过程中可能会摔在地上,我们把刚体下的Freeze Rotation的x轴和z轴锁定了,仅保留y轴转向,这样子主角就不会摔倒了。 看看效果
|