在网上逛面试题的时候看到这样一道题
看起来很简单,但是很多Unity基本的东西自己都忘了,导致中间遇到很多小坑
参考
作者:XMMATRIX ??
链接:https://www.zhihu.com/question/393755789/answer/1229796849
自己把这位仁兄的实现方法自己跑了一遍,遇到一些基础的问题,重新总结一番。
实现
逻辑上很简单,但是要实现起来有很多Unity的东西自己不熟悉,
问题
1.如何根据鼠标按下获得要修改的像素的位置,如何修改texture的像素值
-
射线检测 Ray ray = Camera.main.ScrennPostoRay(Input.mousePosition);
RaycastHit hit;
if(Phyic.raycast(ray, out hit))
{
} -
读取hit信息 Vector2Int o = new Vector2Int(picwidth * hit.texcoord.x, picheight * hit.texcoord.y);
for(int i = -radius; i < radius; i++)
for(int j = -radius; j < radius; j++)
{
if(i*i+j*j < radius*radius)
{
ColorTexture.SetPixel(o.x + i,o.y + j,
new Color(0,0,0,1) * picIndex);
}
}
ColorTexture.Apply();
2.如何添加按钮事件来修改pictexture值
在Canvas上挂一个脚本,
GameObject btn_1 = GameObject.Fine("Canvas/MyButton");
Button = btn_1.GetComponent<Button>();
?
btn_1.OnClick.AddListener(delegate()
{
GameObject plane = GameObject.Fine("DrawPlane");
plane.GetComponent<DrawPlane>().setpicIndex(btn_1Index);
})
C# 委托 Delegate
-
使用 using System;
?
delegate int CalcInt(int a, int b);
namespace Delegate
{
class TestDelegate
{
private int sum = 0;
public static int add(int a, int b){
sum += a+b;
return a+b;
}
public static int sub(int a,int b){
sum += a-b;
return a-b;
}
public getsum(){
return sum;
}
static void main(string[] args)
{
CalcInt calcA = new CalcInt(add);
CalcInt calcB = new CalcInt(sub);
CalcInt calc = calcA + calcB;
Console.WriteLine("return:" + calc(8,5));
Console.WriteLine("sum:" + getsum());
}
}
}
return:3
sum:16
这里的delegate的作用仅仅是用于创建一个函数实例,然后供事件触发时运行该“委托”而已。
btn_1.OnClick.AddListener(delegate()
{
GameObject plane = GameObject.Fine("DrawPlane");
plane.GetComponent<DrawPlane>().setpicIndex(btn_1Index);
})
最终结果?
?
|