12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using UnityEngine;
- public class Painter : MonoBehaviour
- {
- /// <summary>
- /// 画笔的颜色
- /// </summary>
- public Color32 penColor;
- public Transform rayOrigin;
- private RaycastHit hitInfo;
- //这个画笔是不是正在被手柄抓着
- private bool IsGrabbing;
- private static PaintBoard board;//设置成类型的成员,而不是类型实例的成员,因为所有画笔都是用的同一个board
- private void Start()
- {
- //将画笔部件设置为画笔的颜色,用于识别这个画笔的颜色
- foreach (var renderer in GetComponentsInChildren<MeshRenderer>())
- {
- if (renderer.transform == transform)
- {
- continue;
- }
- renderer.material.color = penColor;
- }
- if (!board)
- {
- board = FindObjectOfType<PaintBoard>();
- }
- }
- private void Update()
- {
- Ray r = new Ray(rayOrigin.position, rayOrigin.forward);
- Debug.DrawLine(rayOrigin.position, rayOrigin.position + rayOrigin.forward * 10, Color.red);
- if (Physics.Raycast(r, out hitInfo, 0.1f))
- {
- if (hitInfo.collider.tag == "Board")
- {
- //设置画笔所在位置对应画板图片的UV坐标
- board.SetPainterPositon(hitInfo.textureCoord.x, hitInfo.textureCoord.y);
- //当前笔的颜色
- board.SetPainterColor(penColor);
- board.IsDrawing = true;
- IsGrabbing = true;
- }
- }
- else if (IsGrabbing)
- {
- board.IsDrawing = false;
- IsGrabbing = false;
- }
- }
- }
|