【Unity3D实战】RPG黑暗之光Scene3:创建游戏运行场景及角色控制

原创 2016年05月31日 00:29:46

【Unity3D实战】RPG黑暗之光Scene3:创建游戏运行场景及角色控制


1、创建场景:
基于上一个场景做一份拷贝,删除UI Root下的所有组件(除Camera外)。删除CharacterCreation物体。

2、标签管理:
创建脚本Tags.cs管理全局的标签。比如:
public const string ground = "Ground"; //const 标明这个是一个共有的不可变的变量
public const string player = "Player"; //玩家角色

3、实现鼠标点击地面的效果:
创建一个脚本PlayerDir.cs,附着到Player上。
从鼠标在屏幕的位置发射一条射线,由于地形是带有一个terrain collider的,所以可以和射线产生碰撞。并且Tag为Ground,那么就可以判断鼠标是点击到了地形上。
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
bool isCollider = Physics.Raycast(ray, out hitInfo);
当鼠标点击到了地面上,就实例化出来点击的效果。
public Vector3 targetPosition = Vector3.zero;
ShowClickEffect(hitInfo.point);
void ShowClickEffect( Vector3 hitPoint ) {
    hitPoint = new Vector3( hitPoint.x,hitPoint.y + 0.1f ,hitPoint.z );
    GameObject.Instantiate(effect_click_prefab, hitPoint, Quaternion.identity);
}

4、控制主角的朝向(鼠标点击地面的时候转向):
同样是在PlayerDir.cs脚本里面:
void LookAtTarget(Vector3 hitPoint) { //让主角朝向目标位置
    targetPosition = hitPoint;
    targetPosition = new Vector3(targetPosition.x, transform.position.y, targetPosition.z);
    this.transform.LookAt(targetPosition);
}

5、控制主角的移动:
角色添加一个Character Controller。创建行走脚本PlayerMove.cs。由于在PlayerDir.cs里面已经定义了Player朝向,所以PlayerMove.cs只需要向前走就可以了。
private CharacterController controller;
ontroller = this.GetComponent<CharacterController>();
controller.SimpleMove(transform.forward * speed);

6、控制主角的跳跃:
模拟重力系统:
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;
void Update()
{
    CharacterController controller = GetComponent<CharacterController>();
    if (controller.isGrounded)//判断角色是否落地
    {
        if (Input.GetKey(KeyCode.Space))//或者if (Input.GetButton("Jump"))
            moveDirection.y = jumpSpeed;


    }
    moveDirection.y -= gravity * Time.deltaTime;
    controller.Move(moveDirection * Time.deltaTime);
}

7、控制主角的移动动画:
添加Animation组件,并把所有动画添加上去。(新的mecanim动画系统允许添加Animator组件,并通过动画状态机控制)
animation.CrossFade(“Run”);//老系统
animation.Play(“Run”);//老系统
animator.SetBool("Dead", true);//新系统
animator.SetTrigger("Walk");//新系统

8、控制相机跟随主角的移动:
给相机添加一个FllowPlayer.cs的脚本
private Transform player;
private Vector3 offsetPosition;//位置偏移
void Start () {
    player = GameObject.FindGameObjectWithTag(Tags.player).transform;
    transform.LookAt(player.position);
    offsetPosition = transform.position - player.position;
}
void Update () {
    transform.position = offsetPosition + player.position;//根据偏移来移动相机
}

9、使用鼠标滑动控制相机视野的拉近和拉远:
同样编辑FllowPlayer.cs脚本
public float distance = 0;
public float scrollSpeed = 10;
void Update () {
    //处理视野的拉近和拉远效果
    ScrollView();
}
void ScrollView() {
    //print(Input.GetAxis("Mouse ScrollWheel"));//向后 返回负值 (拉近视野) 向前滑动 返回正值(拉远视野)
    distance = offsetPosition.magnitude;//返回向量的长度,即距离
    distance += Input.GetAxis("Mouse ScrollWheel")*scrollSpeed;
    distance = Mathf.Clamp(distance, 2, 18);//限制distance值在2-18之间
    offsetPosition = offsetPosition.normalized * distance;//单位向量 * 距离
}

10、控制视野的左右旋转(鼠标右键按住左右拉):
同样编辑FllowPlayer.cs脚本
public float rotateSpeed = 2;
private bool isRotating = false;
void Update () {
    //处理视野的拉近和拉远效果
    RotateView();
}
void RotateView() {
    //Input.GetAxis("Mouse X");//得到鼠标在水平方向的滑动
    //Input.GetAxis("Mouse Y");//得到鼠标在垂直方向的滑动
    if (Input.GetMouseButtonDown(1)) {
        isRotating = true;
    }
    if (Input.GetMouseButtonUp(1)) {
        isRotating = false;
    }
    if (isRotating) {
        transform.RotateAround(player.position, player.up, rotateSpeed * Input.GetAxis("Mouse X"));//围绕Player这个点,Player的Y轴旋转
    }
    offsetPosition = transform.position - player.position;
}

