{
目录
}
草地+风场+UnityChan卡通渲染场景(一)
目前效果:
鼠标旋转视角,wasd控制移动
重写了UnityChan的控制代码,因为自带的UnityChanControlScriptWithRgidBody的操作很蹩脚,AD键不是向着左右两边走,而是旋转 ==|| 这。。
可能各有所好?我最喜欢的巫师3:狂猎和塞尔达传说:荒野之息都是按W向着屏幕的正前方走,AD向着屏幕左边缘和有边缘方向走,通过旋转鼠标来确定方向,所以我也打算这么做。
首先,写了一个相机跟随+转向脚本,思路很简单,
根据鼠标滑动方向旋转摄像机,根据一个设置好的距离调整摄像机到Chan的距离,
可以设置X轴的最大最小旋转角度,
因为总是卡到地下或者墙里,所以用射线检测来检测摄像机是否能继续旋转,比如:摄像机的高度已经很接近地面了,我们就不能让它在向下移动了。
相机跟随+转向脚本如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Camerafollow : MonoBehaviour {
public Transform Chan;
[Range(0,180)]
public float max_X_Euler;
[Range(-180, 0)]
public float min_X_Euler;
[Range(0, 60)]
public float X_rotateSpeed;
[Range(0, 60)]
public float Y_rotateSpeed;
[Range(1,10)]
public float XZ_dist;
[Range(1, 10)]
public float Y_dist;
private float current_rotation_X;
private float current_rotation_Y;
private float last_rotation_X;
private float last_rotation_Y;
private bool[] Xobstacle;
private bool[] Yobstacle;
// Use this for initialization
void Start () {
Xobstacle = new bool[2];
Yobstacle = new bool[2];
}
// Update is called once per frame
void LateUpdate () {
current_rotation_X += Input.GetAxis("Mouse Y") * X_rotateSpeed;
current_rotation_Y+= Input.GetAxis("Mouse X") * Y_rotateSpeed;
Xobstacle[0] = Physics.Linecast(transform.position, transform.position + new Vector3(0, -1.5f, 0));
Xobstacle[1] = Physics.Linecast(transform.position, transform.position + new Vector3(0, -1.5f, 0));
Yobstacle[0] = Physics.Linecast(transform.position, transform.position + transform.TransformDirection(new Vector3(1, 0, 0)));
Yobstacle[1] = Physics.Linecast(transform.position, transform.position + transform.TransformDirection(new Vector3(-1, 0, 0)));
Physics.Linecast(transform.position, transform.position + new Vector3(1, 0, 0));
current_rotation_X = Mathf.Clamp(current_ro