Unity3D实战RPG黑暗之光Scene3:创建游戏运行场景及角色控制
Posted nobcaup
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D实战RPG黑暗之光Scene3:创建游戏运行场景及角色控制相关的知识,希望对你有一定的参考价值。
【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黑暗之光Scene3:创建游戏运行场景及角色控制的主要内容,如果未能解决你的问题,请参考以下文章