unity3d(一)

这个小游戏基于unity5.0引擎开发,脚本用的是c#,脚本与逻辑都是入门级别。之前有尝试过cocos2d-x,但是由于没有集成的开发环境而只是一个开源的框架,我觉得用起来有点麻烦,所以就选择了unity。当然ue4什么的还是等以后吧。

其中遇到了一点问题如下。

1.unity好像并没有自动保存工程(project)和场景(screen)的预置选项(这里的工程是指所有的场景(screen关卡文件),而场景是指heirarchy面板里所有游戏物体和预设所构成的当前视图的screen),所以不嫌麻烦的就做一段时间点一下save project吧,嫌麻烦地可以搜一下unity自动保存代码。

2.有关控制物体2d移动的代码总结

上下左右键控制(发布在在非移动平台)

void Update () {
float movev = 0;
float moveh = 0;
m_rocketRate -= Time.deltaTime;
if (Input.GetKey (KeyCode.UpArrow)) {
movev+=m_speed*Time.deltaTime;
}
if (Input.GetKey (KeyCode.DownArrow)) {
movev-=m_speed*Time.deltaTime;
}
if (Input.GetKey (KeyCode.LeftArrow)) {
moveh-=m_speed*Time.deltaTime;
}
if (Input.GetKey (KeyCode.RightArrow)) {
moveh+=m_speed*Time.deltaTime;
}

//this.transform调用游戏体transform组件,与游戏体移动/旋转/缩放有关
this.transform.Translate (new Vector3 (moveh, 0,movev));

Transform是类型,transform是属性,transform属性的类型也就是Transform。

触摸控制(移动平台)

这里采用射线碰撞检测

m_inputMask指向层。

if (Input.GetMouseButton (0))
{
Vector3 ms=Input.mousePosition;
Ray ray=Camera.main.ScreenPointToRay(ms);
RaycastHit hitinfo;
bool iscast =Physics.Raycast(ray,out hitinfo,1000,m_inputMask);
if(iscast)
{
m_targetPos=hitinfo.point;
}
}
Vector3 pos = Vector3.MoveTowards (this.m_transform.position, m_targetPos, m_speed * Time.deltaTime);
this.m_transform.position=pos;

 

3.利用Tag判断碰撞发生与否

第一次看到感觉有点黑科技啊

比如在Enemy的脚本里

if(other.tag.CompareTo(“PlayerRocket”)==0)

“PlayerRocket”是tag。

OnTriggerEnter方法:碰撞体在碰撞时触发。

4.子弹跟踪玩家

Vector3 relativePos = m_transform.position – m_player.position;
Instantiate (m_rocket, m_transform.position, Quaternion.LookRotation (relativePos));

5.Awake()和Start()函数

Awake()先于start()在实例化之前调用;

 

最后的效果,由于3d模型过于精细,导致最后的安装包文件有110mb大小,在实际开发中这种情况应尽量避免。

捕获

参考的书籍是《unity3d/2d手机游戏开发》(第二版)金玺曾编著  清华大学出版社

 

 

 

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注