sendMessageUpwards 查找本物体上包括父物体 脚本调用传递过来方法名的方法。
sendMessageUpwards 查找本物体上包括父物体 脚本调用传递过来方法名的方法。
一般由A场景跳转到B场景的话,A场景物体会全部被销毁,如果物体调用了DontDestoryOnLoad就不会在跳转场景时被销毁。
findObjectsOfType<> 不查找未激活物体
UnityEngine Object是基类
object
public class WWWCS : MonoBehaviour {
public string url;
// Use this for initialization
IEnumerator Start () {
WWW www = new WWW(url);
yield return www;
Renderer renderer = GetComponent<Renderer>();
renderer.material.mainTexture = www.texture;
}
// Update is called once per frame
void Update () {
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;
public class jiekouCS : MonoBehaviour,IPointerDownHandler{
public void OnPointerDown(PointerEventData eventData)//这些参数都是不能改变的,鼠标按下时触发事件
{
Debug.Log("OnPointerDown");
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
类变量获取
1.物体有且仅有唯一一个Transform组件
2.父物体未激活,子物体也处于未激活
3.activeHierarchy 物体激活状态
4.activeSelf 父物体被禁用,activeSelf还可以是true
5.未激活一样可以获取到属性,只是不在场景中显示Update方法不在执行
Raycast():只会检测碰撞到的第一个物体
RaycastAll():会检测碰撞到的所有物体
1.new 新的物体--空的物体
2.GameObject.Instantiable(prefab). 根据perfab或另外一个物体进行初始化,可理解为clone
3.GameObject.createPrimitive(PrimitiveType.物体)
Raycast:射线检测与其他物体发生碰撞的条件
1.物体必须在射线的视野内
2.物体必须有碰撞器
1.不同帧,占用时间不一样。
2.Time.deltaTime 用来控制运动相关的东西
3.timeScale 设置deltaTime运动速率,对所有deltaTime产生影响。设为0暂停,0.5f等为慢动作
4.relatimeSinceStartup用在方法执行后再获取realtime做性能测试
如何切换加载场景
Application中的常用静态变量和静态方法
public class ApplicationCS : MonoBehaviour {
// Use this for initialization
void Start () {
//Application在应用中用,EditorApplication在编辑器下用
print(Application.identifier);//标识
print(Application.companyName);//公司名
print(Application.productName);//项目名
print(Application.installerName);//安装名
print(Application.installMode);
print(Application.isEditor);
print(Application.isFocused);//是否再焦点
print(Application.isMobilePlatform);//是否为移动平台
print(Application.isPlaying);//是否再运行
print(Application.platform);//平台
print(Application.unityVersion);//unity版本
print(Application.version);//游戏版本
print(Application.runInBackground);//是否可以在后台运行
Application.Quit();//只有build出来之后,才能用它来退出游戏
Application.OpenURL("www.sikiede.com");//打开网址
//Application.CaptureScreenshot("游戏截图");//屏幕截图
}
// Update is called once per frame
void Update () {
//在编辑器模式下退出游戏
if (Input.GetKeyDown(KeyCode.Space))
{
UnityEditor.EditorApplication.isPlaying = false;
}
}
}
通过Application获取datapath(没好好看,过几天再看一下)
Camera.main:通过标签获取maincamera上的camera组件,但是他的Tag必须为maincamera。
public class CameraCS : MonoBehaviour {
private Camera maincamera;
// Use this for initialization
void Start () {
maincamera = Camera.main;//获取main camera上的camera组件
}
// Update is called once per frame
void Update () {
//通过camera,把屏幕上的点转化为射线,进行射线检测
Ray ray = maincamera.ScreenPointToRay(Input.mousePosition);//把屏幕上的点,转变为射线
RaycastHit hit;//存储射线碰撞到的游戏物体,是一个out类型的引用参数
bool isCollider = Physics.Raycast(ray, out hit);//判断有没有碰撞到
if (isCollider)
{
Debug.Log(hit.collider);//输出鼠标碰到的物体是什么
}
}
}
通过AddForce控制运动
AddForce:给游戏物体施加一个力。
public class RigidbodyPositionCS : MonoBehaviour {
public Rigidbody player;
public Transform enemy;
public int force;
void Update () {
player.AddForce(Vector3.forward * force);
}
}
public class RigidbodyPositionCS : MonoBehaviour {
public Rigidbody player;
public Transform enemy;
// Use this for initialization
// Update is called once per frame
void Update () {
//按下空格,通过Rigidbody的MoveRotation实现缓慢旋转
if (Input.GetKey(KeyCode.Space))
{
Vector3 dir = enemy.position - player.position;//player望向enemy,dir表示前方向
dir.y = 0;//让他们的y坐标不受影响
Quaternion target = Quaternion.LookRotation(dir);//实现前方向与dir保持一致的旋转,就是按照前方向转向enemy
player.MoveRotation (Quaternion.Slerp(player.rotation, target, Time.deltaTime * 0.5f));
}
}
}
旋转控制多的时候,通过Rigidbody来控制,解决性能
Rigidbody刚体组件中position和MovePosition控制移动
position控制移动,是突然移过去的
MovePosition控制移动,是缓慢移动过去的
public class RigidbodyPositionCS : MonoBehaviour {
public Rigidbody player;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
player.position = player.transform.position + Vector3.forward * Time.deltaTime;//控制移动,是从一个位置突然跳转的另一个位置
player.MovePosition(player.transform.position + Vector3.forward * Time.deltaTime);//缓慢移动
}
}
Quaternion中的Lerp和Slerp插值运算
做旋转运算时,用slerp比lerp好,旋转运算,一般都用S开头的
public class SiyuanshuCS : MonoBehaviour {
public Transform player;
public Transform enemy;
// Use this for initialization
// Update is called once per frame
void Update () {
//实现player缓慢转向,望向enemy
Vector3 dir = enemy.position - player.position;//player望向enemy,dir表示前方向
dir.y = 0;//让他们的y坐标不受影响
Quaternion target= Quaternion.LookRotation(dir);
player.rotation = Quaternion.Slerp(player.rotation, target, Time.deltaTime * 0.5f);
}
}
Quaternion中的LookRotation方法
1.欧拉角和四元数的转换
cube.rotation = Quaternion.Euler(new Vector3(0, 0, 0));//用Quaternion.Euler()方法把欧拉角转换为四元数
print(cube.rotation.eulerAngles);//将四元数转换为欧拉角
2.Quaternion.LookRotation()用来处理让player望向某个目标
把一个前方向转变为四元数:把一个游戏物体的forward方向与传递过来的方向保持一致,得到的旋转就是四元数
public class SiyuanshuCS : MonoBehaviour {
public Transform player;
public Transform enemy;
void Update () {
//实现按下空格,player望向enemy
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 dir = enemy.position - player.position;//player望向enemy,dir表示前方向
dir.y = 0;//让他们的y坐标不受影响
//实现前方向与dir保持一致的旋转,就是按照前方向转向enemy
player.rotation = Quaternion.LookRotation(dir);
}
}
}
Quaternion四元数介绍以及和欧拉角的区别
欧拉角(eulerAngles):表示在x,y,z轴旋转多少度,x,z轴是以自身来旋转的,y轴是以世界坐标旋转的,方便我们观察
四元数:方便用来运算
public class SiyuanshuCS : MonoBehaviour {
public Transform cube;
// Use this for initialization
void Start () {
print(cube.eulerAngles);//输出欧拉角的值
print(cube.rotation);//输出四元数的值
}
// Update is called once per frame
void Update () {
}
}