11、控制视野的上下旋转和范围(鼠标右键按住上下拉):
同样编辑FllowPlayer.cs脚本
void RotateView() {
    //Input.GetAxis("Mouse X");//得到鼠标在水平方向的滑动
    //Input.GetAxis("Mouse Y");//得到鼠标在垂直方向的滑动
    if (Input.GetMouseButtonDown(1)) {
        isRotating = true;
    }
    if (Input.GetMouseButtonUp(1)) {
        isRotating = false;
    }
    if (isRotating) {
        Vector3 originalPos = transform.position;
        Quaternion originalRotation = transform.rotation;


        transform.RotateAround(player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));//影响的属性有两个 一个是position 一个是rotation
        float x = transform.eulerAngles.x;
        if (x < 10 || x > 80) {//当超出范围之后,我们将属性归位原来的,就是让旋转无效 
            transform.position = originalPos;
            transform.rotation = originalRotation;
        }
    }
    offsetPosition = transform.position - player.position;
}

12、给角色添加状态信息:
血量,蓝,攻击等等,新建一个脚本PlayerStatus.cs。这部分没有特别需要注意的,不细述。
public int level = 1; // 100+level*30
public string name = "默认名称";
public int hp = 100;//hp最大值
public int mp = 100;//mp最大值
public float hp_remain = 100;
public float mp_remain = 100;
public float exp = 0;//当前已经获得的经验
public float attack = 20;
public int attack_plus = 0;
public float def = 20;
public int def_plus = 0;
public float speed = 20;
public int speed_plus = 0;
public int point_remain = 0;//剩余的点数

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【Unity3D实战】RPG黑暗之光Scene2:创建角色选择场景

【Unity3D实战】RPG黑暗之光Scene2:创建角色选择场景 1、开始角色创建场景,导入模型和UI资源: 导入模型和角色UI相关的资源。 拷贝一份start场景,重命名为chara...

【Unity3D实战】RPG黑暗之光Scene1:创建开始场景

【Unity3D】RPG黑暗之光Scene1:创建开始场景 1、导入资地形、地貌资源,新建场景,导入地形、地貌prefab,设置相机位置,添加全局灯光。 2、设置鼠标指针图片: Edit-->P...

【Unity3D实战】RPG黑暗之光:游戏分解及各系统的实现

【Unity3D实战】RPG黑暗之光:游戏分解及各系统的实现 一、任务系统: 1、添加接任务的老爷爷: Model中选择并添加老爷爷,调整方向,并添加一个Box collider组件。 ...

unity3d--镜头跟随及控制(RPG游戏黑暗之光)

现需要完成镜头的跟随及控制。 一、镜头的跟随 思路很简单,首先取得镜头初始与角色的距离向量值,然后让相机与角色持续保持该向量距离即可。脚本如下: private Transform player; p...

unity3d--人物朝向(RPG游戏黑暗之光)

控制功能一: 鼠标点击地面产生点击效果 思路:读取鼠标点击位置,如果点击位置是地面,生成点击效果。 则明显需要使用射线检测,用于检测射线与地面的碰撞信息,则脚本如下: public GameObje...

unity3d--人物移动(RPG游戏黑暗之光)

角色的移动分为两步实现:①角色的移动;②角色播放移动动画。 一、角色的移动 前期工程已经实现了朝向点击方向,则现在只需要让角色向前移动即可。脚本如下: private CharacterCont...

学习泰课的Unity3D黑暗之光RPG游戏开发(一)——学习目录介绍

整个学习目录如下所示 课时01_游戏预览和介绍 课时02_导入场景资源,搭建场景 课时03_给场景添加光,设置鼠标指针图片 课时04_给场景添加水面和天空盒子 课时05_实现镜头缓慢拉近的效...

学习泰课的Unity3D黑黯之光RPG游戏开发(二)——课时1至课时16

课时1至课时16的主要内容如下课时01_游戏预览和介绍 课时02_导入场景资源,搭建场景 课时03_给场景添加光,设置鼠标指针图片 课时04_给场景添加水面和天空盒子 课时05_实现镜头缓慢拉...

Unity3D黑暗之光项目里面额事件运用--事件监听

黑暗之光项目(个人学习笔记) 1.事件监听 (1)新建一个类文件LLEventDispatcher (2)又新建一个类LLEventController,是我们添加监听,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Unity3D实战】RPG黑暗之光Scene3:创建游戏运行场景及角色控制
举报原因:
原因补充:

(最多只允许输入30个字)