任何一个无规则曲线它都是有若干个线段组成,及时是圆形它也是又若干个线段组成的,也就是说将若干个线段拼接起来就是我们须要的无规则曲线~那么在3D 的世界中
我们须要知道 X Y Z 三个点来确定一条3D线段。
Debug.DrawLine 绘制的线条只会在编辑器中显示,在真实的场景中不显示,所以要想在游戏中显示线条,必须使用LineRenderer
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(LineRenderer))]
public class RenderRange : MonoBehaviour {
/// <summary>
/// 圆的半径
/// </summary>
public float radius = 5f;
/// <summary>
/// 将圆平均切分为N份
/// </summary>
public int positionCount = 10;
/// <summary>
/// 每份的角度
/// </summary>
private float angle;
/// <summary>
/// 测试线条颜色
/// </summary>
private Color color = Color.green;
private Quaternion q;
private LineRenderer line;
// Use this for initialization
void Start () {
angle = 360f / positionCount;
line = GetComponent<LineRenderer>();
//必须要先设置点的长度,然后再SetPosition,否则会报数组越界
line.positionCount = positionCount;
}
// Update is called once per frame
void Update () {
q = transform.rotation;
for (int i = 0; i < positionCount; i++) {
//确保第一个点在正前方
if(i != 0) {
q = Quaternion.Euler(q.eulerAngles.x, q.eulerAngles.y + angle, q.eulerAngles.z);
}
//注意Quaternion和Vector3相乘时,Quaternion必须在前面,因为它是一个矩阵
Vector3 forwardPosition = transform.position + q *Vector3.forward * radius;
line.SetPosition (i, forwardPosition);
}
for (int i = 0; i < positionCount; i++) {
Debug.DrawLine(transform.position, line.GetPosition(i), color);
if (i == 0) {
Debug.DrawLine (line.GetPosition(positionCount - 1), line.GetPosition(i), color);
} else {
Debug.DrawLine (line.GetPosition(i - 1), line.GetPosition(i), color);
}
}
}
}
Character Controller本身自带一个碰撞器,无需刚体即可完成触发(Trigger)和碰撞(Collision)功能。因此 Character Controller 需要一个平面或其它物体的支撑,否则就会受到重力影响掉下去。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
public class Move : MonoBehaviour {
public int speed = 10;
private CharacterController controller;
// Use this for initialization
void Start () {
controller = GetComponent<CharacterController> ();
}
// Update is called once per frame
void Update () {
}
void FixedUpdate() {
controller.SimpleMove (new Vector3(Input.GetAxisRaw ("Horizontal") * speed, 0, Input.GetAxisRaw ("Vertical") * speed));
}
}
Materials:材质,控制线条整体的颜色
(如果使用多个材质,只有最后一个材质生效)
Width:控制线宽
LineRenderer可以在2D游戏中绘制攻击范围,因为2D游戏是用贴图呈现场景的,但是在3D游戏中,由于LineRenderer是采用坐标进行绘制,因此很可能会被更高的地形遮挡,如上图。