Android Fragment展示Unity场景,【面试总结

}

defaultConfig中添加

ndk {

abiFilters “armeabi-v7a”

}

在local.properties中配置ndk(替换你自己的ndk)

ndk.dir=…/Android/sdk/ndk/xxxx

Android架构中应当看到

Android Fragment展示Unity场景

Android Project


创建Fragment


创建UnityScene.java

package com.example.androidproject.unity;

import com.unity3d.player.UnityPlayer;

public class UnityScene {

public static UnityPlayer mUnityPlayer;

public UnityScene(){

}

}

创建一个空的Fragment,添加如下代码

private View playerView;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// Inflate the layout for this fragment

playerView = UnityScene.mUnityPlayer.getView();

//具体参数 跟自己公司Unity开发人员协商

//第一个参数是unity那边的挂载脚本名字

//第二个参数是 unity提供的方法名

//第三个参数是 自己要给unity传的值

// UnityScene.mUnityPlayer.UnitySendMessage(“Main Camera”,“Id”,“1”);

return playerView;

}

改写MainActivity


在MainAcivity的onCreate中添加

UnityScene.mUnityPlayer = new UnityPlayer(getApplicationContext());

getWindow().setFormat(PixelFormat.RGBX_8888);

if (savedInstanceState == null) {

getSupportFragmentManager().beginTransaction()

.setReorderingAllowed(true)

.add(R.id.fragment_container_view, UnityFragment.class, null)

.commit();

}

MainAcivity重写其他方法

@Override

protected void onDestroy() {

UnityScene.mUnityPlayer.quit();

super.onDestroy();

}

@Override

protected void onPause() {

super.onPause();

UnityScene.mUnityPlayer.pause();

}

@Override

protected void onResume() {

super.onResume();

UnityScene.mUnityPlayer.resume();

}

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

UnityScene.mUnityPlayer.configurationChanged(newConfig);

}

@Override

public void onWindowFocusChanged(boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

UnityScene.mUnityPlayer.windowFocusChanged(hasFocus);

}

@Override

public boolean dispatchKeyEvent(KeyEvent event) {

if (event.getAction() == KeyEvent.ACTION_MULTIPLE)

return UnityScene.mUnityPlayer.injectEvent(event);

return super.dispatchKeyEvent(event);

}

@Override

public boolean onKeyUp(int keyCode, KeyEvent event) {

return UnityScene.mUnityPlayer.injectEvent(event);

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

return UnityScene.mUnityPlayer.injectEvent(event);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

return UnityScene.mUnityPlayer.injectEvent(event);

}

public boolean onGenericMotionEvent(MotionEvent event) {

return UnityScene.mUnityPlayer.injectEvent(event);

}

gradle中增加

implementation “androidx.fragment:fragment:1.2.1”

activity_main.xml如下

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:app=“http://schemas.android.com/apk/res-auto”

xmlns:tools=“http://schemas.android.com/tools”

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的百度、腾讯、网易、字节跳动、阿里等公司2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

Android学习PDF+学习视频+面试文档+知识点笔记

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

【Android高级架构视频学习资源】

a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

[外链图片转存中…(img-mN8HLvYO-1727041969549)]

【Android高级架构视频学习资源】

**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值