In medio stat virtus

雰囲気研究者です。

Mac OS Sierraが重いときMac初心者でも頑張れそうな対処法まとめ

開発経験がなく、PCにそこまで詳しくない知人から「5年ほど愛用しているiMacの挙動が急に重たくなった」という相談をうけました。

Mac初心者(=私目線)でも頑張れそうな解決策を探してみました。

自分では試していないので信頼性はよくわからないですが。。

 

解決策の概要

大きく2つのアプローチからまとめました。

 

 

 

【解決策その1】アクティビティモニタの解析

アクティビティモニタをみて、CPUを多く使っているものに応じて対処。
 

(1)「backup」の場合…

症状:バックアップを作ろうと頑張ってるから重い
*解決策*
メニューバーのTime Machineアイコンをクリックして
「バックアップ作成を準備中…」となってるか確認する
    ↓
なっている場合、
OSのアップロードが最新版か確認して、「バックアップの更新」をひたすら待つor一回バックアップを削除して新しくバックアップを作る
※参考リンク元
 
 

(2)「secd」の場合…

症状:キーチェーン(パスワード情報等)をiCloudと同期してて重い
*解決策*
次の①or②で解決できる。
iCloudとキーチェーンを同期する。
iCloudMacと連携させない。
※手順は参考リンク元↓見るほうが早い
 
 

(3)「photoanalysisd」の場合…

症状:写真ライブラリを同期しようとした際のバグ
*解決策*
設定→iCloudへ進み、「写真」のチェックを外してiCloudの同期を止める 
  ↓
バックアップを取り、写真ライブラリをまるごと削除するかどこかへ移動する
 ↓
再起動してから、iCloudの写真に再びチェックを入れる

 

参照リンク元
 

(4)特別異常なCPU保有率がなく、「windowServer」や「kernel_task」が上位にきている場合…

症状:SMC(システム管理コントローラ)の不都合の可能性
※SMCとは:電源周りや熱管理を制御するセンサー系
*解決策:SMCをリセットする。( ※実行は自己責任で。。)*
1.システムを電源オフ
2.電源コードを抜く。私はコンセントではなく、iMAC側を抜きました。
3.この状態でしばらく放置します。apple公式では15 秒間とのこと。
4.電源コードをつないで、再び放置。公式にでは5 秒間とのこと。
5.電源ボタンを押して Mac の電源を入れます。
参照リンク元
もしくは
1.コンピュータをシステム終了。
2.まだ接続していない場合は、MagSafe 電源アダプタをコンセントに接続し、Mac に接続する。
3.内蔵キーボードで、「(左の) shift + control + option」キーを押しながら、電源ボタンを押す
4.3 つのキー全部と電源ボタンを同時に放す。
5.電源ボタンを押してコンピュータを起動する。
※詳細は↓のリンク参照
 
 

【解決策その2:ダウングレード】

5年前のMacが最新版のSierraについていけない可能性を友達から指摘されて、なるほどなーて思いました。
おじいちゃんに新しいこといっても動かない的な。。
そこでOS X EI Captain(最新版より1つ前)にダウングレードする方法を調べました。
↓のサイトにダウングレードの仕方が3種類のっています。
このサイトを見た感じ、私的には次の順番でやりやすいとおもいました。
手法①Time Machineでダウングレード→多分いちばん簡単
手法③インストールディスクを作成してダウングレード→コマンド打つから抵抗ありそう。
手法②インターネットリカバリでダウングレード→5年前に買った当時のOSになるから初心者はやめたほうがよさそう
 

【その他:ブラウザを変えてみる】

Youtube見る時にめちゃくちゃ重たいと言っていたので、根本的な原因とは別な気がしますが、ブラウザを変えてみることも検討してみました。
SafariよりChromeFirefoxのが微妙に早いらしいので、それをダウンロードして使うといいのかな。。
ブラウザ比較サイト↓
 
 
私自身詳しくないから詳しい人に叩かれそうだけど、、
開発経験のない人にとってもこれくらいなら頑張れそう…というのを探してみました。
解決したらいいな。おわり。
 
 

 

 

 

ゲージ作成、移動ボタン作成、rigidbodyとか

メモ程度に〜

 

 

オブジェクトに当たると体力ゲージがさがるようなHUDを作る

完成したHUD.cs↓ これをプレハブ化したゲージにつけました

 

using UnityEngine;
using System.Collections;

public class HUD : MonoBehaviour {

