您的位置:首页 > 移动开发 > Unity3D

Unity初学入门1 学习笔记 (已初步了解Unity界面与C#脚本语言)

2017-02-20 21:44 363 查看
结束了一个星期的学习 现记录一些知识点

因为在大二有过一段时间的学习 对Unity界面有了一定的认知 对于C#脚本语言也有了一定的了解 所以学习起来也不是挺难

这学期的第一次学习是在我爱自学网学习的

http://www.51zxw.net/list.aspx?cid=454

但是教程是4.X的版本 开始学习的时候还好 但是随着教程地逐渐深入

有许多地方的代码不兼容 以及界面上有些地方找不到

例如给物体加力,教程所给代码为
n.rigidbody.AddForce(fwd*28000);


实际上如果在本人所用的5.5版本中会提示代码需要更新的错误

所以经底下评论查询所得
n.GetComponent<Rigidbody>().AddForce(yun * l);


此代码经验证可行,但泛型有关知识还待完善 所以并不能懂此行代码。

又例如 在Unity4.6版本过后 UI系统改变 使得教程中所有跟UI有关的教程全部无法使用

但我记得在去年的时候我在某个视频网站上看到过并且实践过UI.button 现在查找也记不清是在极客学院还是在慕课网了 并且上周也没有对UI知识进行过多地探讨。

现对知识进行总结

用WASD控制镜头的移动

用QE控制镜头的上下摇动(以及左右等)(运用的是欧拉角的知识)

用HN控制镜头的上下移动(直接控制Y轴)

控制组件代码的使用是否以及组件的使用与否

自己额外做了个蓄力条,用鼠标开火以及力度调整

假想:设置得分 及 基本文字 UI

float x = Input.GetAxis("Horizontal") * Time.deltaTime * speed;

float z = Input.GetAxis("Vertical") * Time.deltaTime * speed;

transform.Translate(x, 0, z);


即Edit-Project Settings-Input



Input.GetAxis即获取轴 即X轴由Horizontal中的AD键控制 Z轴由Vertical中的WS控制

发现一个问题,即此段代码为X轴坐标等于原坐标值乘以时间乘以速度,如若原坐标值为零 那么X轴坐标始终未零 此问题留以后解决

2.
if (Input.GetKey(KeyCode.Q))

{

transform.Rotate(-25 * Time.deltaTime, 0, 0, Space.Self);

}

if (Input.GetKey(KeyCode.E))

{

transform.Rotate(25 * Time.deltaTime, 0, 0, Space.Self);

}


可以将+-25 * Time.deltaTime放在X Y Z轴 可以实现不同轴的欧拉角旋转。

if (Input.GetKey(KeyCode.H))

{

transform.Translate(0, 5 * Time.deltaTime, 0);

}

if (Input.GetKey(KeyCode.N))

{

transform.Translate(0, -5 * Time.deltaTime, 0);

}


上面2用的 transform.Rotate

这段用的 transform.Translate 上面是旋转 而这个是直接改变XYZ轴 。

4.
gameObject.Find("Main Camera".GetComponent(dong).enabled = false;
上面这段代码为搜索Main Camera组件 然后获取其dong 脚本 然后将其标记为未激活状态

public MeshRenderer ME;
if (Input.GetKey(KeyCode.Space)) {ME.enabled  = false;


上面这段代码为先定义一个MeshRenderer ME 然后如果按下空格键 会将ME 标记为未激活状态 所以有此段代码的脚本如若安放到某个物体 当游戏开始时 按下空格键 此物体就会消失

5.开始射出的时候 给的力量是固定值 我想把它做成一个可以蓄力的动作 开始用的是Input.GetKeyDown方法 后来发现这个方法无法实现按住力量增加 后来用了Input.GetKey方法 明白了前者Time.deltaTime计算时间只是计算按下键键程(即开始按键到按到底)落下的时间 此处在网上寻找了一篇文章 解决了这个问题http://www.lai18.com/content/8869478.html

此处贴上更改后 可以执行的代码

if (Input.GetKey(KeyCode.X))
{

if (l < Maxl)
{
l += Time.deltaTime * 500;

}

else
{
l = Maxl;
}
dynamics = GameObject.Find("asd");
dynamics.GetComponent<Text>().text = "dynamics:" + l;

}

else if (Input.GetKey(KeyCode.C))
{

l -= Time.deltaTime * 500;

dynamics = GameObject.Find("asd");
dynamics.GetComponent<Text>().text = "dynamics:" + l;

}


6 .做了一个蓄力之后觉得自己还是能做好东西的 然后正好又看到一段代码 所以把自己的DEMO做成了一个篮球场 想实现一个进球判断的功能

4.x教程中给出的判断位置代码
if(gameObeject.transform.position.y<0)


那么我想把篮筐的位置固定 将此段代码设置到球体上可以判断是否进球

现在的UI系统还没有弄熟悉 4.x教程上写着直接用text改变即可 亲测不行

评论说 应该先创建一个空物体 然后在空物体上设置文字 具体代码为

public GameObject  hand;

public int sdshu = 0;

hand = GameObject.Find("qwe");

hand.GetComponent<Text>().text = "biubiubiu:" + sdshu;


最后一行代码没有理解 理由同上 与范型有关 不知道GetComponent()是什么意思。

——————————–2月20日割—————————————–
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity c# 初学