第4天让狗吃了.....
今天我们终于走到了正点上:关于C#脚本中对对象的基本操作
我们先推荐一个博主:大学霸,这是链接
http://my.oschina.net/u/1585857/blog?catalog=470833&p=2&temp=1468725572314
他列表中2015年有许多关于Unity3D的东西可以看
然后再推荐另外一个博主,脱莫柔,她貌似一直在做Unity3D方面的东西,下面是链接
博客园(搬家前)
http://www.cnblogs.com/fortomorrow/CSDN(搬家后)
http://blog.csdn.net/asd237241291
今天完成的内容很简单,在下面这篇博客里完全包含:
http://www.cnblogs.com/fortomorrow/archive/2012/10/30/unity05.html
一、物体的移动、缩放、旋转
移动很简单,为物体添加刚体组件,然后在脚本的 Start() 方法中添加如下代码,即可完成速度的设置,程序会自动运行它的运动过程
GetComponent<Rigidbody2D>().velocity = new Vector2(-1, 0);
缩放和旋转则不一样,是通过对物体的 transform 属性进行修改完成的,所以都放在了 Update() 方法下面,代码如下
transform.Rotate(new Vector3(0, 0, 3)); /// 完成旋转,这个 x, y, z 分别指的是
/// 绕 “对应轴” 旋转的角度
/// 我做的是2D的,所以都是绕着 z 旋转的
transform.localScale += 0.001f*(new Vector3(1, 1, 0)); /// 完成缩放
/// 同样,向量中 X,Y,Z 分别为对应轴的缩放
这里来说明下不放在 FixedUpdate() 中,因为 FixedUpdate() 方法是物理引擎更新的地方,也就是说如果要修改上面的速度的话,就应该放在 FixedUpdate() 里头,因为是物理引擎中“刚体”的属性。
二、输入的获取
1.输入指定按键:
//按下键盘“上方向键”
if(Input.GetKey ("up"))
print("Up!");
//按下键盘“W键”
if(Input.GetKey(KeyCode.W);)
print("W!");
也就是说,对于按键的判定为 bool 型。
2.鼠标控制//按下鼠标左键(0对应左键 , 1对应右键 , 2对应中键)
if(Input.GetMouseButton(0))
print("Mouse Down!");
Input.GetAxis("Mouse X");//鼠标横向增量(横向移动)
Input.GetAxis("Mouse Y");//鼠标纵向增量(纵向移动)
对于鼠标按键的判定也是 bool 型。
倒是获取鼠标位移还算正常,返回值为?int?
3.获取轴:
//水平轴/垂直轴 (控制器和键盘输入时此值范围在-1到1之间)
Input.GetAxis("Horizontal");//横向
Input.GetAxis ("Vertical");//纵向
返回值类型???
鼠标和获取轴没做,不要怪我,我也很努力的在完成另外一个问题,暂时没有解决。等解决了自然会把这里补上的,今天就这些,苦逼的周日的下午,一直没找到解答。。。。。
(续)终于解决了这个问题,先给链接,再进行描述:
http://blog.okbase.net/unity3d/archive/4611.html
非常感谢这位仁兄给的教程,顺便吐槽下百度。。。真的不行,搜索 Sprite.Create 失败,竟然全都是 Sprite.Create 怎么用,哼,最后还是依靠了 Bing 和yaHoo 走回来的,我都跑 Unity 论坛上去发帖了,
为题描述如下:我要做动画,而我希望的完成方式是,有N幅图像,每隔一段时间切换一张,用这种非常原始的方式完成动画
我的环境:VS2013 + Unity3D 5.3
那么首先,我的资源是这样的
拖入 Unity 的资源管理器后,是这样的
然后呢,我希望它是3帧的,处理一下,在右上角将 Sprite Mode 修改为 Multiple(多精灵),然后点击下图中 Sprite Editor 进行处理(它会提示是否保存,点击保存,因为刚刚修改为Multiple了)
进入 Sprite Editor 后,如下图,左上角 | slice ♦ | Trim|,点开 slice,就可以看到左上角弹出窗口了,点击 Slice即可完成自动分割,图中可以看到我分割的结果,三个圆都有一个矩形框。右下角弹出窗口是选中框的状态信息。
退出 Splice Editor,点击应用即可,那么,图片处理好了,我们在 Project 创建一个 C#脚本,双击即可打开 VS,代码如下
public class StateCake : MonoBehaviour {
public int num = 0; /// 选择图片序号
public int counter = 0; /// COUNTER 计数器
public Sprite[] sprites; /// 这个就是存储我们刚刚处理的几张图像的地方,精灵数组
private SpriteRenderer render; /// 这个是存放渲染器的地方
// Use this for initialization
void Start () {
render = GetComponent<Renderer>() as SpriteRenderer; /// 初始化时,我们获取对象的渲染器
}
// Update is called once per frame
void Update () {
counter += 1;
if(counter>60)
{
counter = 0;
num += 1;
if(num>2)
{
num = 0;
}<span style="font-family:Arial, Helvetica, sans-serif;"> /// 前面是用来选择图片的代码</span>
else if(0 == num)
{
render.sprite = sprites[0]; /// 选择精灵,赋值给渲染器
}
else if(1 == num)
{
render.sprite = sprites[1];
}
else if (2 == num)
{
render.sprite = sprites[2];
}
}
}
}
代码很明朗,就是切换三个图片的。保存关闭VS,回到Unity。接下来在Hierarchy创建一个 2D Object -> Sprite,我们取名为 StateCake,然后将脚本拖拽并放到它上面。可以看到 StateCake 现在就有这些组件:
首先是没有标红的 Transform 组件,就是前面操作旋转和缩放的组件,
然后是 Sprite Renderer,就是代码里面初始化时获取的渲染器组件,那么 Sprite 属性值,就是更新中我们赋值的那个属性了
最后是 State Cake 组件,可以看到标注了 ( Script ),就说明是脚本组件了。看底下的参数,正是我们定义的 Num, Counter,以及 Sprites(尺寸暂时为0)。
接下来就是最最最关键的一个步骤了,为了这个步骤我可是折腾了一个下午。点右上角的锁定,那么当你切换选择时 Inspector 保持在 StateCake对象上。后面的操作看下面的图,边看边讲:
刚刚制作的图,右边有个三角点开,选择全部三个图片(红框内:选择第一个,按住shift,再选择最后一个)
然后,拖拽到右边蓝色区域内,则会自动添加进去(就这个拖拽!拖拽!拖拽!一下午加上一晚上啊)
然后可以看到右边红框内,就添加进去三个图片了,此时运行程序,就可以看到饼在变了。
终于搞定了,好开心,好充实的一天。。。。