2d unity 多物体 射线_Unity 实用教程 之 绘制实体2D矩形攻击范围线

脚本具体内容如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class DrawRectangleSolid2D : MonoBehaviour {

public static GameObject go;

public static MeshFilter mf;

public static MeshRenderer mr;

public static Shader shader;

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

if(Input.GetKeyDown (KeyCode.A)) {

ToDrawRectangleSolid2D (transform, 1, 3, 4);

}

}

private static GameObject CreateMesh(List vertices)

{

int[] triangles;

Mesh mesh = new Mesh();

int triangleAmount = vertices.Count - 2;

triangles = new int[3 * triangleAmount];

//根据三角形的个数,来计算绘制三角形的顶点顺序(索引)

//顺序必须为顺时针或者逆时针

for (int i = 0; i 

{

triangles[3 * i] = 0;//固定第一个点

triangles[3 * i + 1] = i + 1;

triangles[3 * i + 2] = i + 2;

}

if (go == null)

{

go = new GameObject("mesh");

go.transform.position = new Vector3(0, 0.1f, 0);//让绘制的图形上升一点,防止被地面遮挡

mf = go.AddComponent();

mr = go.AddComponent();

shader = Shader.Find("Unlit/Color");

}

mesh.vertices = vertices.ToArray();

mesh.triangles = triangles;

mf.mesh = mesh;

mr.material.shader = shader;

mr.material.color = Color.red;

return go;

}

//绘制实心长方形2D

//distance指的是这个长方形与Transform t的中心点的距离

public static void ToDrawRectangleSolid2D(Transform t, float distance, float length, float width)

{

List vertices = new List();

if (IsFacingRight(t))

{

Vector3 forwardMiddle = new Vector3(t.position.x + distance, t.position.y);

vertices.Add(forwardMiddle + new Vector3(0, width / 2));

vertices.Add(forwardMiddle + new Vector3(length, width / 2));

vertices.Add(forwardMiddle + new Vector3(length, -width / 2));

vertices.Add(forwardMiddle + new Vector3(0, -width / 2));

}

else

{

//看不到颜色但点击mesh可以看到形状

Vector3 forwardMiddle = new Vector3(t.position.x - distance, t.position.y);

vertices.Add(forwardMiddle + new Vector3(0, width / 2));

vertices.Add(forwardMiddle + new Vector3(-length, width / 2));

vertices.Add(forwardMiddle + new Vector3(-length, -width / 2));

vertices.Add(forwardMiddle + new Vector3(0, -width / 2));

}

CreateMesh(vertices);

}

public static bool IsFacingRight(Transform t)

{

if (t.localEulerAngles.y > 0) return false;

else return true;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值