    private float hitpoint;
    private float hitpoint_max;
    private float nowsize;
    public float default_size;
    public GameObject refObj;
     
    // Use this for initialization
    void Start () {


    }

    // Update is called once per frame
    void Update () {
        Rocket rocket =   refObj.GetComponent<Rocket> ();
        if (rocket != null) {
            hitpoint = rocket.Hitpoint;
            hitpoint_max = rocket.Hitpoint_max;
        } else {
            Debug.LogWarning ("can't get script Rocket!");
        }
        nowsize =  default_size - hitpoint/hitpoint_max;
        transform.localScale = new Vector3 ( nowsize0.5f1f);
        if(nowsize<=0){
            Application.LoadLevel("result");
        }

    }
}

 

デフォルトサイズから、減った割合だけ減るようにしたつもり…

わからなかったり苦戦したことが

・ゲームオブジェクトを参照するときpublicで宣言してるからあとでInspectorから対応するオブジェクトをドラッグアンドドロップする必要があった

・減らしたいHPバーをプレハブにする

→大きさ調整しただけで特になにもつけてない

 

他のブログみてると難しいことやってて行数少ないけど時間かかった…

 

移動ボタン作成

左右の移動ボタンを作った。まあマウス入力の判別だしいけるっしょー

でも、同じスクリプトを2箇所に使いまわしたかったけどうまくいかなかった。

コントローラーのスクリプトでbool型のチェック変数を作っておいて、クリックされたオブジェクトのタグで場合分けをしたかったのだけども…

先に押した方のtrueがずっと有効になっていて、Input.GetMouseButtonUpでFalseでリセットするようにしてるはずなのにうまくいかなかった記憶

 

時間ないから右用、左用でスクリプトを作った。ぽんこつ〜

 

public class TransButton_L : MonoBehaviour {
    
    public GameObject refObj;
    public float power;
 
    // Update is called once per frame
    void  Update () {
        
        Rocket rocket = refObj.GetComponent<Rocket> ();
        power = rocket.power;
        if(Input.GetMouseButton(0)){
            Vector3 aTapPoint=Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Collider2D aCollider2d = Physics2D.OverlapPoint(aTapPoint);

            if(aCollider2d){
            rocket.rigidbody2D.velocity = new Vector2(-1,0)*power;
            }
        }
    }
    
}

 

前に作ったRocket.csで動かすパワーを決めてたからそれを参照するように変更しただけー

どこかで見つけたマウス入力の違いをメモ書き

●マウス入力を取得

function Update() {
if(Input.GetMouseButtonDown(0)){
//マウスの左ボタンを押した
}
if(Input.GetMouseButton(0)){
//マウスの左ボタンを押し続けている
}
if(Input.GetMouseButtonUp(0)){
//マウスの左ボタンを離した
}
}

 

背景をスクロールするようにしたい

↓こちらを参考にして作った

背景をスクロールさせる | Unity | Obake Solutions

 

このリンク先のリンク先をもともと読んでいたらうまくいかなかったんだけどマテリアル作成してませんでしたぺろぺろ

 

rigidbody.AddForceとRigidbody2D.AddForceの受け渡しの違い

 

引力を発生するEnemy発生させようとおもって

[Unity] 惑星に向かって物体が落ちるようにする | ftvlog

このリンク先のスクリプトそのままコピペ。したけどエラー。

rigidbodyじゃなくてRigidbody2Dを使わなきゃいけないっぽくて、そのまま2Dだけ足してもエラー。

 

どうやらrigidbodyではAddForce(x: float, y: float, z: float, mode: ForceMode = ForceMode.Force): void;

の型でForceModeを引数にできる。

一方RIgidbody2D.AddForceでは
AddForce(force: Vector2): void;
なので同じ書き方をしたら怒られる。
※Rigidbody2DにもForceModeを引数にできるらしいけど、ForceMode2Dにしなきゃいけないぽい

rigidbody2D.AddForceの使い方の参考スレッド

Rigidbody2D and ForceMode.AddVelocity? - Unity Answers

↑このリンク後々神になる

 

しかもForceModeとForceMode2Dでvariablesが異なる
ForceMode2DではForceとImpulseのみ。

Unity - Scripting API: ForceMode2D

 

参考スクリプトではAcceleration使いたいのに!

げろげろ!

 

ということで引数にMode使うよりは、Modeに該当する計算式をさっき神リンクって紹介したスレッドからピックアップするほうがよさそう。

 

 

以上〜。